优化 Linux 上的 Hadoop 是一个系统性工程,通常分为操作系统层、Hadoop 配置层、硬件与架构层、以及运维调优四个方面。下面给你一个相对完整、可落地的优化思路。
mount -o noatime,nodiratime,data=writeback,barrier=0 /dev/sdb /data
deadline 或 mq-deadlinenone 或 noopecho deadline > /sys/block/sda/queue/scheduler
sysctl vm.swappiness=1
ulimit -n 65536
ulimit -u 65536
在 /etc/security/limits.conf 中配置:
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
sysctl -w net.core.somaxconn=4096
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.core.netdev_max_backlog=5000
<property>
<name>dfs.namenode.heapsize</name>
<value>8g</value>
</property>
dfs.namenode.avoid.read.stale.datanodedfs.datanode.handler.count=20
dfs.datanode.data.dir=/data1/dfs,/data2/dfs,/data3/dfs
dfs.blocksize=256m
dfs.replication=3
(冷数据可降为 2)
yarn.nodemanager.resource.memory-mb=64g
yarn.scheduler.maximum-allocation-mb=32g
yarn.scheduler.minimum-allocation-mb=1g
yarn.scheduler.maximum-allocation-mb=16g
mapreduce.map.memory.mb=4g
mapreduce.reduce.memory.mb=8g
mapreduce.task.io.sort.mb=512
mapreduce.job.jvm.numtasks=-1
mapreduce.map.output.compress=true
mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
如果你愿意,可以告诉我:
我可以直接给你一套针对你集群的优化配置模板。