在hive中要想使用lzo的格式,需要配置安装好lzo工具并且在hadoop的core-site.xml与mapred-site.xml中配置相应的配置
一、编译安装lzo与lzop
在集群的每一台主机上都需要编译安装!!!
1.下载编译安装lzo文件
http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
版本可以下载最新的 http://www.oberhumer.com/opensource/lzo/download
编译安装(保证主机上有gcc与g++)
tar -xvzf lzo-2.10.tar.gz cd lzo-2.10 ./configure --enable-shared make -j 10 make install
cp /usr/local/lib/*lzo* /usr/lib
安装完成后需要将 cp部分文件到/usr/lib中,这个步骤不做会抛 lzop: error while loading shared libraries: liblzo2.so.2: cannot open shared object file: No such file or directory
2.下载编译lzop
http://www.lzop.org/download/lzop-1.04.tar.gz
最新版选择 http://www.lzop.org/download/
tar -xvzf lzop-1.04.tar.gz cd lzop-1.04 ./configure make -j 10 make install
二、安装、编译hadoop-lzo-master
需在linux环境中安装,在windows上编译不过
wget https://github.com/twitter/hadoop-lzo/archive/master.zip
解压:
unzip master.zip
cd hadoop-lzo-master/
编辑pom.xml修改hadoop的版本号与你集群中hadoop版本一致
<hadoop.current.version>2.9.3</hadoop.current.version>
检查所在主机是否有maven,如果没有需要安装,如下:
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz tar -zxvf apache-maven-3.5.4-bin.tar.gz vim /etc/profile 添加环境变量: MAVEN_HOME=/usr/local/apache-maven-3.5.4 export MAVEN_HOME export PATH=${PATH}:${MAVEN_HOME}/bin 保存退出profile source /etc/profile
导入hadoop-lzo编译时需要路径信息
export CFLAGS=-m64 export CXXFLAGS=-m64 修改为自己hadoop的实际路径 export C_INCLUDE_PATH=/usr/local/hadoop-2.9.1/lzo/include export LIBRARY_PATH=/usr/local/hadoop-2.9.1/lzo/lib
maven编译安装
mvn clean package -Dmaven.test.skip=true
等待。。。
编译安装没有异常结束后往下继续 PS:如果在mvn这里出现异常,请解决后再继续
编译成功后会有target文件
cd target/native/Linux-amd64-64/ mkdir ~/hadoop-lzo-files tar -cBf - -C lib . | tar -xBvf - -C ~/hadoop-lzo-files
在 ~/hadoop-lzo-files 目录下产生几个文件,执行cp
cp ~/hadoop-lzo-files/libgplcompression* $HADOOP_HOME/lib/native/
注意!!!上面这一步的cp文件也要同步到集群其他主机的hadoop的对应目录下
cp hadoop-lzo的jar包到hadoop目录
cp target/hadoop-lzo-0.4.21-SNAPSHOT.jar $HADOOP_HOME/share/hadoop/common/
注意!!!上面这一步的cp文件也要同步到集群其他主机的hadoop的对应目录下
三、配置hadoop配置文件
在hadoop的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>
注意!!!上面修改的core-xite.xml与mapred-site.xml文件也要同步到集群其他主机的hadoop的对应目录下
最后重启集群!!!
检验是否成功
在hive中创建lzo格式的表
create table lzo-tmp(id int,name string) STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
插入数据,并且可以selete到数据,说明成功,如果没有重启集群或者没有重新开启新的hive的client端的话可能会抛(当在hive中查询时)
Failed with exception java.io.IOException:java.io.IOException: No LZO codec found, cannot run
至此hadoop-lzo配置完成