hadoop 性能調優與運維


hadoop 性能調優與運維

1. 硬件選擇
2. 操作系統調優與jvm調優
3. hadoop參數調優4. hadoop運維

 

硬件選擇

1) hadoop運行環境 

 

2)  原則一: 主節點可靠性要好於從節點

  原則二:多路多核,高頻率cpu、大內存,

    namenode 100萬文件的元數據要消耗800M內存,內存決定了集群保存文件數的總量, resourcemanager同時運行的作業會消耗一定的內存。

  datanode 的內存需要根據cpu的虛擬核數(vcore) 進行配比,CPU的vcore數計算公式為=cpu個數 * 單cpu核數* HT(超線程)

    內存容量大小 = vcore數 * 2GB(至少2GB)

  原則三: 根據數據量確定集群規模

  一天增加10GB, 365天,原數據1TB,replacation=3,   1.3 mapreduce 計算完保存的數據,規划容量

  (1TB + 10GB*365)*3 *1.3 =17.8TB

     如果一台datanode的存儲空間為2TB,  18/2= 9

     總節點為 = 9+2 =11 

    還要考慮作業並不是均勻分布的, 有可能會傾斜到某一個時間段,需要預留資源

 

    原則四: 不要讓網路I/O 成為瓶頸

    hadoop 作業通常是 I/O密集型而非計算密集型, 瓶頸通常集中出現在I/O上, 計算能力可以通過增加新節點進行線性擴展,要注意網絡設別處理能力。

 

 

 

操作系統調優

1  避免使用swap 分區 將hadoop守護進程的數據交換到硬盤的行為可能會導致操作超時。

 

2 調整內存分配策略

操縱系統內核根據vm.oversommit_memory 的值來決定分配策略,並且通過vm.overcommit_ratio的值來設定超過物理內存的比例。

 

3. 修改net.core.somaxconn參數

該參數表示socker監聽backlog的上限,默認為128,socker的服務器會一次性處理backlog中的所有請求,hadoop的ipc.server.listen.queue.size參數和linux的net.core.somaxconn

參數控制了監聽隊列的長度,需要調大。

 

4.增大同時打開文件描述符的上限

對內核來說,所有打開的文件都通過文件描述符引用,文件描述符是一個非負整數,hadoop的作業經常會讀寫大量文件,需要增大同時打開文件描述符的上限。

 

5.選擇合適的文件系統,並禁用文件的訪問時間

  ext4 xfs ,文件訪問時間可以讓用戶知道那些文件近期被查看或修改, 但對hdfs來說, 獲取某個文件的某個塊 被修改過,沒有意義,可以禁用。

 

6. 關閉THP (transparent Huge Pages)

THP 是一個使管理 Huge Pages自動化的抽象層, 它會引起cpu占用率增大, 需要關閉。

 

echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled 
echo never > /sys/kernel/mm/transparent_hugepage/enabled 
echo never > /sys/kernel/mm/transparent_hugepage/defrag

 

hadoop參數調優

HDFS調優
1. 設置合理的塊大小(dfs.block.size)
2. 將中間結果目錄設置為分布在多個硬盤以提升寫入速度(mapred.local.dir)
3. 設置datanode處理RPC的線程數,大集群可以適當加大(dfs.datanode.handler.count),默認為3,可以適當加大為10
4. 設置namenode 能同時處理的請求數,(dfs.namenode.handler.count),為集群模式的自然對數(lnN)的20倍。



YARN調優
yarn的資源表示模型為ceontainer(容器),container 將資源抽象為兩個維度,內存和虛擬cpu(vcore)
1. 兼容各種計算框架
2. 動態分配資源,減少資源浪費

容器內存
yarn.nodemanager.resource.memory-mb

最小容器內存
yarn.scheduler.minimum-allocation-mb

容器內存增量
yarn.scheduler.increment-allocation-mb

最大容器內存
yarn.scheduler.maximum-allocation-mb

容器虛擬cpu內核
yarn.nodemanager.resource.cpu-vcores

最小容器虛擬cpu內核數量
yarn.scheduler.minimum-allocation-vcores

容器虛擬cpu內核增量
yarn.scheduler.increment-allocation-vcores

最大容器虛擬cpu內核數量
yarn.scheduler.maximum-allocation-vcores

MapReduce調優,調優三大原則

1.增大作業並行程度
2.給每個任務足夠的資源
3. 在滿足前2個條件下,盡可能的給shuffle預留資源

 

 

hadoop運維

基礎運維
1. 啟動和體質hadoop (包括hdfs)
./start-all.sh 
./stop-all.sh

2.啟動/停止 hdfs
./start-dfs.sh
./stop-dfs.sh

3.啟動/停止 單個hdfs進程
./hadoop-daemon.sh start namenode
./hadoop-daemon.sh stop namenode

./hadoop-daemon.sh start  datanode
./hadoop-daemon.sh stop  datanode


啟動和關閉 yarn進程
sbin/start-yarn.sh   主 
sbin/yarn-daemon.sh start resourcemanager  第二節點


集群節點動態擴容和卸載
1.增加datanode
修改slave,添加新的datanode
./hadoop-daemon.sh start datanode      啟動datanode
./hadoop dfsadmin -refreshNodes         通知namenode 增加了一個節點

2. 卸載datanode
stop datanode 命令只能停止datanode, 並不能把數據完全的遷移出來

1). 修改配置 dfs.hosts 和 dfs.hosts.exclude,把將要卸載的datanode ip添加到dfs.hosts 和dfs.hosts.exclude 末尾,執行
./hadoop dfsadmin -refresNodes #數據轉移,使用web端口可以查看遷移進度

2). 停止服務器
./hadoop-deamon.sh stop datanode

3). 把dfs.hosts 和 dfs.hosts.exclude 中的 卸載的datanode ip地址刪除

4). 再次執行
./haddop dfsadmin -refresNodes


5).增加 yarn 的nodemanager
修改slave文件, 直接啟動
./yarn-daemon.sh start nodemanager

6).卸載nodemanger
直接停止即可
./yarn-daemon.sh start nodemanager

./hadoop-daemon.sh
 namenode|secondarynamenode|datanode|journalnode|dfs|dfsadmin|fsck|balancer|zkfc)

yarn-daemon.sh
resourcemanager|nodemanager
yarn 第二節點啟動命令
yarn-daemon.sh start resourcemanager
常見的運維技巧
1. 查看日志
2.清理臨時文件
hdfs 的臨時文件路徑:/data/hadoop/tmp/mapred/staging
本地臨時文件路徑: {mapred.local.dir}/mapred/userlogs

3.定期執行數據均衡腳本


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM