hdfs+yarn 參數調優

1.系統參數調整

中文名稱 英文名稱 默認值 推薦值或推薦策略 修改命令 作用 備註
socket的監聽隊列最大值 net.core.somaxconn 128 1024或更大 echo 1024 >/proc/sys/net/core/somaxconn 增大打開文件數據和網絡連接上限,調整內核參數net.core.somaxconn,提高讀寫速度和網絡帶寬使用率 如果是hadoop使用,需重啓hadoop纔能有效,並且要配合hadoop集羣參數ipc.server.listen.queue.size使用纔有效
讀取不更新文件atime屬性 noatime   noatime vi /etc/fstab
#/dev/data1 / ext4 defaults,noatime 0 0
mount -o remount /dev/data1
當以noatime選項加載(mount)文件系統時,對文件的讀取不會更新文件屬性中的atime信息。設置noatime的重要性是消除了文件系統對文件的寫操作,文件只是簡單地被系統讀取。  
磁盤預讀緩存區大小 blockdev --getra /dev/sda 256 2048或更大 blockdev --setra 2048 /dev/sda 預讀可以減少磁盤尋道次數和I/O等待時間 執行命令只對一塊磁盤有效,需執行多次,且重啓系統後失效
系統IO調度器 IO Scheduler cfq deadline echo deadline > /sys/block/sda/queue/scheduler DEADLINE在CFQ的基礎上,解決了IO請求餓死的極端情況。除了CFQ本身具有的IO排序隊列之外,DEADLINE額外分別爲讀IO和寫IO提供了FIFO隊列。讀FIFO隊列的最大等待時間爲500ms,寫FIFO隊列的最大等待時間爲5s。FIFO隊列內的IO請求優先級要比CFQ隊列中的高,,而讀FIFO隊列的優先級又比寫FIFO隊列的優先級高。優先級可以表示如下:
FIFO(Read) > FIFO(Write) > CFQ
查看命令:
cat /sys/block/sda/queue/scheduler
epoll文件描述符上限 fs.epoll.max_user_watches 27054714 270547140 echo /proc/sys/fs/epoll/max_user_watches 單個用戶使用epoll進行watch的文件描述符上限。 note(dirlt):對於服務器應該特別有用,可以限制內存使用量 查看命令:
sysctl -a |grep epoll
設置openfile ulimit -a |grep 'open files' 1024 65535或更大 即時生效:
ulimit -n 65535
永久生效:
在/ect/security/limits.conf中添加
* - nofile 65535
* - nproc 65535 
打開文件描述上限太小,會出現打不開文件的問題  
系統交換分區 swap 開啓 關閉 swapoff -a 如果進程內存不足,系統會將內存中的部分數據暫時寫入磁盤,當需要時再將磁盤上的數據動態換置到內存中,這樣會降低進程執行效率 重新掛載swap分區:
swapon -a

2.hdfs的參數

數據塊的副本數 dfs.replication 3 2 頁面修改 減少副本塊可以節約存儲空間  
SequenceFile I/O 緩存區大小  io.file.buffer.size   131072(可以更大) core-site.xml 的羣集範圍高級配置代碼段(安全閥) hadoop訪問文件的IO操作都需要通過代碼庫,在很多情況下io.file.buffer.size都被用來設置緩存的大小。不論是對硬盤或者是網絡操作來講,較大的緩存都可以提供更高的數據傳輸,但這也就意味着更大的內存消耗和延遲。這個參數要設置爲系統頁面大小的倍數,以byte爲單位。  
.Trash目錄下文件被永久刪除前保留的時間 fs.trash.interval   1440(24小時) core-site.xml 的羣集範圍高級配置代碼段(安全閥)    
垃圾回收的檢查間隔 fs.trash.checkpoint.interval   1440 core-site.xml 的羣集範圍高級配置代碼段(安全閥)    
是否啓動Hadoop的本地庫 io.native.lib.available   true core-site.xml 的羣集範圍高級配置代碼段(安全閥) 本地庫可以加快基本操作,例如IO,壓縮等。  
NameNode 處理程序計數 dfs.namenode.handler.count 40 400 頁面修改 設定 namenode server threads 的數量,這些 threads 會用 RPC 跟其他的 datanodes 溝通。當 datanodes 數量太多時會發現很容易出現 RPC timeout,解決方法是提升網絡速度或提高這個值,但要注意的是 thread 數量多也表示 namenode 消耗的內存也隨着增加。 擴展性相關參數
NameNode 服務處理程序計數 dfs.namenode.service.handler.count   400 頁面修改    
NameNode的java堆棧大小 NameNode Java heap size   90G 頁面修改    
DataNode的java堆棧大小 DataNode maximum Java heap size   16G 頁面修改    
DataNode 處理程序計數 dfs.datanode.handler.count 3 50      
提前讀取的字節數 dfs.datanode.readahead.bytes 4M 64M 頁面修改 讀取塊文件時,DataNode 可以使用 posix_fadvise 系統呼叫將數據顯式放入操作系統緩衝區緩存中當前讀取器位置之前。這樣可以提高性能,尤其是在磁盤高度佔用的情況下。該配置指定 DataNode 嘗試提前讀取的位置比當前讀取位置提前的字節數。  
ipc服務監聽隊列長度 ipc.server.listen.queue.size 1024 與系統參數net.core.somaxconn保持一致 core-site.xml 的羣集範圍高級配置代碼段(安全閥) 增大打開文件數據和網絡連接上限,提高hadoop集羣讀寫速度和網絡帶寬使用率  

3.yarn的參數

日誌聚合保留期 yarn.log-aggregation.retain-seconds 7 2 頁面修改 刪除聚合日誌前要保留它們多久  
Mapreduce 提交複製 mapreduce.client.submit.file.replication 10 1 頁面修改 mapreduce任務數據的副本數,默認是10,比普通HDFS文件的默認幅本數大很多,可能也是考慮到把輸入數據放到更多的DN上,儘可能實現本地數據計算,但會增大數據量,更改爲1個副本  
MapReduce產生的中間數據存放目錄 mapred.local.dir   /data/cache1/dfs/mapred/local,/data/cache2/dfs/mapred/local,/data/cache3/dfs/mapred/local,/data/cache4/dfs/mapred/local 頁面修改    
Map 任務 Java 選項庫 mapreduce.map.java.opts   -Xmx1024M 頁面修改 jvm啓動時的參數,只對java,scala程序有效(相比mapreduce.map.memory.mb要小一點是因爲java程序佔用內存較少  
Map 任務內存 mapreduce.map.memory.mb   1.5G 頁面修改 map任務申請的內存  
Reduce 任務 Java 選項庫 mapreduce.reduce.java.opts   -Xmx2560M 頁面修改 同map  
Reduce 任務內存 mapreduce.reduce.memory.mb   3G 頁面修改 同map  
I/O 排序因子 mapreduce.task.io.sort.factor 10 100 頁面修改 排序文件時要合併的流的數量。也就是說,在 reducer 端合併排序期間要使用的排序頭數量。此設置決定打開文件句柄數。並行合併更多文件可減少合併排序迭代次數並通過消除磁盤 I/O 提高運行時間。注意:並行合併更多文件會使用更多的內存。如 'io.sort.factor' 設置太高或最大 JVM 堆棧設置太低,會產生過多地垃圾回收。Hadoop 默認值爲 10,建議使用更高值。  
I/O 排序內存緩衝 (MiB) mapreduce.task.io.sort.mb   512M 頁面修改 當排序文件時要使用的內存緩衝總量。注意:此內存由 JVM 堆棧大小產生(也就是:總用戶 JVM 堆棧 - 這些內存 = 總用戶可用堆棧空間)。注意:Cloudera 的默認值不同於 Hadoop 的默認值;默認情況下,Cloudera 使用更大的緩衝,因爲現代機器通常有更多的 RAM。  
洗牌期間並行傳輸的默認數量 mapreduce.reduce.shuffle.parallelcopies 10 50 頁面修改 複製(洗牌)階段期間 reduce 運行的並行傳輸的默認數量。此數量應在(節點數 * 每節點 map 時隙數)的平方根與節點數 * 每節點 map 時隙數/2 之間  
JobHistory Server 的 Java 堆棧大小(字節)     10G 頁面修改    
ResourceManager 的 Java 堆棧大小(字節)     10G 頁面修改    
容器內存 yarn.nodemanager.resource.memory-mb   20G 頁面修改 每個節點分配給yarn跑任務的內存  
容器虛擬 CPU 內核 yarn.nodemanager.resource.cpu-vcores   12 頁面修改 每個節點分配給yarn跑任務的cpu  
root隊列的所有子隊列 yarn.scheduler.capacity.root.queues   default 容量調度程序配置高級配置代碼段(安全閥) 目前只配置了default,同時跑的任務多了可以配置不同隊列,每個隊列佔用的的資源可以在這裏調控  
隊列的資源容量佔比(百分比)。 yarn.scheduler.capacity.root.capacity   100 容量調度程序配置高級配置代碼段(安全閥) 系統繁忙時,每個隊列都應該得到設置的量的資源;當系統空閒時,該隊列的資源則可以被其他的隊列使用。同一層的所有隊列加起來必須是100%。 參考http://www.360doc.com/content/14/0117/15/834950_345972005.shtml,配置集羣同時運行的任務數量
  yarn.nodemanager.aux-services   mapreduce_shuffle yarn-site.xml 的 YARN 服務高級配置代碼段(安全閥) 跑mapreduce的必要參數  
  yarn.nodemanager.aux-services.mapreduce_shuffle.class   org.apache.hadoop.mapred.ShuffleHandler yarn-site.xml 的 YARN 服務高級配置代碼段(安全閥) 跑mapreduce的必要參數  
  yarn.log-aggregation.retain-check-interval-seconds   86400 yarn-site.xml 的 YARN 服務高級配置代碼段(安全閥) 多長時間檢查一次日誌,並將滿足條件的刪除(yarn程序的日誌可以保存到hdfs,設置存儲期限)  
  yarn.nodemanager.remote-app-log-dir   /data/logs/hadoop-yarn/apps yarn-site.xml 的 YARN 服務高級配置代碼段(安全閥) yarn執行程序的日誌存放目錄  
JobTracker可以啓動的線程數 mapreduce.jobtracker.handler.count 10 100 頁面修改 JobTracker可以啓動的線程數 暫時不考慮增大,任務增多的時候需要調整此參數
壓縮 Map 輸出  mapreduce.map.output.compress FALSE TRUE 頁面修改 如已啓用,將在將 map 輸出發送到網絡前對其進行壓縮。將是生成的客戶端配置的一部分。  
MapReduce Map 輸出的壓縮編碼解碼器 mapreduce.map.output.compress.codec org.apache.hadoop.io.compress.DefaultCodec org.apache.hadoop.io.compress.SnappyCodec 頁面修改 採用snappy壓縮  
默認啓動的reduce數 mapreduce.job.reduces 10 0.95 or 1.75 multiplied by (<no. of nodes> * <no. of maximum containers per node>)
本次測試使用25
頁面修改 提升reduce併發度 reduce數量最好自己設置
單個shuffle可以佔用Java 堆棧的百分比上限 mapreduce.reduce.shuffle.memory.limit.percent 0.25 0.45 yarn-site.xml 的 YARN 服務高級配置代碼段(安全閥) 每個fetch取到的輸出的大小能夠佔的內存比的大小  
觸發merge的內存百分比 mapreduce.reduce.shuffle.merge.percent 0.66 0.9 yarn-site.xml 的 YARN 服務高級配置代碼段(安全閥) 在shuffle階段期間用於觸發merge的Java堆棧百分比  
傳輸的並行線程數 mapreduce.tasktracker.http.threads 40 100 yarn-site.xml 的 YARN 服務高級配置代碼段(安全閥) map和reduce是通過http進行數據傳輸的,這個是設置傳輸的並行線程數  
JobTracker MetaInfo Maxsize  mapreduce.job.split.metainfo.maxsize 10000000 -1 頁面修改 分割 metainfo 文件的大小上限。JobTracker 將不會嘗試讀取大於已配置值的分割 metainfo 文件。 大量小文件時有效
最大shuffle連接  mapreduce.shuffle.max.connections 0 暫不調整 頁面修改    
客戶端線程計數 yarn.resourcemanager.client.thread-count 50 100 頁面修改 用於處理應用程序管理請求的線程數量。 優先級低
擴展性相關參數
調度程序線程計數 yarn.resourcemanager.scheduler.client.thread-count 50 100 頁面修改 用於通過調度器接口處理請求的線程數量。 優先級低
擴展性相關參數
管理客戶端線程計數  yarn.resourcemanager.admin.client.thread-count 1 10 頁面修改 用於處理 ResourceManager 管理接口的線程數量。 優先級低
擴展性相關參數
容器管理器線程計數  yarn.nodemanager.container-manager.thread-count 20 建議調整爲(no. of maximum containers per node)的整數倍
本次調整爲50
頁面修改 容器管理器使用的線程數,主要用於AM與NM通信。 優先級低
清理線程計數 yarn.nodemanager.delete.thread-count 4 16 頁面修改 用於清理臨時結果的線程數。 優先級低

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章