阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop lzo的使用方法

137次阅读
没有评论

共计 2668 个字符,预计需要花费 7 分钟才能阅读完成。

前面的文章介绍了 Hadoop lzo 的安装和配置(见 http://www.linuxidc.com/Linux/2014-05/101090.htm),本文接着介绍 lzo 压缩在 hadoop 应用程序中的使用方法,包括在 mapreduce 程序,streaming 程序和 hive 中的使用。

————————————– 分割线 ————————————–

相关阅读

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

Hadoop LZO 安装教程 http://www.linuxidc.com/Linux/2013-01/78397.htm

Hadoop 集群上使用 Lzo 压缩 http://www.linuxidc.com/Linux/2012-05/60554.htm

————————————– 分割线 ————————————–
 
1 给 lzo 文件建立索引

lzo 文件需要建立索引才能支持分块 (split)。

如果没有索引,lzo 文件也是可以处理的,mapreduce 会根据后缀名“.lzo”来对 lzo 文件解压,并且 inputformat 也不需要特别指定,但是不支持分块,整个 lzo 文件只用一个 map 来处理。
 
hadoop-lzo 包本身提供了建立 lzo 索引的类,可以在本地运行程序建立索引,也可以运行 mapreduce 程序建立索引。

本地运行程序建立索引

$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 程序建立索引

$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,

job.setInputFormatClass(LzoTextInputFormat.class);

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

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

<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,如

$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 默认的,可以不用指定),如

create table lzo_test(

    i int,

    s string)

    STORED AS INPUTFORMAT ‘com.hadoop.mapred.DeprecatedLzoTextInputFormat’

    OUTPUTFORMAT ‘org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat’;

更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计2668字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中