Hadoop 的性能调优从哪些方面着手
一、硬件方面
二、操作系统参数调优
三、jvm 层面
四、hadoop 层面性能调优
一、硬件方面(网络,多磁盘,多机架)---系统集成人员来做
机架分开,节点均匀放置
二、操作系统参数调优
a)多个网卡:多网卡绑定,做负载均衡或者主备
b)磁盘:多个磁盘挂载到不同目录下,存放数据做计算的磁盘不要做 raid
c)增大同时打开的文件数目的上线
d)关闭 swap 分区,避免内存与磁盘交换数据(内存不足)
e)设置合理的预读取缓冲区大小(磁盘 I/O 是瓶颈,CPU 和 内存配置一般较高)
f)文件系统的选择与配置 :Linux 有很多文件系统,比如 ext3 和 ext4,不同文件系统性
能有差异。ext4 性能可靠性更好
g)I/O 调度器选择:CFQ (Completely Fair Scheduler(完全公平调度器))(cfq)、Noop
调度器(noop)、截止时间调度器(deadline)
三、jvm 层面
https://www.cnblogs.com/edwardlauxh/archive/2010/04/25/1918603.html
b)使用最新稳定版 jdk
c)gc 算法 选择
d) 如何监控 jvm
jstat -gcutil 12122 1000
jvisualvm+jstatd
四、hadoop 层面性能调优
1、守护进行内存调优
a)NameNode 和 DataNode 内存调整在 hadoop-env.sh 文件中 NameNode:
export HADOOP_NAMENODE_OPTS="-Xmx512m -Xms512m
-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender}
$HADOOP_NAMENODE_OPTS" DataNode : export
HADOOP_DATANODE_OPTS="-Xmx256m -Xms256m
-Dhadoop.security.logger=ERROR,RFAS $HADOOP_DATANODE_OPTS" -Xmx -Xms 这两个
参数一般保持一致,以避免每次垃圾回收完成后 JVM 重新分配内存
b)REsourceManager 和 NodeManager 内存调整在 yarn-env.sh 文件中 REsourceManager
export YARN_RESOURCEMANAGER_HEAPSIZE=1000 默 认 export
YARN_RESOURCEMANAGER_OPTS="..........."可以覆盖上面的值 NodeManager: 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 文件中配置
mapreduce.map.output.compress true
mapreduce.map.output.compress.codec
org.apache.hadoop.io.compress.SnappyCodec 程 序 运 行 时 指 定 参 数 hadoop jar
/home/hadoop/tv/tv.jar MediaIndex -Dmapreduce.compress.map.output=true
-Dmapreduce.map.output.compression.codec=org.apache.hadoop.io.compress.SnappyCod
ec /tvdata /media
b)使用合理的压缩算法(cpu 和磁盘)
cpu:如果是 cpu 的瓶颈,可以更换速度快的压缩算法 磁盘:如果是磁盘的瓶颈,可以更换压缩力度大的压缩算法 一般情况我们使用
snappy 压缩,比较均衡
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
设 置 map 和 reduce 单 个 任 务 内 存 大 小 : mapreduce.map.memory.mb 1G 默 认
mapreduce.reduce.memory.mb 1G 默认
欢迎来撩 : 汇总all