您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Hadoop如何調(diào)優(yōu),小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
一 HDFS相關(guān)的調(diào)優(yōu)
關(guān)于HDFS的參數(shù)調(diào)優(yōu),第一個就是數(shù)據(jù)塊的大小dfs.block.size,之前默認(rèn)是64m,hadoop 2.x好像已經(jīng)改為128m了,如果網(wǎng)絡(luò)環(huán)境比較好,建議根據(jù)實(shí)際業(yè)務(wù)需求,適當(dāng)?shù)恼{(diào)大一些。
其他的例如設(shè)置文件的備份數(shù)目,默認(rèn)是3,一般不建議更改。一份保存在datanode節(jié)點(diǎn)上,一份保存在同一個機(jī)架的其他節(jié)點(diǎn)上,另一份保存在其他的機(jī)架上,默認(rèn)情況下,數(shù)據(jù)是隨機(jī)分配在各個節(jié)點(diǎn)上的,但是可以通過設(shè)置機(jī)架感知,使得數(shù)據(jù)在節(jié)點(diǎn)間的網(wǎng)絡(luò)傳輸減少。
配置如下:在namenode的節(jié)點(diǎn)配置hdfs-site.xml
<property> <name>topology.script.file.name</name> <value>/path/to/RackAware.py</value> </property
輸入某臺datanode的ip,返回該ip對應(yīng)的機(jī)架。是在腳本中實(shí)現(xiàn)的。
#! /usr/bin/python import sys rack={"192.168.1,15":"rack1", "192.168.1.16":"rack1", "192.168.1.17":"rack2", "192.168.1.18":"rack2"} if __name__=="__main__": print "/"+rack.get(sys.argv[1],"rack0"}
設(shè)置mapred.local和dfs.data.dir,這兩個參數(shù)配置的值應(yīng)當(dāng)分布在各個磁盤的目錄上。
二 mapreduce的調(diào)優(yōu)
首先從map階段說起,就是設(shè)置map的個數(shù)問題,默認(rèn)只有一個map線程,設(shè)置map參數(shù)的個數(shù)是mapred.map.tasks reduce則是mapred.reduce.tasks。因?yàn)檫@兩個參數(shù)的設(shè)置是影響到整個集群的,就是說會考慮到單臺機(jī)器上的map,reduce個數(shù)。map.tasktracker.map.tasks.maxinum和map.tasktracker.reduce.tasks.maxinum這兩個參數(shù)設(shè)置了一臺機(jī)器上最多能同時運(yùn)行的map和reduce數(shù)目。還有,就是map和reduce之間是怎么樣的配比比較好呢?通過觀察web界面,查看map和reduce的進(jìn)度,可以發(fā)現(xiàn)當(dāng)reduce執(zhí)行到33%時候,map正好執(zhí)行100%,所以我們可以在控制reduce啟動的時間,不讓reduce在等待。
當(dāng)map,reduce個數(shù)確定了,根據(jù)業(yè)務(wù)需要,最好設(shè)置Combiner 。然后是設(shè)置map輸出結(jié)果到緩存的大小,因?yàn)槊恳粋€map或者reduce都是一個task,都會啟動一個jvm,,io.sort.mb就是分配map端buffer的大小,等于mb*io.sort.spill.percent。
對于map的結(jié)果,我們可以設(shè)置壓縮,減少網(wǎng)絡(luò)傳輸。那么建議打開mapred.compress.map.output壓縮選項(xiàng),并配置 mapred.map.output.compression.codec壓縮編碼格式,一般都會使用snappy,因?yàn)檫@種格式對于壓縮和解壓縮都相對較快
還有如果你的集群是異構(gòu)的,有的機(jī)器好,有的機(jī)器性能差,建議打開推測性執(zhí)行,打開mapred.reduce.tasks.speculative.execution,有利于優(yōu)化進(jìn)程分配,提高集群性能。
在reduce階段,從map端拷貝數(shù)據(jù)時,可以設(shè)置最大并行拷貝線程數(shù),這些線程會同時從不同的datanode上去map結(jié)果 設(shè)置mapred.reduce.parallel.copies
下面是一些調(diào)優(yōu)的參數(shù)列表:
name | 說明 |
mapred.task.profile | 是否對任務(wù)進(jìn)行profiling,調(diào)用java內(nèi)置的profile功能,打出相關(guān)性能信息 |
mapred.task.profile.{maps|reduces} | 對幾個map或reduce進(jìn)行profiling。非常影響速度,建議在小數(shù)據(jù)量上嘗試 |
mapred.job.reuse.jvm.num.tasks | 1表示不reuse,-1表示無限r(nóng)euse,其他數(shù)值表示每個jvm reuse次數(shù)。reuse的時候,map結(jié)束時不會釋放內(nèi)存! |
mapred.{map|reduce}.tasks.speculative.execution | 會對運(yùn)行慢的任務(wù)起一個備份任務(wù),看哪個先完成,kill掉后完成的備份 |
io.sort.spill.percent | 開始spill的內(nèi)存比例閾值,對map和reduce都生效 |
mapred.job.shuffle.input.buffer.percent | reduce在copy時使用的堆空間的比例 |
mapred.tasktracker.{map|reduce}.tasks.maximum | 一個Tasktracker上可同時運(yùn)行的最大map、reduce任務(wù)數(shù) |
mapred.reduce.copy.backoff | reduce獲取一份map輸出數(shù)據(jù)的最大時間,單位秒。 |
io.compression.codecs | 壓縮算法 |
dfs.block.size | hdfs上的文件block大小 |
mapred.reduce.slowstart.completed.maps | 控制reduce的啟動時機(jī)。表示全部map的百分之多少完成后,才啟動reduce。如果機(jī)器內(nèi)存緊張,可以適當(dāng)設(shè)大改參數(shù),等大部分map結(jié)束并釋放內(nèi)存后才啟動reduce;如果希望盡快開始shuffle,則可配合大量map數(shù),將該值設(shè)小,以盡早啟動reduce,開始copy。 |
io.sort.mb | map使用的緩存,影響spill的次數(shù)。 |
mapred.child.java.opts | 同時設(shè)置map和reduce的jvm參數(shù) |
mapred.map.child.java.opts | 分開設(shè)置map的jvm參數(shù),包括GC策略 |
mapred.reduce.child.java.opts | 分開設(shè)置reduce的jvm參數(shù) |
map.sort.class | 對map的輸出key的排序方法 |
mapred.output.compression.type | 壓縮類型 |
mapred.min.split.size | 每個map的最小輸入大小,該值越大,map數(shù)越少 |
mapred.max.split.size | 每個map的最大輸入大小,該值約小,map數(shù)越多 |
mapred.reduce.parallel.copies | reduce從map結(jié)果copy數(shù)據(jù)時,每個reduce起的并行copy線程數(shù)。該值越大,io壓力越大,但可能引起網(wǎng)絡(luò)堵塞,copy效率反而降低。 |
io.sort.factor | merge時的并行merge數(shù),同時影響map的spill文件merge和reduce中的merge |
mapred.compress.map.output | 指定map的輸出是否壓縮。有助于減小數(shù)據(jù)量,減小io壓力,但壓縮和解壓有cpu成本,需要慎重選擇壓縮算法。 |
mapred.map.output.compression.codec | map輸出的壓縮算法 |
mapred.output.compress | reduce輸出是否壓縮 |
mapred.output.compression.codec | 控制mapred的輸出的壓縮的方式 |
io.sort.record.percent | map中間數(shù)據(jù)的index和data在io.sort.mb中占內(nèi)存的比例,默認(rèn)0.05%,需要根據(jù)具體數(shù)據(jù)的特點(diǎn)調(diào)整:index的大小固定為16byte,需要根據(jù)data的大小調(diào)整這個比例,以使io.sort.mb的內(nèi)存得到充分利用)。 |
關(guān)于“Hadoop如何調(diào)優(yōu)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。