hadoop的IO和MapReduce最佳化參數

來源:互聯網
上載者:User

在MapReduce執行過程中,特別是Shuffle階段,盡量使用記憶體緩衝區儲存資料,減少磁碟溢寫次數;同時在作業執行過程中增加並行度,都能夠顯著提高系統效能,這也是配置最佳化的一個重要依據。

下面分別介紹I/O屬性和MapReduce屬性這兩個類的部分屬性,並指明其最佳化方向。

1 I/O屬性類的最佳化

I/O屬性類主要包括在Shuffle階段中相關的I/O過程的屬性,在分析了每個具體屬性後從以下幾個屬性入手進行最佳化。

(1) io.sort.factor屬性,int類型,Map端和Reduce端使用

該屬性設定在Map端和Reduce端都使用到的對檔案Sort時一次合并的最大流,其預設值是10,即一次合并10個流。在叢集中,將其適當增大能夠提高並行度以縮短合并所需時間。將此預設值增加到100是比較常見的。

(2) io.sort.mb屬性,int類型,Map端使用

該屬性設定對Map輸出進行排序時使用的環形記憶體緩衝區的大小,以M位元組為單位,預設是100M。如果允許,應該增加它的值來減少磁碟溢寫的次數以提高效能。

(3) io.sort.record.percent屬性,float類型,Map端使用

該屬性設定保留的io.sort.mb的比例用來儲存Map輸出的記錄邊界,剩餘的空間用來儲存Map輸出記錄本身,預設是0.05。

(4) io.sort.spill.percent屬性,float類型,Map端使用

該屬性設定Map輸出記憶體緩衝和邊界記錄索引兩者使用比例的閾值,達到此值後開始溢寫磁碟的過程,預設是0.80。

(5) io.file.buffer.size屬性,int類型,MapReduce作業使用

該屬性設定MapReduce作業的I/O操作中所提供的緩衝區的大小,以位元組為單位,預設是4096位元組。這是一個比較保守的設定,通過增大它的大小能夠減少I/O次數以提高效能。如果系統允許,64KB(65536位元組)至128KB(131072位元組)是較普遍的選擇。

2 MapReduce屬性類的最佳化

MapReduce屬性類主要包括在MapReduce執行過程中相關配置屬性,重點從以下的部分屬性去分析效能最佳化。

(1) mapred.reduce.parallel.copies屬性,int類型,Reduce端使用

該屬性設定將Map輸出複製到Reduce的線程的數量,預設為5。根據需要可以將其增大到20-50,增加了Reduce端複製過程的並行數,提高了系統效能。

(2) mapred.child.java.opts屬性,String類型,Map和Reduce任務虛擬機器使用

該屬性設定Map和Reduce任務運行時Java虛擬機器指定的記憶體的大小,預設-Xmx200m,分配給每個任務200MB記憶體。只要條件允許,應該讓任務節點上的記憶體大小盡量大,可以將其增大到-Xmx512m,即512MB,以提高MapReduce作業的效能。

(3) mapred.job.shuffle.input.buffer.percent屬性,float類型,Reduce端使用

該屬性設定整個堆空間的百分比,用於Shuffle的複製階段分配給Map輸出緩衝,預設是0.70,適當增大比例可以使Map輸出不被溢寫到磁碟,能夠提高系統效能。

(4) mapred.job.shuffle.merge.percent屬性,float類型,Reduce端使用

該屬性設定Map輸出緩衝中使用比例的閾值,用於啟動合并輸出和磁碟溢寫的過程,預設是0.66。如果允許,適當增大其比例能夠減少磁碟溢寫次數,提高系統效能。

(5) mapred.inmem.merge.threshold屬性,int類型,Reduce端使用

該屬性設定啟動合并輸出和磁碟溢寫過程的最大Map輸出數量,預設為1000。由於Reduce端複製的中間值能夠全部存在記憶體中可以獲得最佳效能。如果Reduce函數記憶體需求很少,可以將該屬性設定為0,即沒有閾值限制,由mapred.job.shuffle.merge.percent屬性單獨控制溢寫過程。

(6) mapred.job.reduce.input.buffer.percent屬性,float類型,Reduce端使用

該屬性設定在Reduce過程中用來在記憶體中儲存Map輸出的空間占整個堆空間的比例。Reduce階段開始時,記憶體中的Map輸出大小不能大於這個值。預設為0.0,說明在Reduce開始前所有的Map輸出都合并到硬碟中以便為Reduce提供儘可能多的記憶體。然而如果Reduce函數記憶體需求較小,可以將該值設定為1.0來提升效能。

(7) tasktracker.http.threads屬性,int類型,Map端使用

該屬性設定叢集中每個tasktracker用於將map輸出傳給reducer的背景工作執行緒的數量,預設是40。可以將其提高至40-50之間,能夠增加併線線程數,提高叢集效能。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.