LZO(LZO是Lempel-Ziv-Oberhumer的缩写)是一种高压缩比和解压速度极快的编码,它的特点是解压缩速度非常快,无损压缩,压缩后的数据能准确还原,lzo是基于block分块的,允许数据被分解成chunk,能够被并行的解压
一、下载、安装、编译lzo
下载
[root@namenode local]#wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
解压
[root@namenode local]#tar -zxvf lzo-2.06.tar.gz
进入目录
[root@namenode local]#cd lzo-2.06
在lzo目录下执行
[root@namenode lzo-2.06]#export CFLAGS=-m64
[root@namenode lzo-2.06]#./configure -enable-shared -prefix=/usr/local/hadoop-2.9.1/lzo/
[root@namenode lzo-2.06]#make && sudo make install
以上命令正确执行后会在/usr/local/hadoop-2.9.1/lzo/目录下生成一些文件
这里要注意的是:把这个目录压缩,并同步到其他子节点到对应位置
[root@namenode hadoop-2.9.1]#tar zcvf lzo.tar.gz lzo/
为了接下来的编译方便,需要安装几个插件
[root@namenode ~]#yum -y install lzo-devel zlib-devel gcc autoconf automake libtool
二、修改Hadoop配置
进入配置文件目录
[root@namenode hadoop-2.9.1]# cd etc/hadoop/
编辑 hadoop-env.sh 文件
vim hadoop-env.sh
export LD_LIBRARY_PATH=/usr/local/hadoop-2.9.1/lzo/lib
编辑 core-site.xml 文件
vim core-site.xml
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec,
org.apache.hadoop.io.compress.BZip2Codec
</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
编辑 mapred-site.xml 文件
vim mapred-site.xml
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
<property>
<name>mapred.map.output.compression.codec</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
<property>
<name>mapred.child.env</name>
<value>LD_LIBRARY_PATH=/usr/local/hadoop-2.9.1/lzo/lib</value>
</property>
这一步要注意的是:这三个修改后的文件同样要同步到其他子节点相应到位置
到这里我就急着开始测试了,测试方法是使用hive建表,结果…
其实原因是还缺少重要一步没有做
三、安装、编译hadoop-lzo-master
下载hadoop-lzo
[root@namenode ~]#wget https://github.com/twitter/hadoop-lzo/archive/master.zip
解压文件
[root@namenode ~]#unzip master.zip
进入目录
[root@namenode ~]# cd hadoop-lzo-master/
编辑pom.xml中的hadoop版本号跟集群中使用的版本号一致
<hadoop.current.version>2.9.1</hadoop.current.version>
由于这是一个maven项目,所以需要让linux支持mvn命令
[root@namenode local]# wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
解压
[root@namenode local]# tar -zxvf apache-maven-3.5.4-bin.tar.gz
修改环境变量 /etc/profile
MAVEN_HOME=/usr/local/apache-maven-3.5.4
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
然后使其生效
[root@namenode hadoop-lzo-master]]#source /etc/profile
接下来执行一连串命令
[root@namenode hadoop-lzo-master]# export CFLAGS=-m64
[root@namenode hadoop-lzo-master]# export CXXFLAGS=-m64
[root@namenode hadoop-lzo-master]# export C_INCLUDE_PATH=/usr/local/hadoop-2.9.1/lzo/include
[root@namenode hadoop-lzo-master]# export LIBRARY_PATH=/usr/local/hadoop-2.9.1/lzo/lib
[root@namenode hadoop-lzo-master]# mvn clean package -Dmaven.test.skip=true
mvn操作比较耗时,23分钟
然后继续执行一堆命令
[root@namenode hadoop-lzo-master]# cd target/native/Linux-amd64-64/
[root@namenode Linux-amd64-64]# tar -cBf - -C lib . | tar -xBvf - -C ~
上面的命令执行完毕后,会在用户主目录~下生成几个文件
然后到~目录下,把这几个文件复制到hadoop/lib/native目录下
[root@namenode ~]# cp ~/libgplcompression* $HADOOP_HOME/lib/native/
同时复制package生成到jar包到指定目录
[root@namenode hadoop-lzo-master]# cp target/hadoop-lzo-0.4.21-SNAPSHOT.jar $HADOOP_HOME/share/hadoop/common/
这一步要注意的是,以上两个cp复制的操作的文件同时要同步到其他子节点到相应位置
四、检测是否配置成功
1、hive方法
create table lzo(id int,name string)
STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
执行结果:成功
2、job日志方法
执行一个wordcount
hadoop jar /usr/local/hadoop-2.9.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar wordcount /input/1.txt /output/
执行结果:成功