hadoop性能優化

hadoop 集羣性能優化 hadoop 層面性能調優: node

hadoop 層面性能調優

1. 守護進行內存調優 

a)NameNode 和 DataNode 內存調整在 hadoop-env.sh 文件中 算法

 

NameNode: ExportHADOOP_NAMENODE_OPTS="-Xmx512m-Xms512m -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS" apache

 

DataNode: 性能優化

export HADOOP_DATANODE_OPTS="-Xmx256m -Xms256m -Dhadoop.security.logger=ERROR,RFAS $HADOOP_DATANODE_OPTS" app

 

-Xmx -Xms 這兩個參數通常保持一致,以免每次垃圾回收完成後 JVM 從新分配內存。
負載均衡

b)REsourceManager 和 NodeManager 內存調整在 yarn-env.sh 文件中 oop

 

REsourceManager: 性能

export YARN_RESOURCEMANAGER_HEAPSIZE=1000 默認 export YARN_RESOURCEMANAGER_OPTS="..........."能夠覆蓋上面的值 優化

 

NodeManager: spa

export YARN_NODEMANAGER_HEAPSIZE=1000 默認export YARN_NODEMANAGER_OPTS="";能夠覆蓋上面的值 

 

常駐內存經驗配置: 

namenode:16G 

datanode:2-4G 

ResourceManager:4G
NodeManager:2G 

Zookeeper:4G 

Hive Server:2G 

2. mr中間目錄要配置多個,分散IO 壓力

http://hadoop.apache.org/docs/r2.6.0/ 


配置文件yarn-default.xml 分散 IO 壓力 

yarn.nodemanager.local-dirs 

yarn.nodemanager.log-dirs 


配置文件 mapred-default.xml: 

mapreduce.cluster.local.dir 


配置文件 hdfs-default.xml:提升可靠性 

dfs.namenode.name.dir
dfs.namenode.edits.dir 

dfs.datanode.data.dir 

3. mr中間結果要壓縮 

a)配置 mapred-site.xml 文件中配置 

<property>

 <name>mapreduce.map.output.compress</name> 

 <value>true</value> 

</property> 

<property> 

<name>mapreduce.map.output.compress.codec</name> 

<value>org.apache.hadoop.io.compress.SnappyCodec</value> 

</property>
程序運行時指定參數 hadoop jar /home/hadoop/tv/tv.jar MediaIndex -Dmapreduce.compress.map.output=true -Dmapreduce.map.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec /tvdata /media 

b)使用合理的壓縮算法(cpu 和磁盤) cpu:若是是 cpu 的瓶頸,能夠更換速度快的壓縮算法 磁盤:若是是磁盤的瓶頸,能夠更換壓縮力度大的壓縮算法 通常狀況咱們使用 snappy 壓縮,比較均衡 lzo 

4. hdfs文件系統中避免,大量小文件存在 


5. 根據具體狀況,在 Map 節點使用 Combiner,減小輸出結果


6. 重用 Writable 類型

好比 聲明一個對象 Text word = new Text(); map(),reduce()方法裏面重用 

7. 根據集羣節點具體狀況,調整 task 的並行度 

設置 map 和 reduce 最大任務個數: 

mapreduce.tasktracker.map.tasks.maximum 

mapreduce.tasktracker.reduce.tasks.maximum 

 

配置文件 mapred-default.xml:

設置 map 和 reduce 單個任務內存大小: 

mapreduce.map.memory.mb 1G 默認 

mapreduce.reduce.memory.mb 1G 默認

8. 要有效的監控手段(使用nmon,條件容許會部署ganglia蒐集各類指標,分析指標發現瓶頸,而後指定措施)

硬件層面性能調優: 

機架分開,節點均勻放置 

操做系統層面性能調優: 

多個網卡:多網卡綁定,作負載均衡或者主備 

磁盤:多個磁盤掛載到不一樣目錄下,存放數據作計算的磁盤不要作 raid 

 

集羣規劃: 

集羣節點內存分配: 

好比一個數據節點,假如 task 並行度爲 8 DataNode(2~4G)+ NodeManager(2G)+Zookeeper(4G)+1G(單個任務默認大小)*8=16G~18G


集羣規模: 假如 天天數據 1T 數據保存一個月,每一個節點硬盤 2T 1T*3(副本)*30(天)=90T=n*2T*(60~70%) n=60 節點左右 企業中數據保留 7 天 15 天比較常見,數據比較重要的話 1 個

相關文章
相關標籤/搜索