您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關hadoop系統參數如何優化的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
hadoop系統參數優化
為了提高其數據性能,很多人開始優化Hadoop。總結看來,對于Hadoop,當前主要有幾個優化思路:
(1) 從應用程序角度進行優化。由于mapreduce是迭代逐行解析數據文件的,怎樣在迭代的情況下,編寫高效率的應用程序,是一種優化思路。
(2) 對Hadoop參數進行調優。當前hadoop系統有190多個配置參數,怎樣調整這些參數,使hadoop作業運行盡可能的快,也是一種優化思路。
(3) 從系統實現角度進行優化。這種優化難度是最大的,它是從hadoop實現機制角度,發現當前Hadoop設計和實現上的缺點,然后進行源碼級地修改。該方法雖難度大,但往往效果明顯
3.2.1 Linux文件系統參數調整
(1) noatime 和 nodiratime屬性
文件掛載時設置這兩個屬性可以明顯提高性能。。默認情況下,Linux ext2/ext3 文件系統在文件被訪問、創建、修改時會記錄下文件的時間戳,比如:文件創建時間、最近一次修改時間和最近一次訪問時間。如果系統運行時要訪問大量文件,關 閉這些操作,可提升文件系統的性能。Linux 提供了 noatime 這個參數來禁止記錄最近一次訪問時間戳。
(2) readahead buffer
調整linux文件系統中預讀緩沖區地大小,可以明顯提高順序讀文件的性能。默認buffer大小為256 sectors,可以增大為1024或者2408 sectors(注意,并不是越大越好)。可使用blockdev命令進行調整。
Command:
察看: blockdev --report
變更: blockdev --setra 1024 /dev/sda
(3) 避免RAID和LVM操作
避免在TaskTracker和DataNode的機器上執行RAID和LVM操作,這通常會降低性能。
3.2.2 Hadoop通用參數調整
(1) dfs.namenode.handler.count或mapred.job.tracker.handler.count(hdfs-default)
namenode或者jobtracker中用于處理RPC的線程數,默認是10,較大集群,可調大些,比如64。
(2) dfs.datanode.handler.count(hdfs-default)
datanode上用于處理RPC的線程數。默認為3,較大集群,可適當調大些,比如8。需要注意的是,每添加一個線程,需要的內存增加。
(3) mapreduce.tasktracker.http.threads (mapred-default)
HTTP server上的線程數。運行在每個TaskTracker上,用于處理map task輸出。大集群,可以將其設為40~50。
3.2.3 HDFS相關配置
(1) dfs.replication(hdfs-default)
文件副本數,通常設為3,不推薦修改。
(2) dfs.block.size(hdfs-default)
HDFS中數據block大小,默認為64M,對于較大集群,可設為128MB或者256MB。(也可以通過參數mapred.min.split.size配置)
(3) mapred.local.dir(mapred-default)和dfs.data.dir(hdfs-default)
這兩個參數mapred.local.dir和dfs.data.dir 配置的值應當是分布在各個磁盤上目錄,這樣可以充分利用節點的IO讀寫能力。運行 Linux sysstat包下的iostat -dx 5命令可以讓每個磁盤都顯示它的利用率。
3.2.4 map/reduce 相關配置
(1) {map/reduce}.tasks.maximum(mapred-default)
同時運行在TaskTracker上的最大map/reduce task數,一般設為(core_per_node)/2~2*(cores_per_node)。
(2) io.sort.factor(mapred-default)
當一個map task執行完之后,本地磁盤上(mapred.local.dir)有若干個spill文件,map task最后做的一件事就是執行merge sort,把這些spill文件合成一個文件(partition)。執行merge sort的時候,每次同時打開多少個spill文件由該參數決定。打開的文件越多,不一定merge sort就越快,所以要根據數據情況適當的調整。
(3) mapred.child.java.opts(mapred-default)
設置JVM堆的最大可用內存,需從應用程序角度進行配置。
3.2.5 map task相關配置
(1) io.sort.mb(mapred-default)
Map task的輸出結果和元數據在內存中所占的buffer總大小。默認為100M,對于大集群,可設為200M。當buffer達到一定閾值,會啟動一個后臺線程來對buffer的內容進行排序,然后寫入本地磁盤(一個spill文件)。
(2) io.sort.spill.percent(mapred-default)
這個值就是上述buffer的閾值,默認是0.8,即80%,當buffer中的數據達到這個閾值,后臺線程會起來對buffer中已有的數據進行排序,然后寫入磁盤。
(3) io.sort.record.percent (mapred-default)
Io.sort.mb中分配給元數據的內存百分比,默認是0.05。這個需要根據應用程序進行調整。
(4) mapred.compress.map.output/ Mapred.output.compress(mapred-default)
中間結果和最終結果是否要進行壓縮,如果是,指定壓縮方式(Mapred.compress.map.output.codec/ Mapred.output.compress.codec)。推薦使用LZO壓縮。Intel內部測試表明,相比未壓縮,使用LZO壓縮的 TeraSort作業運行時間減少60%,且明顯快于Zlib壓縮。
3.2.6 reduce task相關配置
(1) Mapred.reduce.parallel
Reduce shuffle階段copier線程數。默認是5,對于較大集群,可調整為16~25。
這種基于參數的調優比較“靜態”,因為一套參數配置只對于一類作業是最優的。通過對這些參數的研究,可以尋找參數配置與不同作業特征之間的關聯。
感謝各位的閱讀!關于“hadoop系統參數如何優化”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。