Hadoop性能調(diào)優(yōu)

在這篇文章中,我們將會分享一些對Hadoop進行性能調(diào)優(yōu)的方法,技巧。

這篇文章由我在閱讀《Optimizing Hadoop for MapReduce》時,做的筆記,整理而成。

強烈建議讀者去讀一下上面重點標(biāo)注的那本書。這本書,對如何對Hadoop進行性能調(diào)優(yōu),做了非常詳細(xì)的介紹。

進行性能調(diào)優(yōu)的方式

我們可以從下面的幾個方面來對Hadoop進行優(yōu)化:

  • 優(yōu)化HDFS
  • 調(diào)整參數(shù)使CPU利用地更加充分
  • 調(diào)整參數(shù)使內(nèi)存利用地更加充分
  • 調(diào)整參數(shù)使磁盤利用地更加充分
  • 調(diào)整參數(shù)使網(wǎng)絡(luò)利用地更加充分
  • 對JVM進行調(diào)優(yōu)
  • 對操作系統(tǒng)進行調(diào)優(yōu)

各個方面的具體參數(shù)

和CPU相關(guān)的參數(shù)

  • mapred.tasktracker.map.tasks.maximum: TaskTracker上面,能夠同時運行的map tasks的數(shù)量
  • mapred.tasktracker.reduce.tasks.maximum: TaskTracker上面,能夠同時運行的reduce tasks的數(shù)量

和磁盤相關(guān)的參數(shù)

  • mapred.compress.map.output: 是否對mapper的輸出進行壓縮
  • mapred.output.compress: 是否對job的輸出進行壓縮
  • mapred.map.output.compression.codec: 啟用哪個compression codec來對map的輸出進行壓縮
  • mapred.local.dir: 存儲mapper的中間結(jié)果的目錄。如果指定了多個目錄,那么就會均勻放置在不同的目錄中。
  • dfs.data.dir: DataNode用于存儲數(shù)據(jù)的目錄

和內(nèi)存相關(guān)的參數(shù)

  • mapred.child.java.opts: 為每個JVM task分配多大的內(nèi)存
  • mapred.child.ulimit: 指定為每個MapReduce job分配的最大虛擬內(nèi)存
  • io.sort.mb: 指定mapper的輸出可以占用的內(nèi)存
  • io.sort.factor: 指定能夠同時進行排序的文件的個數(shù)
  • mapred.job.reduce.input.buffer.percent: Reducer端,用于保存mapper的輸出結(jié)果的內(nèi)存的大小

和網(wǎng)絡(luò)相關(guān)的參數(shù)

  • mapred.reduce.parallel.copies: 在Shuffle階段,并行從mapper讀取數(shù)據(jù)的線程的數(shù)量
  • topology.script.file.name: 指定用于將DNS解析成主機的腳本的名稱

hdfs-site.xml中和性能調(diào)優(yōu)有關(guān)的參數(shù)

  • dfs.access.time.precision: 文件訪問時間戳的精確度。如果設(shè)置成0,則表示不啟用文件訪問時間戳。在負(fù)載很大的時候,能夠提高性能。
  • dfs.balance.bandwidthPerSec: 每個DataNode在rebalance block時,能夠使用的最大帶寬
  • dfs.block.size: DataNode上block的大小
  • dfs.data.dir: DataNode上用于存儲數(shù)據(jù)的目錄
  • dfs.datanode.du.reserved: DataNode上保留的空間的大小
  • dfs.datanode.handler.count: DataNode上處理block requests的handler的數(shù)量
  • dfs.max.objects: 最多能夠存儲的object(包括文件,目錄和block)的數(shù)量
  • dfs.name.dir: NameNode上用于存儲數(shù)據(jù)元數(shù)據(jù)的目錄
  • dfs.namenode.handler.count: NameNode上用于處理數(shù)據(jù)元數(shù)據(jù)的線程的數(shù)量
  • dfs.name.edits.dir: NameNode上存儲edit file的目錄
  • dfs.replication: 集群中,每個block的副本的數(shù)量
  • dfs.replication.considerLoad: 當(dāng)block在放置的時候,是否考慮data node的負(fù)載

core-site.xml中和性能調(diào)優(yōu)有關(guān)的參數(shù)

  • fs.default.name: 默認(rèn)的文件系統(tǒng)
  • hadoop.tmp.dir: 用于存儲臨時文件的目錄
  • fs.checkpoint.dir: Secondary NameNode用于存儲checkpoints的目錄
  • io.file.buffer.size: 當(dāng)讀取或者寫入文件時,可用的緩沖區(qū)的大小

和壓縮相關(guān)的參數(shù)

  • io.compression.codec: Hadoop用于確定是否支持特定compression codec
  • mapreduce.map.output.compression: 是否對mapper的輸出進行壓縮
  • mapreduce.map.output.compress.codec: 對mapper的輸出進行壓縮時,采用哪個compression codec
  • mapreduce.output.fileoutputformat.compress: 是否對job的輸出進行壓縮
  • mapreduce.output.fileoutputformat.compress.codec: 采用哪個compression codec對job的輸出進行壓縮
  • mapreduce.output.fileoutputformat.compress.type: 對于SequenceFile,采用哪種壓縮方式,可選值為NONE或者BLOCK
    '

啟用JVM重用

  • mapred.job.reuse.jvm.num.tasks: 一個JVM能夠運行的Task的最大值。設(shè)置成-1的話,則這個JVM可以運行無限個Tasks.

其他

這本書中,還詳細(xì)介紹了如何確定Mapper或者Reducer的數(shù)量,如何確定一個HDFS集群中,需要多少個節(jié)點。

關(guān)于這部分內(nèi)容,請自行查看這本書。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容