Hadoop-2.2.0使用lzo压缩文件作为输入文件
2014-04-22 00:00
387 查看
摘要: Hadoop-2.2.0使用lzo压缩文件作为输入文件
在 《Hadoop 2.2.0安装和配置lzo》 文章中介绍了如何基于 Hadoop 2.2.0安装lzo。里面简单介绍了如果在Hive里面使用lzo数据。今天主要来说说如何在Hadoop 2.2.0中使用lzo压缩文件当作的数据。
lzo压缩默认的是不支持切分的,也就是说,如果直接把lzo文件当作Mapreduce任务的输入,那么Mapreduce只会用一个Map来处理这个输入文件,这显然不是我们想要的。其实我们只需要对lzo文件建立索引,这样这个lzo文件就会支持切分,也就可以用多个Map来处理lzo文件。我们可以用 《Hadoop 2.2.0安装和配置lzo》 文章中编译的hadoop-lzo-0.4.20-SNAPSHOT.jar包来对lzo文件建立索引(假如在/home/wyp/input目录下有个cite.txt.lzo文件,这个目录是在HDFS上):
生成出来的索引文件后缀为.index,并存放在lzo同一目录下.在本例中产生的索引文件是存放在/home/wyp/input目录下,名称为cite.txt.lzo.index。
我们也可以用下面的方法对lzo文件来建立索引:
这个方法和上面方法产生出来的索引文件是一样的;但是上面的方法是通过启用Mapreduce任务来执行的,而这里的方法只在一台客户机上运行,效率很慢!
那么,如何在Mapreduce任务中使用lzo文件。下面分别对Mapreduce程序、Streaming程序以及Hive分别进行说明:
1、对于Mapreduce程序,我们需要把程序中所有的TextInputFormat修改为LzoTextInputFormat,如下:
LzoTextInputFormat类需要引入相应的包,如果你是使用pom文件,可以引入以下依赖:
如果你的输入格式不是LzoTextInputFormat类,那么Mapreduce程序将会把.index文件也当作是数据文件!修改完之后,需要重新编译你的Mapreduc程序。这样在运行Mapreduce程序的时候,将lzo文件所在的目录当作输入即可,Mapreduce程序会识别出.index文件的:
2、对于Streaming程序来说,可以通过-inputformat指定输入的文件格式,使用如下:
对应Streaming作业还需要注意的是,使用DeprecatedLzoTextInputFormat输入格式,会把文本的行号当作key传送到reduce的,所以我们需要将行号去掉,可以用下面方法实现:
3、对于Hive,需要在建表的时候注意,如下:
注意4,5行代码。这样就可以使用lzo文件了,并支持分割。
在 《Hadoop 2.2.0安装和配置lzo》 文章中介绍了如何基于 Hadoop 2.2.0安装lzo。里面简单介绍了如果在Hive里面使用lzo数据。今天主要来说说如何在Hadoop 2.2.0中使用lzo压缩文件当作的数据。
lzo压缩默认的是不支持切分的,也就是说,如果直接把lzo文件当作Mapreduce任务的输入,那么Mapreduce只会用一个Map来处理这个输入文件,这显然不是我们想要的。其实我们只需要对lzo文件建立索引,这样这个lzo文件就会支持切分,也就可以用多个Map来处理lzo文件。我们可以用 《Hadoop 2.2.0安装和配置lzo》 文章中编译的hadoop-lzo-0.4.20-SNAPSHOT.jar包来对lzo文件建立索引(假如在/home/wyp/input目录下有个cite.txt.lzo文件,这个目录是在HDFS上):
1 | $ $HADOOP_HOMOE/bin/hadoop jar |
2 | $HADOOP_HOMOE/share/hadoop/common/hadoop-lzo- 0.4 . 20 -SNAPSHOT.jar |
3 | com.hadoop.compression.lzo.DistributedLzoIndexer |
4 | /home/wyp/input/cite.txt.lzo |
我们也可以用下面的方法对lzo文件来建立索引:
1 | $ $HADOOP_HOMOE/bin/hadoop jar |
2 | $HADOOP_HOMOE/share/hadoop/common/hadoop-lzo- 0.4 . 20 -SNAPSHOT.jar |
3 | com.hadoop.compression.lzo.LzoIndexer |
4 | /home/wyp/input/cite.txt.lzo |
那么,如何在Mapreduce任务中使用lzo文件。下面分别对Mapreduce程序、Streaming程序以及Hive分别进行说明:
1、对于Mapreduce程序,我们需要把程序中所有的TextInputFormat修改为LzoTextInputFormat,如下:
1 | job.setInputFormatClass(TextInputFormat. class ); |
2 |
3 | 修改为 |
4 |
5 | job.setInputFormatClass(LzoTextInputFormat. class ); |
1 | <dependency> |
2 | <groupId>com.hadoop.gplcompression</groupId> |
3 | <artifactId>hadoop-lzo</artifactId> |
4 | <version> 0.4 . 19 </version> |
5 | </dependency> |
1 | $ /home/q/hadoop- 2.2 . 0 /bin/hadoop jar |
2 | statistics2.jarcom.wyp.Sts |
3 | -Dmapreduce.job.queuename=queue1 |
4 | /home/wyp/input |
5 | /home/wyp/resluts |
1 | $ bin/hadoop jar |
2 | $HADOOP_HOMOE/share/hadoop/tools/lib/hadoop-streaming- 2.2 . 0 .jar |
3 | -inputformat com.hadoop.mapred.DeprecatedLzoTextInputFormat |
4 | -input /home/wyp/input |
5 | -output /home/wyp/results |
6 | -mapper /bin/cat |
7 | -reducer wc |
1 | $ bin/hadoop jar |
2 | $HADOOP_HOMOE/share/hadoop/tools/lib/hadoop-streaming- 2.2 . 0 .jar |
3 | -inputformat com.hadoop.mapred.DeprecatedLzoTextInputFormat |
4 | -input /home/wyp/input |
5 | -D stream.map.input.ignoreKey= true |
6 | -output /home/wyp/results |
7 | -mapper /bin/cat |
8 | -reducer wc |
1 | hive> create table lzo( |
2 | > id int , |
3 | > name string) |
4 | > STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' |
5 | > OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' ; |
6 | OK |
7 | Time taken: 3.423 seconds |
相关文章推荐
- hadoop使用lzo压缩文件笔记 (CDH3u1)
- hadoop使用lzo压缩文件笔记 (CDH3u1)
- hadoop使用lzo压缩文件笔记 (cdh3u0)
- hadoop使用lzo压缩文件笔记
- hadoop使用lzo压缩文件笔记 (CDH3u1)
- Hadoop2.2.0+hive使用LZO压缩那些事
- Hadoop2.2.0+hive使用LZO压缩那些事
- 使用DFSClient实现 hadoop上传文件功能,采用使用输入输出流实现 Hadoop 版本2.7.0
- hadoop处理lzo格式的压缩文件报错
- Hadoop使用lzo压缩格式
- Hadoop使用lzo压缩提升I/O性能
- hadoop中使用lzo的压缩
- spark取得lzo压缩文件报错 java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec
- hadoop学习4——使用hadoop压缩(zipping)文件
- [转] - hadoop中使用lzo的压缩
- spark取得lzo压缩文件报错 java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec
- Hadoop streaming mapreduce多文件输入使用方法
- Hadoop中使用压缩文件格式
- 使用DFSClient实现 hadoop上传文件功能,采用使用输入输出流实现 Hadoop 版本2.7.0
- 模板:使用文件作为输入