第六周 第一章 剖析小文件问题与企业级解决方案
MapReduce性能优化
1 | 现在大家已经掌握了MapReduce程序的开发步骤,注意了,针对MapReduce的案例我们并没有讲太多,主要是因为在实际工作中真正需要我们去写MapReduce代码的场景已经是凤毛麟角了,因为后面我们会学习一个大数据框架Hive,Hive支持SQL,这个Hive底层会把SQL转化为MapReduce执行,不需要我们写一行代码,所以说工作中的大部分需求我们都使用SQL去实现了,谁还苦巴巴的来写代码啊,一行SQL能抵你写的几十行代码,你还想去写MapReduce代码吗,肯定不想了。 |
小文件问题
1 | 先一个一个来,不要着急,我们先看小文件问题 |
1 | 针对这个问题,解决办法通常是选择一个容器,将这些小文件组织起来统一存储,HDFS提供了两种类型的容器,分别是SequenceFile和MapFile |
SequenceFile
创建SequenceFile
代码
1 | 下面我们来具体看一下如何生成SequenceFile |
1 | 执行代码中的write方法,可以看到在HDFS上会产生一个/seqFile文件,这个文件就是最终生成的大文件 |
读SquenceFile
1 | 只能通过遍历的方法去读 |
异常
1 | java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration |
1 | [WARN] - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable |
MapFile
1 | 接下来我们来看一下MapFile |
1 | package com.imooc.mc; |
1 | 执行代码中的write方法,可以看到在HDFS上会产生一个/mapFile目录,这个目录里面有两个文件,一个index索引文件,一个data数据文件 |
通过MapReduce读取SequenceFile
1 | 下面我们来看一个案例 |
1 | job.setInputFormatClass(SequenceFileInputFormat.class) |
1 | 创建一个新的类WordCountJobSeq |
1 | package com.imooc.mc; |
1 | 重新编译打包执行 |
1 | [root@bigdata01 hadoop-3.2.0]# hdfs dfs -cat /out10/* |
1 | 此时到yarn的web界面上查看map任务的个数,发现只有1个,说明这样是生效的。 |


异常
1 | 1.在hdfs上创建的seqFile和mapFile都看不见,但IDEA上read方法却正确执行 |
HDFS归档机制





1 | 归档时会执行mapreduce程序 |

1 | 程序是用index里的索引去part-0里找对应文件 |





1 | archieve在mapreduce中的应用 |


1 | 只有map的话,这里显示的是m;有reduce的话显示的是r |

