日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop企业优化

發布時間:2024/2/28 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop企业优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hadoop企業優化

1.1 MapReduce跑的慢的原因

Mapreduce 程序效率的瓶頸在于兩點:

1.計算機性能

CPU、內存、磁盤健康、網絡

2.I/O 操作優化

(1)數據傾斜

(2)map和reduce數設置不合理 combineTextinputformat,分區

(3)map運行時間太長,導致reduce等待過久

(4)小文件過多

(5)spill(溢出)次數過多,溢出數據到磁盤,

(6)merge次數過多等。Shuffule,溢出之后會有合并,reduce端也會有合并

1.2 MapReduce優化方法

MapReduce優化方法主要從六個方面考慮:數據輸入、Map階段、Reduce階段、IO傳輸、數據傾斜問題和常用的調優參數。

1.2.1 數據輸入

(1)合并小文件:在執行mr任務前將小文件進行合并,大量的小文件會產生大量的map任務,大量節點資源被占用,從而導致mr整體運行較慢。

(2)采用CombineTextInputFormat來作為輸入,解決輸入端大量小文件場景。

1.2.2 Map階段

1)減少溢寫spill次數:通過調整io.sort.mb及sort.spill.percent參數值(在mapred-default.xml),增大觸發spill的內存上限,減少spill次數,從而減少磁盤IO。

2)減少合并merge次數:通過調整io.sort.factor參數(在mapred-default.xml),增大merge的文件數目,減少merge的次數,從而縮短mr處理時間。

3)在map之后,不影響業務邏輯前提下,先進行combine處理,減少 I/O。

1.2.3 Reduce階段

1)合理設置map和reduce數:兩個都不能設置太少,也不能設置太多。太少,會導致task等待,延長處理時間;太多,會導致 map、reduce任務間競爭資源,造成處理超時等錯誤。

2)設置map、reduce共存:調整slowstart.completedmaps參數,使map運行到一定程度后,reduce也開始運行,減少reduce的等待時間。

3)合理設置reduce端的buffer:默認情況下,數據達到一個閾值的時候,buffer中的數據就會寫入磁盤,然后reduce會從磁盤中獲得所有的數據。也就是說,buffer和reduce是沒有直接關聯的,中間多個一個寫磁盤->讀磁盤的過程,既然有這個弊端,那么就可以通過參數來配置,使得buffer中的一部分數據可以直接輸送到reduce,從而減少IO開銷:mapred.job.reduce.input.buffer.percent,默認為0.0。當值大于0的時候,會保留指定比例的內存讀buffer中的數據直接拿給reduce使用。這樣一來,設置buffer需要內存,讀取數據需要內存,reduce計算也要內存,所以要根據作業的運行情況進行調整。

1.2.4 數據傾斜問題

1.數據傾斜現象

數據頻率傾斜——某一個區域的數據量要遠遠大于其他區域。

2.如何收集傾斜數據

在reduce方法中加入記錄map輸出鍵的詳細情況的功能。

public static final String MAX_VALUES = "skew.maxvalues";

private int maxValueThreshold;

?

@Override

public void configure(JobConf job) {

???? maxValueThreshold = job.getInt(MAX_VALUES, 100);

}

@Override

public void reduce(Text key, Iterator<Text> values,

???????????????????? OutputCollector<Text, Text> output,

???????????????????? Reporter reporter) throws IOException {

???? int i = 0;

???? while (values.hasNext()) {

???????? values.next();

???????? i++;

???? }

?

???? if (++i > maxValueThreshold) {

???????? log.info("Received " + i + " values for key " + key);

???? }

}

3.減少數據傾斜的方法

方法1:自定義分區

基于輸出鍵的背景知識進行自定義分區。例如,如果map輸出鍵的單詞來源于一本書。且其中某幾個專業詞匯較多。那么就可以自定義分區將這這些專業詞匯發送給固定的一部分reduce實例。而將其他的都發送給剩余的reduce實例。

方法2:Combine

使用Combine可以大量地減小數據傾斜。在可能的情況下,combine的目的就是聚合并精簡數據。

方法3采用Map Join,盡量避免Reduce Join。

總結

以上是生活随笔為你收集整理的Hadoop企业优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。