设为首页 加入收藏

TOP

hadoop性能优化(二)
2019-05-07 12:33:38 】 浏览:40
Tags:hadoop 性能 优化

hadoop性能优化具体来讲包括两方面的内容:一个是时间性能;一个是空间性能。衡量性能的指标就是,能够在正确完成功能的基础上,使执行的时间尽量短,占用的空间尽量小。

1、解决小文件的问题,采用大文件

如果实验数据包含1000个文件,在HDFS中共占用了1000个文件块,而每一个文件的大小都是2.3MB,相对于HDFS块的默认大小是128MB(hadoop2.0时代)来说算是比较小的了。如果MapReduce在处理数据时,Map阶段输入的文件较小而数量众多,就会产生很多的Map任务,以1000个文件为例,则一个产生了1000个Map任务,每次新的Map任务操作都会造成一定的性能损失。针对上述2.2GB大小的数据,在实验环境中运行的时间大概是30分钟。

为了尽量使用大文件的数据,对这1000个文件进行预处理,也就是将这些数量众多的小文件合并成大一些的文件,最终将它们合并成了一个大小为2.2GB的大文件。然后再以这个大文件作为输入,在同样的环境中进行测试,运行的时间大概为4分钟。

2.压缩文件

在分布式系统中,不同节点的数据交换是影响整体性能的一个重要因素。另外在Hadoop的Map阶段所处理的输出大小也会影响整个MapReduce程序的执行时间。这是因为Map阶段的输出首先存储在一定大小的内存缓冲区中,如果Map输出的大小超出一定限度,Map task就会将结果写入磁盘,等Map任务结束后再将它们复制到Reduce任务的节点上。如果数据量大,中间的数据交换会占用很多的时间。

一个提高性能的方法是对Map的输出进行压缩。这样会带来以下几个方面的好处:减少存储文件的空间;加快数据在网络上(不同节点间)的传输速度,以及减少数据在内存和磁盘之间交换的时间。可以通过将mapred.compress,map.output属性设置为true来对Map的输出数据进行压缩,同时还可以设置Map输出数据的压缩格式,通过设置mapred.map.output.compression.codec属性即可进行压缩格式的设置。

3.过滤数据

数据过滤主要指在面对海量输入数据作业时,在作业执行之前先将数据中无用数据、噪声数据和异常数据清除。通过数据过滤可以降低数据处理的规模,较大程度的提高数据处理效率,同时避免异常数据或不规范数据对最终结果造成的负面影响。

4.修改作业属性

属性mapred.tasktracker.map.tasks.maximum的默认值是2,属性mapred.tasktracker.map.tasks.maximum的默认值也是2,因此每个节点上实际处于运行状态的Map和Reduce的任务数最多为2,而较为理想的数值应在10~100之间。因此,可以在conf目录下修改属性mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum的取值,将它们设置为一个较大的值,使得每个节点上同时运行的Map和Reduce任务数增加,从而缩短运行的是时间,提高整体的性能。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇hadoop 部署后测试 运行wordcount 下一篇HBase安装部署

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目