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.按期執行數據均衡腳本