hadoop开发优化总结

1、MapReduce数据压缩:
1)压缩技术能够有效减少底层存储系统(HDFS)读写字节数。压缩提高了网络带宽和磁盘空间的效率。
在Hadood下,尤其是数据规模很大和工作负载密集的情况下,使用数据压缩显得非常重要。
在这种情况下,I/O操作和网络数据传输要花大量的时间。还有,Shuffle与Merge过程同样也面临着巨大的I/O压力。
***压缩mapreduce的一种优化策略:通过压缩编码对mapper或者reducer的输出进行压缩,以减少磁盘IO,提高MR程序运行速度(但相应增加了cpu运算负担)。
注意:压缩特性运用得当能提高性能,但运用不当也可能降低性能。
基本原则:
(1)运算密集型的job,少用压缩
(2)IO密集型的job,多用压缩
2)hadoop默认不支持多种压缩格式,需要重新编译后才可以
MR支持的压缩编码: 1、压缩格式:推荐用Snappy
* DEFAULT : .default(文件不可切分) : org.apache.hadoop.io.compress.DefaultCodec
* Snappy  : .snappy (文件不可切分,用的比较多些) : org.apache.hadoop.io.compress.SnappyCodec
* bzip2   : .bz2 (文件可切分) : org.apache.hadoop.io.compress.BZip2Codec
3)配置方式
* core-default.xml
* mapred-default.xml

2、Combiner局部汇总:
对每一个maptask的输出进行局部汇总,以减小网络传输量

3、DistributedCache缓存
数据倾斜原因: 如果是多张表的操作都是在reduce阶段完成,reduce端的处理压力太大,map节点的运算负载则很低,资源利用率不高,且在reduce阶段极易产生数据倾斜。
(1)在mapper的setup阶段,将文件读取到缓存集合中
(2)在驱动函数中加载缓存。
job.addCacheFile(new URI("file:/e:/mapjoincache/pd.txt"));// 缓存普通文件到task运行节点

猜你喜欢

转载自blog.csdn.net/cyjch/article/details/80345886