hadoop 集羣性能優化 hadoop 層面性能調優: node
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
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
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
好比 聲明一個對象 Text word = new Text(); map(),reduce()方法裏面重用
設置 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 默認
機架分開,節點均勻放置
操做系統層面性能調優:
多個網卡:多網卡綁定,作負載均衡或者主備
磁盤:多個磁盤掛載到不一樣目錄下,存放數據作計算的磁盤不要作 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 個月