hadoop 性能調優與運維

hadoop 性能調優與運維java

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

 

硬件選擇node

1) hadoop運行環境 linux

 

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

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

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

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

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

  原則三: 根據數據量肯定集羣規模jvm

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

  (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/userlogs3.按期執行數據均衡腳本
相關文章
相關標籤/搜索