这篇文章给大家分享的是有关hadoop系统参数如何优化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
创新互联是一家专业提供吴忠企业网站建设,专注与成都网站设计、成都网站制作、html5、小程序制作等业务。10年已为吴忠众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
hadoop系统参数优化
为了提高其数据性能,很多人开始优化Hadoop。总结看来,对于Hadoop,当前主要有几个优化思路:
(1) 从应用程序角度进行优化。由于mapreduce是迭代逐行解析数据文件的,怎样在迭代的情况下,编写高效率的应用程序,是一种优化思路。
(2) 对Hadoop参数进行调优。当前hadoop系统有190多个配置参数,怎样调整这些参数,使hadoop作业运行尽可能的快,也是一种优化思路。
(3) 从系统实现角度进行优化。这种优化难度是最大的,它是从hadoop实现机制角度,发现当前Hadoop设计和实现上的缺点,然后进行源码级地修改。该方法虽难度大,但往往效果明显
3.2.1 Linux文件系统参数调整
(1) noatime 和 nodiratime属性
文件挂载时设置这两个属性可以明显提高性能。。默认情况下,Linux ext2/ext3 文件系统在文件被访问、创建、修改时会记录下文件的时间戳,比如:文件创建时间、最近一次修改时间和最近一次访问时间。如果系统运行时要访问大量文件,关 闭这些操作,可提升文件系统的性能。Linux 提供了 noatime 这个参数来禁止记录最近一次访问时间戳。
(2) readahead buffer
调整linux文件系统中预读缓冲区地大小,可以明显提高顺序读文件的性能。默认buffer大小为256 sectors,可以增大为1024或者2408 sectors(注意,并不是越大越好)。可使用blockdev命令进行调整。
Command:
察看: blockdev --report
变更: blockdev --setra 1024 /dev/sda
(3) 避免RAID和LVM操作
避免在TaskTracker和DataNode的机器上执行RAID和LVM操作,这通常会降低性能。
3.2.2 Hadoop通用参数调整
(1) dfs.namenode.handler.count或mapred.job.tracker.handler.count(hdfs-default)
namenode或者jobtracker中用于处理RPC的线程数,默认是10,较大集群,可调大些,比如64。
(2) dfs.datanode.handler.count(hdfs-default)
datanode上用于处理RPC的线程数。默认为3,较大集群,可适当调大些,比如8。需要注意的是,每添加一个线程,需要的内存增加。
(3) mapreduce.tasktracker.http.threads (mapred-default)
HTTP server上的线程数。运行在每个TaskTracker上,用于处理map task输出。大集群,可以将其设为40~50。
3.2.3 HDFS相关配置
(1) dfs.replication(hdfs-default)
文件副本数,通常设为3,不推荐修改。
(2) dfs.block.size(hdfs-default)
HDFS中数据block大小,默认为64M,对于较大集群,可设为128MB或者256MB。(也可以通过参数mapred.min.split.size配置)
(3) mapred.local.dir(mapred-default)和dfs.data.dir(hdfs-default)
这两个参数mapred.local.dir和dfs.data.dir 配置的值应当是分布在各个磁盘上目录,这样可以充分利用节点的IO读写能力。运行 Linux sysstat包下的iostat -dx 5命令可以让每个磁盘都显示它的利用率。
3.2.4 map/reduce 相关配置
(1) {map/reduce}.tasks.maximum(mapred-default)
同时运行在TaskTracker上的最大map/reduce task数,一般设为(core_per_node)/2~2*(cores_per_node)。
(2) io.sort.factor(mapred-default)
当一个map task执行完之后,本地磁盘上(mapred.local.dir)有若干个spill文件,map task最后做的一件事就是执行merge sort,把这些spill文件合成一个文件(partition)。执行merge sort的时候,每次同时打开多少个spill文件由该参数决定。打开的文件越多,不一定merge sort就越快,所以要根据数据情况适当的调整。
(3) mapred.child.java.opts(mapred-default)
设置JVM堆的最大可用内存,需从应用程序角度进行配置。
3.2.5 map task相关配置
(1) io.sort.mb(mapred-default)
Map task的输出结果和元数据在内存中所占的buffer总大小。默认为100M,对于大集群,可设为200M。当buffer达到一定阈值,会启动一个后台线程来对buffer的内容进行排序,然后写入本地磁盘(一个spill文件)。
(2) io.sort.spill.percent(mapred-default)
这个值就是上述buffer的阈值,默认是0.8,即80%,当buffer中的数据达到这个阈值,后台线程会起来对buffer中已有的数据进行排序,然后写入磁盘。
(3) io.sort.record.percent (mapred-default)
Io.sort.mb中分配给元数据的内存百分比,默认是0.05。这个需要根据应用程序进行调整。
(4) mapred.compress.map.output/ Mapred.output.compress(mapred-default)
中间结果和最终结果是否要进行压缩,如果是,指定压缩方式(Mapred.compress.map.output.codec/ Mapred.output.compress.codec)。推荐使用LZO压缩。Intel内部测试表明,相比未压缩,使用LZO压缩的 TeraSort作业运行时间减少60%,且明显快于Zlib压缩。
3.2.6 reduce task相关配置
(1) Mapred.reduce.parallel
Reduce shuffle阶段copier线程数。默认是5,对于较大集群,可调整为16~25。
这种基于参数的调优比较“静态”,因为一套参数配置只对于一类作业是最优的。通过对这些参数的研究,可以寻找参数配置与不同作业特征之间的关联。
感谢各位的阅读!关于“hadoop系统参数如何优化”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!