hadoop linux 打包LZO压缩jar

转载自:https://blog.csdn.net/qq_32641659/article/details/89339471

一、安装lzo

1、安装lzo的linux本地环境相关

#检查是否有lzop命令,我这里显示是有的,说明安装过了lzop
[hadoop@hadoop001 ~]$ which lzop
/usr/bin/lzop

#若没有执行如下安装命令
[root@hadoop001 ~]# yum install -y svn ncurses-devel
[root@hadoop001 ~]# yum install -y gcc gcc-c++ make cmake
[root@hadoop001 ~]# yum install -y openssl openssl-devel svn ncurses-devel zlib-devel libtool
[root@hadoop001 ~]# yum install -y lzo lzo-devel lzop autoconf automake cmake 

2、下载 lzo jar 项目

https://github.com/twitter/hadoop-lzo/archive/master.zip

下载完用zip工具解压成一个目录。

3、进入lzo项目的目录,使用maven打包,直接执行mvn package -DskipTests

4、将编译好后的 hadoop-lzo-0.4.20.jar 放入 hadoop-2.7.2/share/hadoop/common/下,

因为其他lib目录不能确定jar包是否会被hadoop加载,而这个common目录下的jar一定会被加载,所以放在这能确保。

注意:每个节点的linux hadoop都要放这个jar

5、配置core.site.xml

# 停止hadoop
[hadoop@hadoop001 hadoop-lzo-master]$ stop-all.sh 

#编辑core-site.xml添加或修改如下内容
[hadoop@hadoop001 ~]$ vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/core-site.xml 
-----------------------开始-------------------------------
<property>
	<name>io.compression.codecs</name>
    <value>org.apache.hadoop.io.compress.GzipCodec,
		org.apache.hadoop.io.compress.DefaultCodec,
		org.apache.hadoop.io.compress.BZip2Codec,
		org.apache.hadoop.io.compress.SnappyCodec,
		com.hadoop.compression.lzo.LzoCodec,
		com.hadoop.compression.lzo.LzopCodec
    </value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
-----------------------结束-------------------------------
解析:主要是配置com.hadoop.compression.lzo.LzoCodec、com.hadoop.compression.lzo.LzopCodec压缩类
	io.compression.codec.lzo.class必须指定为LzoCodec非LzopCodec,不然压缩后的文件不会支持分片的


6、配置mapred-site.xml

这里主要是开启压缩,并指定默认的压缩格式

#编辑mapred-site.xml添加或修改如下内容
[hadoop@hadoop001 ~]$ vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/mapred-site.xml 
-----------------------开始-------------------------------
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.map.output.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>org.apache.hadoop.io.compress.BZip2Codec</value>
</property>
-----------------------结束-------------------------------

#启动hadoop
[hadoop@hadoop001 ~]$ start-all.sh 

二、hadoop的LZO测试

LZO文件分片测试是在hive中进行的,hive的安装启动就不在这里详细的去写了

1、LZO文件不支持分片

#创建LZO压缩文件测试表,若hadoop的common目录没有hadoop-lzo的jar,就会报类DeprecatedLzoTextInputFormat找不到异常
create table page_views2_lzo(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
) row format delimited fields terminated by '\t'
STORED AS INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"
OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat";

#加载lzo格式的测试数据,注意
LOAD DATA LOCAL INPATH '/home/hadoop/data/click/page_views.dat.lzo' OVERWRITE INTO TABLE page_views2_lzo;

#查看数据
[hadoop@hadoop001 ~]$ hdfs dfs -du -s -h /user/hive/warehouse/wsktest.db/page_views2_lzo/*
211.0 M  211.0 M  /user/hive/warehouse/wsktest.db/page_views2_lzo/page_views.dat.lzo

#查询测试
select count(1) from page_views2_lzo;

控制台日志截取:Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 6.88 sec   HDFS Read: 221259925 HDFS Write: 8 SUCCESS

2、LZO文件支持分片

注意若不是直接load的lzo文件,需要开启压缩,且压缩格式为LzopCodec,load数据并不能改变文件格式和压缩格式。

#开启压缩,生成的压缩文件格式必须为设置为LzopCodec,lzoCode的压缩文件格式后缀为.lzo_deflate是无法创建索引的。
SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec;

#创建LZO压缩文件测试表
create table page_views2_lzo_split
STORED AS INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"
OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"
as select *  from page_views2_lzo;

#查看数据,文件后缀为.lzo
[hadoop@hadoop001 ~]$ hdfs dfs -du -s -h /user/hive/warehouse/wsktest.db/page_views2_lzo_split/*
211.1 M  211.1 M  /user/hive/warehouse/wsktest.db/page_views2_lzo_split/000000_0.lzo

#构建LZO文件索引,使用我们之前打的jar包中的工具类
hadoop jar ~/app/hadoop-2.6.0-cdh5.7.0/share/hadoop/common/hadoop-lzo-0.4.21-SNAPSHOT.jar \
com.hadoop.compression.lzo.LzoIndexer /user/hive/warehouse/wsktest.db/page_views2_lzo_split

#查询hdfs数据目录,可知在lzo文件同级目录有个.index索引文件
[hadoop@hadoop001 ~]$ hdfs dfs -du -s -h /user/hive/warehouse/wsktest.db/page_views2_lzo_split/*
211.1 M  211.1 M  /user/hive/warehouse/wsktest.db/page_views2_lzo_split/000000_0.lzo
15.7 K  15.7 K  /user/hive/warehouse/wsktest.db/page_views2_lzo_split/000000_0.lzo.index

#执行统计分析
select count(1) from page_views2_lzo_split;

控制台日志:Stage-Stage-1: Map: 2  Reduce: 1   Cumulative CPU: 8.66 sec   HDFS Read: 221521265 HDFS Write: 58 SUCCESS
发布了144 篇原创文章 · 获赞 36 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_36951116/article/details/103923344
今日推荐