Hadoop 参数配置优化
Hadoop参数配置优化
- 运行环境方面的考虑
- 硬件选择原则
- 主节点可靠性要好于从节点:主节点在Hadoop架构中起着关键作用,若主节点出现故障,整个集群的运行会受到严重影响,所以要确保主节点具有较高的可靠性,比如使用质量可靠、性能稳定的硬件设备等。
- 多路多核,高频率cpu、大内存:例如NameNode节点中100万文件的元数据要消耗800M内存,内存决定了集群保存文件数的总量,ResourceManager同时运行的作业也会消耗一定的内存。所以充足的内存对于集群性能很重要,同时多核高频的CPU有助于提高数据处理速度。
- 根据数据量确定集群规模:如果一天增加10GB数据,365天则增加3650GB,原数据1TB,replacation = 3,1.5个mapreduce计算完保存的数据,在规划容量时还要考虑作业可能集中在某时间段的情况,要预留资源,避免资源不足影响性能。
- 不要让网路I/O成为瓶颈:Hadoop作业通常是I/O密集型而非计算密集型,网络I/O往往是瓶颈所在。虽然计算能力可通过增加新节点线性扩展,但要重视网络设备处理能力,如合理配置网络带宽等。
- 硬件选择原则
- 操作系统调优相关参数
- 避免使用swap分区:将hadoop守护进程的数据交换到硬盘(swap分区)的行为可能会导致操作超时,影响Hadoop的正常运行。
- 调整socker监听backlog上限相关参数:该参数默认为128,socker的服务器会一次性处理backlog中的所有请求,hadoop的ipc.server.listen.queue.size参数和linux的net.core.somaxconn参数与这个相关,需要合理配置。
- 增大文件描述符上限:对内核来说,所有打开的文件都通过文件描述符引用(是一个非负整数),hadoop的作业经常读写大量文件,所以需要增大同时打开文件描述符的上限。
- 选择合适的文件系统并禁用文件访问时间:可选择ext4或xfs等文件系统,并且对于HDFS来说,文件访问时间(获取某个文件的某个块被修改过)没有意义,可以禁用,以提高性能。
- 关闭THP(透明大页):THP是一个使管理Huge Pages自动化的抽象层,它会引起cpu占用率增大,需要关闭(可通过echo never /sys/kernel/mm/redhat_transparent_hugepage/defrag来关闭)。
- 部分重要的Hadoop参数配置优化示例
- hadoop.tmp.dir:如果服务器是多磁盘的,每个磁盘都设置一个临时文件目录,这样便于mapreduce或者hdfs等使用的时候提高磁盘IO效率。并且不要使用默认的/tmp下,建议设置到一个足够空间的地方。
- fs.trash.interval:默认值为0,这个参数是开启hdfs文件删除自动转移到垃圾箱的选项,值为垃圾箱文件清除时间。一般建议开启这个功能,以防错误删除重要文件,单位是分钟。
- io.sort.factor:默认值为10,排序文件的时候一次同时最多可并流的个数,可根据实际情况设置,例如设置为100。
- io.sort.mb:默认值为100,是排序内存使用限制,可以根据需要调整,如设置为200m。
- io.file.buffer.size:默认值为4096,SequenceFiles在读写中可以使用的缓存大小,可根据需求设置为131072(这里示例),在新版本里变为了file.stream - buffer - size,单位bytes。
- dfs.blocksize:默认值为67108864(64M),这个是hdfs里一个文件块的大小,设置过大则会有较少map同时计算,过小则浪费可用map个数资源,而且文件太小namenode就浪费内存多,可根据需要设置为134217728(128M示例)。
- mapred.child.java.opts:默认值为 - Xmx200m,是jvms启动的子线程可以使用的最大内存,可根据实际情况修改,如改为 - Xmx1024m,并且内存允许的话可以继续增加。
- mapreduce.jobtracker.handler.count:一般为tasktracker节点的4%,用于确定JobTracker可以启动的线程数。
- mapreduce.reduce.shuffle.parallelcopies:默认值为5,可根据实际情况调整,这个参数影响map和reduce通过http进行数据传输的并行线程数。
- mapreduce.map.output.compress:默认值为false,配合mapreduce.map.output.compress.codec使用,默认是org.apache.hadoop.io.compress.DefaultCodec,可以根据需要设定数据压缩方式,开启压缩有助于减少数据传输量提高性能。
- mapreduce.reduce.shuffle.merge.percent:默认值为0.66,是reduce归并接收map的输出数据可占用的内存配置百分比,类似mapreduce.reduce.shuffle.input.buffer.percen属性,可根据实际需求调整。
- mapreduce.reduce.shuffle.memory.limit.percent:默认值为0.25,是一个单一的shuffle的最大内存使用限制,可根据具体情况进行优化调整。
本篇文章所含信息均从网络公开资源搜集整理,旨在为读者提供参考。尽管我们在编辑过程中力求信息的准确性和完整性,但无法对所有内容的时效性、真实性及全面性做出绝对保证。读者在阅读和使用这些信息时,应自行评估其适用性,并承担可能由此产生的风险。本网站/作者不对因信息使用不当或误解而造成的任何损失或损害承担责任。
