Hadoop2.2.0+hive使用LZO压缩那些事

废话不多说,我在apacheHadoop2.2.0测试集群上配置支持使用LZO进行压缩的时候,遇到很多坑,不过最后到搞定了,这里把具体过程记录下来,以供参考。

环境:

Centos6.4 64位

Hadoop2.2.0

Sun JDK1.7.0_45

hive-0.12.0

准备工作:

yum -y install lzo-devel zlib-devel gcc autoconf automake libtool

开始了哦!

(1)安装LZO

wget tar -zxvf lzo-2.06.tar.gz./configure -enable-shared -prefix=/usr/local/hadoop/lzo/make && make test && make install(2)安装LZOPwget tar -zxvf lzop-1.03.tar.gz./configure -enable-shared -prefix=/usr/local/hadoop/lzopmake && make install(3)把lzop复制到/usr/bin/ ln -s /usr/local/hadoop/lzop/bin/lzop /usr/bin/lzop

(4)测试lzop lzop /home/hadoop/data/access_20131219.log

会在生成一个lzo后缀的压缩文件:/home/hadoop/data/access_20131219.log.lzo即表示前述几个步骤正确哦。

(5)安装Hadoop-LZO

当然的还有一个前提,就是配置好maven和svn 或者Git(我使用的是SVN),,这个就不说了,如果这些搞不定,其实也不必要进行下去了!

我这里使用https://github.com/twitter/hadoop-lzo

使用SVN从https://github.com/twitter/hadoop-lzo/trunk下载代码,修改pom.xml文件中的一部分。

从:

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><hadoop.current.version>2.1.0-beta</hadoop.current.version><hadoop.old.version>1.0.4</hadoop.old.version> </properties>修改为:<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><hadoop.current.version>2.2.0</hadoop.current.version><hadoop.old.version>1.0.4</hadoop.old.version> </properties>再依次执行:mvn clean package -Dmaven.test.skip=true tar -cBf – -C target/native/Linux-amd64-64/lib . | tar -xBvf – -C /home/hadoop/hadoop-2.2.0/lib/native/ cp target/hadoop-lzo-0.4.20-SNAPSHOT.jar /home/hadoop/hadoop-2.2.0/share/hadoop/common/接下来就是将/home/hadoop/hadoop-2.2.0/share/hadoop/common/hadoop-lzo-0.4.20-SNAPSHOT.jar以及/home/hadoop/hadoop-2.2.0/lib/native/ 同步到其它所有的hadoop节点。注意,要保证目录/home/hadoop/hadoop-2.2.0/lib/native/ 下的jar包,你运行hadoop的用户都有执行权限。(6)配置Hadoop

在文件$HADOOP_HOME/etc/hadoop/hadoop-env.sh中追加如下内容:

export LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib

在文件$HADOOP_HOME/etc/hadoop/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>

在文件$HADOOP_HOME/etc/hadoop/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/lzo/lib</value> </property> (7)在Hive中体验lzo

A:首先创建nginx_lzo的表

CREATE TABLE logs_app_nginx (ip STRING,user STRING,time STRING,request STRING,status STRING,size STRING,rt STRING,referer STRING,agent STRING,forwarded String)partitioned by (date string,host string)row format delimitedfields terminated by ‘\t’STORED AS INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat" OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat";B:导入数据LOAD DATA Local INPATH ‘/home/hadoop/data/access_20131230_25.log.lzo’ INTO TABLE logs_app_nginx PARTITION(date=20131229,host=25);/home/hadoop/data/access_20131219.log文件的格式如下:

221.207.93.109 – [23/Dec/2013:23:22:38 +0800] "GET /ClientGetResourceDetail.action?id=318880&token=Ocm HTTP/1.1" 200 199 0.008 "xxx.com" "Android4.1.2/LENOVO/Lenovo A706/ch_lenovo/80" "-"直接采用lzop /home/hadoop/data/access_20131219.log即可生成lzo格式压缩文件/home/hadoop/data/access_20131219.log.lzo

顺境的美德是节制,逆境的美德是坚韧,这后一种是较为伟大的德性。

Hadoop2.2.0+hive使用LZO压缩那些事

相关文章:

你感兴趣的文章:

标签云: