一、安装lzo
1、下载与集群版本相对应的parcel包
parcels下载
我CDH版本是5.11.0,所以下载如下三个文件
[root@hadoop002 lzo]# ll
total 2440
-rw-r--r-- 1 root root 2476671 Jan 12 10:24 GPLEXTRAS-5.11.0-1.cdh5.11.0.p0.30-el6.parcel
-rw-r--r-- 1 root root 41 Jan 12 10:23 GPLEXTRAS-5.11.0-1.cdh5.11.0.p0.30-el6.parcel.sha
-rw-r--r-- 1 root root 14104 Jan 12 10:24 manifest.json
2、将下载的三个文件移动到以下目录
/var/www/html/lzo
http://ip/lzo浏览一下看是否有文件
3、进入CM界面–>主机—>Parcel
单机击配置
添加lzo所在的地址
依次点击分配、激活。最终效果图
二、修改lzo的配置
1、修改hdfs配置,在io.compression.codecs配置中添加以下两属性
com.hadoop.compression.lzo.LzopCodec
com.hadoop.compression.lzo.LzoCodec
如图
2、修改yarn配置,在mapreduce.application.classpath配置中。添加以下属性
/opt/cloudera/parcels/GPLEXTRAS/lib/*
此目录在机器上验证一下,是否存在。如果不存在。那么步骤一lzo安装就是有问题的
3、修改yarn配置,在mapreduce.admin.user.env配置中。添加以下属性
/opt/cloudera/parcels/GPLEXTRAS/lib/hadoop/lib/native
4、回到CM主界面,刚才修改的地方都需要使其生效(重要),点击如图按钮使其生效
三、测试压缩
1、创建测试文件,并使用lzop命令压缩,然后上传到hdfs上
[root@hadoop02 ~]# cat lzo.txt
1, AAA
2, BBB
3, CCC
4, DDD
5, EEE
[root@hadoop02 ~]# lzop lzo.txt
[root@hadoop02 ~]# ls
lzo.txt lzo.txt.lzo
[root@hadoop02 ~]# cat lzo.txt.lzo
▒LZO
0 @▒▒Xs
lzo.txtD▒▒##v▒▒1, AAA
2, BBB
3, CCC
4, DDD
5, EEE
[hdfs@hadoop02 ~]$ hadoop fs -put lzo.txt.lzo /user/hive/
[hdfs@hadoop02 ~]$ hadoop fs -ls /user/hive
Found 2 items
-rw-r--r-- 3 hdfs hive 96 2017-01-09 11:32 /user/hive/lzo.txt.lzo
drwxrwxrwt - hive hive 0 2017-01-03 11:20 /user/hive/warehouse
2、创建hive表并指定/user/hive/
create external table lzo(id int,name string)
row format delimited fields terminated by ','
STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
location '/user/hive'
如果此处报lzo格式找不到,那么很有可能你刚才的配置没有生效。
3、查看
hive> select * from lzo;
OK
1 AAA
2 BBB
3 CCC
4 DDD
5 EEE
Time taken: 0.283 seconds, Fetched: 5 row(s)
4、如果是需要在session中通过insert向hive LZO表插入数据,需要在insert之前添加以下两条设置命令
SET hive.exec.compress.output=true;
SET mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec;