溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Hadoop如何調(diào)優(yōu)

發(fā)布時間:2021-12-08 10:44:24 來源:億速云 閱讀:110 作者:小新 欄目:云計(jì)算

這篇文章將為大家詳細(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.tasks1表示不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.percentreduce在copy時使用的堆空間的比例
mapred.tasktracker.{map|reduce}.tasks.maximum一個Tasktracker上可同時運(yùn)行的最大map、reduce任務(wù)數(shù)
mapred.reduce.copy.backoffreduce獲取一份map輸出數(shù)據(jù)的最大時間,單位秒。
io.compression.codecs壓縮算法
dfs.block.sizehdfs上的文件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.mbmap使用的緩存,影響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.copiesreduce從map結(jié)果copy數(shù)據(jù)時,每個reduce起的并行copy線程數(shù)。該值越大,io壓力越大,但可能引起網(wǎng)絡(luò)堵塞,copy效率反而降低。
io.sort.factormerge時的并行merge數(shù),同時影響map的spill文件merge和reduce中的merge
mapred.compress.map.output指定map的輸出是否壓縮。有助于減小數(shù)據(jù)量,減小io壓力,但壓縮和解壓有cpu成本,需要慎重選擇壓縮算法。
mapred.map.output.compression.codecmap輸出的壓縮算法
mapred.output.compressreduce輸出是否壓縮
mapred.output.compression.codec控制mapred的輸出的壓縮的方式
io.sort.record.percentmap中間數(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é)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(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)容。

AI