关闭

Hadoop使用lzo格式-问题汇总

7711人阅读 评论(0) 收藏 举报
分类:

需要注意的是,lzo本身是不支持split的。故如果需要使用lzo,一般有2种办法:

1)合理控制生成的lzo大小,建议不要超过一个block大小。因为如果没有lzo的index文件,该lzo会由一个map处理。如果lzo过大,会导致某个map处理时间过长。

2)配合lzo.index文件使用。好处是文件大小不受限制,可以将文件设置的稍微大点,这样有利于减少文件数目。坏处是生成lzo.index文件本身需要开销。


1、给lzo文件建立索引


Hadoop-lzo包本身提供了建立lzo索引的类,可以在本地运行程序建立索引,也可以运行mapreduce程序建立索引。

本地运行程序建立索引,比较慢

1
2
3
4
$HADOOP_HOMOE/bin/hadoop jar \
$HADOOP_HOMOE/share/hadoop/mapreduce/lib/hadoop-lzo-0.4.20-SNAPSHOT.jar \
com.hadoop.compression.lzo.LzoIndexer \
/hdfs/path/to/file.lzo

运行mapreduce程序建立索引,比较快,

1
2
3
4
$HADOOP_HOMOE/bin/hadoop jar \
$HADOOP_HOMOE/share/hadoop/mapreduce/lib/hadoop-lzo-0.4.20-SNAPSHOT.jar \
com.hadoop.compression.lzo.DistributedLzoIndexer \
/hdfs/path/to/file.lzo

从类名DistributedLzoIndexer可以看出是通过mapreduce分布式程序来建立索引的。

两个程序运行成功之后,都会在hdfs目录/hdfs/path/to/下生成一个索引文件file.lzo.index。

2、 在mapreduce程序中使用lzo压缩

把inputformat设置成LzoTextInputFormat,

1
job.setInputFormatClass(LzoTextInputFormat.class);

注意,对于建立了索引的lzo文件,如果不把inputformat设置为LzoTextInputFormat,会把索引文件也当做是输入文件。

另外,编译的时候需要引入hadoop-lzo-0.4.20-SNAPSHOT.jar包。如果是用maven编译,在pom文件中把这个依赖加上

1
2
3
4
5
<dependency>
        <groupId>com.hadoop.gplcompression</groupId>
        <artifactId>hadoop-lzo</artifactId>
        <version>0.4.20</version>
</dependency>

3、在streaming程序中使用lzo压缩

把inputformat设置为DeprecatedLzoTextInputFormat,还要设置参数 stream.map.input.ignoreKey=true,如

1
2
3
4
5
6
7
8
$HADOOP_HOME/bin/hadoop jar \
$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar \
-D stream.map.input.ignoreKey=true \
-inputformat com.hadoop.mapred.DeprecatedLzoTextInputFormat \
-input /path/to/input \
-output /path/to/output \
-mapper cat \
-reducer wc

如果不加上stream.map.input.ignoreKey=true参数,会把map的key值(key值是行在文件中的偏移量,value值是每行的文本)也会传入mapper程序中,这个key值我们是不需要的。

4 在hive中使用lzo压缩

同样在建表的时候需要指定inputformat为DeprecatedLzoTextInputFormat,outputformat为 HiveIgnoreKeyTextOutputFormat(这个是Hive默认的,可以不用指定),如

1
2
3
4
5
create table lzo_test(
    int,
    s string)
    STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
    OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';


0

1
0
查看评论

Hadoop2.2.0+hive使用LZO压缩那些事

废话不多说,我在apache Hadoop2.2.0测试集群上配置支持使用LZO进行压缩的时候,遇到很多坑,不过最后到搞定了,这里把具体过程记录下来,以供参考。 环境: Centos6.4 64位 Hadoop2.2.0 Sun JDK1.7.0_45 hive-0.12.0 准备工作:...
  • zhangzhaokun
  • zhangzhaokun
  • 2013-12-27 00:02
  • 10856

mapreduce 读写Lzo

1.读lzo文件 需要添加以下代码,并导入lzo相关的jar包 job.setInputFormatClass(LzoTextInputFormat.class); 2.写lzo文件 lzo格式默认是不支持splitable的,需要为其添加索引文件,才能支持多个map并行对lzo文件...
  • xiewenbo
  • xiewenbo
  • 2014-03-19 16:50
  • 912

hadoop中使用lzo的压缩

在hadoop中使用lzo的压缩算法可以减小数据的大小和数据的磁盘读写时间,不仅如此,lzo是基于block分块的,这样他就允许数据被分解成chunk,并行的被hadoop处理。这样的特点,就可以让lzo在hadoop上成为一种非常好用的压缩格式。 lzo本身不是splitable的,所以当数据为...
  • xiaolang85
  • xiaolang85
  • 2013-03-08 11:03
  • 8459

Hadoop-Streaming 高级参数

理解以下选项-files <comma separated list of files> specify comma separated files to be copied to the map reduce cluster:缓存文件到HDFS-libjars <comma...
  • xuxiuning
  • xuxiuning
  • 2016-04-09 14:20
  • 505

hadoop streamig 运行c/c++程序 少读一个字符

Hadoop支持其他语言编程,可使用Streaming的通用API。
  • dinghuican
  • dinghuican
  • 2014-04-29 11:05
  • 356

spark取得lzo压缩文件报错 java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec

恩,这个问题,反正是我从来没有注意的问题,但今天还是写出来吧配置信息hadoop core-site.xml配置<property> <name>io.compression.codecs</name> <value>org.ap...
  • stark_summer
  • stark_summer
  • 2015-09-11 17:59
  • 33538

对TextFile格式文件的lzo压缩建立index索引

hadoop中可以对文件进行压缩,可以采用gzip、lzo、snappy等压缩算法。 对于lzo压缩,常用的有LzoCodec和lzopCodec,可以对sequenceFile和TextFile进行压缩,但是有一点,对TextFile压缩后,mapred对压缩后的文件默认是不能够进行split操...
  • yangbutao
  • yangbutao
  • 2013-01-19 14:00
  • 5619

使用hive 对lzo数据分析时的报错

之前建立map作业 将文本文件通过combineInputFormat 合并 小文件并压缩为lzo文件 ,作业设置: conf.setInt("mapred.min.split.size", 1);      ...
  • wf1982
  • wf1982
  • 2014-03-03 18:07
  • 8283

spark开发笔记-scala 读lzo文件两种写法

spark开发笔记-scala 读写lzo文件两种写法 方法一: val files = sc.newAPIHadoopFile("s3n:/// 方法二: val files = sc.newAPIHadoopFile[LongWritable, Text, LzoTextInput...
  • yanshu2012
  • yanshu2012
  • 2017-01-06 17:08
  • 2171

hadoop streaming python 处理 lzo 文件遇到的问题

1, 代码中需要注意的有: [python] view plain copy  print? #!/usr/bin/env python   #coding:utf8  ...
  • u010700335
  • u010700335
  • 2017-04-06 20:28
  • 474
    个人资料
    • 访问:1559472次
    • 积分:13224
    • 等级:
    • 排名:第1197名
    • 原创:148篇
    • 转载:367篇
    • 译文:0篇
    • 评论:89条
    博客专栏
    文章分类
    最新评论