Hadoop調優總結

2021-09-02 12:05:58 字數 2608 閱讀 1876

[size=large]1. 管理員角度主要在四方面進行調優[/size]

(1) 硬體選擇、

(2)作業系統引數調優、

(3)jvm引數調優、

(4)hadoop引數調優。

[size=large]2.作業系統調優[/size]

(1).增大同時開啟的檔案描述符合網路連線上限。

管理員在啟動hadoop集群時,應使用ulimit命令將允許同時開啟的檔案描述符數目上限增大至乙個合適的值,同時調整核心引數

net.core.somaxconn至乙個足夠大的值。此外,hadoop rpc採用了epoll作為高併發庫,如果你使用的linux核心版本在2.6.28以上,你需要適當調整epoll的檔案描述符上限。

(2).關閉swap分割槽

(3).設定合理的預讀取緩衝區大小

磁碟i/o效能的發展遠遠滯後於cpu和記憶體,因而成為現代計算機系統的乙個主要瓶頸。預讀可以有效地減少磁碟的尋道次數和應用程式的

i/o等待時間,是改進磁碟讀i/o效能的重要優化手段之一。管理員可使用linux命令blockdev設定預讀取緩衝區的大小,以提高hadoop

中大檔案順序讀的效能。當然,也可以只為hadoop系統本身增加預讀緩衝區大小。。

(4).檔案系統選擇與配置

hadoop的i/o效能很大程度上依賴於linux本地檔案系統的讀寫效能。linux中有多種檔案系統可供選擇,比如ext3和ext4,不同的檔案系統效能有一定的差別。如果公司內部有自主研發的更高效的檔案愛你系統,也鼓勵使用。

(5).i/o排程器選擇

主流的linux發行版自帶了很多可供選擇的i/o排程器。在資料密集型應用中,不同的i/o排程器效能表現差別較大,管理員可根據自己的應用特點啟用最合適的i/o排程器,具體可參考amd的***《hadoop performance tuning guide》

[size=large]3.優化hadoop [/size]

(1) 從應用程式角度進行優化。

由於mapreduce是迭代逐行解析資料檔案的,怎樣在迭代的情況下,編寫高效率的應用程式,是一種優化思路。

(2) 對hadoop引數進行調優。

當前hadoop系統有190多個配置引數,怎樣調整這些引數,使hadoop作業執行盡可能的快,也是一種優化思路。

(3) 從系統實現角度進行優化。

這種優化難度是最大的,它是從hadoop實現機制角度,發現當前hadoop設計和實現上的缺點,然後進行原始碼級地修改。該方法雖難度大,但往往效果明顯。

[size=large]4. 從應用程式角度進行優化[/size]

(1) 避免不必要的reduce任務

如果要處理的資料是排序且已經分割槽的,或者對於乙份資料, 需要多次處理, 可以先排序分割槽;然後自定義inputsplit, 將單個分割槽作為單個mapred的輸入;在map中處理資料, reducer設定為空。

這樣, 既重用了已有的 「排序」, 也避免了多餘的reduce任務。

(2)外部檔案引入

有些應用程式要使用外部檔案,如字典,配置檔案等,這些檔案需要在所有task之間共享,可以放到分布式快取distributedcache中(或直接採用-files選項,機制相同)。

更多的這方面的優化方法,還需要在實踐中不斷積累。

(3) 為job新增乙個combiner

為job新增乙個combiner可以大大減少shuffle階段從map task拷貝給遠端reduce task的資料量。一般而言,combiner與reducer相同。

(4) 根據處理資料特徵使用最適合和簡潔的writable型別

text物件使用起來很方便,但它在由數值轉換到文字或是由utf8字串轉換到文字時都是低效的,且會消耗大量的cpu時間。當處理那些非文字的資料時,可以使用二進位制的writable型別,如intwritable, floatwritable等。二進位制writable好處:避免檔案轉換的消耗;使map task中間結果占用更少的空間。

(5) 重用writable型別

(6) 使用stringbuffer而不是string

當需要對字串進行操作時,使用stringbuffer而不是string,string是read-only的,如果對它進行修改,會產生臨時物件,而stringbuffer是可修改的,不會產生臨時物件。

(7)除錯

最重要,也是最基本的,是要掌握mapreduce程式除錯方法,跟蹤程式的瓶頸。具體可參考:

[size=large]5.hive資料傾斜[/size]

(1). 萬能膏藥:hive.groupby.skewindata=true

(2). 大小表關聯:將key相對分散,並且資料量小的表放在join的左邊,這樣可以有效減少記憶體溢位錯誤發生的機率;再進一步,可以使用map join讓小的維度表(1000條以下的記錄條數)先迚記憶體。在map端完成reduce.

(3). 大表和大表關聯:把空值的key變成乙個字串加上隨機數,把傾斜的資料分到不同的reduce上,由於null值關聯不上,處理後並不影響最終結果。

(4). count distinct大量相同特殊值:count distinct時,將值為空的情況單獨處理,如果是計算count distinct,可以不用處理,直接過濾,在最後結果中加1。如果還有其他計算,需要進行group by,可以先將值為空的記錄單獨處理,再和其他計算結果進行union。

Hadoop效能調優

最近看了些hadoop效能調優的文章,現總結如下。1 關於集群物理機器 配置noatime選項。配置方式 etc fstab 相關知識點 atime,ctime,mtime。對於datanode tasktracker機器,不需要配置raid或lvm。盡量避免使用到tasktracker的swap。...

hadoop 效能調優

hadoop 效能調優 環境 4臺suse 各 4g 記憶體 1t硬碟 4核cpu 3臺 redhat 各 2g記憶體 500g 硬碟 雙核cpu 由於沒有真正意義上的伺服器,所以當執行大量map reduce任務的時候 map 執行速度還可以接受 但reduce 速度 特別慢,所以開發 對集群進行...

Hadoop 調優剖析

其實,在從事過調優相關的工作後,會發現其實調優是一項較為複雜的工作。而對於hadoop這樣複雜且龐大的系統來說,調優更是一項巨大的工作,由於hadoop包含common hdfs mapreduce yarn等模組,每個模組都有可以根據自身業務進行優化的工作,本篇部落格也是針對某些模組進行調優剖析。...