hadoop lzo压缩

1.安装:

(1)安装依赖:

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

 

(2)安装maven

wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz
tar -xzvf apache-maven-3.5.3-bin.tar.gz

 

    修改环境变量 vi /etc/profile, 添加下面两句(路径按自己的写)

export MAVEN_HOME=/data/apache-maven-3.5.3
export PATH=$PATH:$MAVEN_HOME/bin
source /etc/profile

 

(3)安装 lzop native library

wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
tar -zxvf lzo-2.06.tar.gz
cd lzo-2.06
export CFLAGS=-m64
./configure -enable-shared -prefix=/usr/local/hadoop/lzo/
make && sudo make install

    编译完lzo包之后,会在/usr/local/hadoop/lzo/生成一些文件,将/usr/local/hadoop/lzo目录下的所有文件打      包,并同步到集群中的所有机器上。

 

(4)安装hadoop-lzo

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

 

    vi修改pom.xml文件,hadoop.current.version改成实际的hadoop版本(我测试用的是2.8.1))

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <hadoop.current.version>2.8.1</hadoop.current.version>
  <hadoop.old.version>1.0.4</hadoop.old.version>
</properties>

 

    执行命令

export ACFLAGS=-m64
export CXXFLAGS=-m64
export C_INCLUDE_PATH=/usr/local/hadoop/lzo/include
export LIBRARY_PATH=/usr/local/hadoop/lzo/lib
mvn clean package -Dmaven.test.skip=true
cd target/native/Linux-amd64-64
tar -cBf - -C lib . | tar -xBvf - -C ~
cp ~/libgplcompression* $HADOOP_HOME/lib/native/

   

    注意target下的包的版本号(这里测试是0.4.21,其他环境版本号会不同)    

cp target/hadoop-lzo-0.4.21-SNAPSHOT.jar $HADOOP_HOME/share/hadoop/common/

 

   执行完tar -cBf – -C lib . | tar -xBvf – -C ~后,会在~目录下生成一下几个文件,其中libgplcompression.so       和libgplcompression.so.0是链接文件,指向libgplcompression.so.0.0.0,将刚刚生成的libgplcompression*     和target/hadoop-lzo-0.4.21-SNAPSHOT.jar同步到集群中的所有机器对应的目录。


 

(5)hadoop中配置lzo

    修改 $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,
           org.apache.hadoop.io.compress.BZip2Codec,
           com.hadoop.compression.lzo.LzopCodec,
           com.hadoop.compression.lzo.LzoCodec
    </value>
</property>    

<!-- lzop -->
<property>
    <name>io.compression.codec.lzo.class</name>
    <value>com.hadoop.compression.lzo.LzopCodec</value>
</property>

 

    修改$HADOOP_HOME/etc/hadoop/mapred-site.xml

<!--设置map中间结果使用 lzop 压缩-->
<property> 
    <name>mapreduce.map.output.compress</name> 
    <value>true</value> 
</property> 

<property>
   <name>mapreduce.map.output.compress.codec</name>
   <value>com.hadoop.compression.lzo.LzopCodec</value>
</property>

<!--设置map/reduce 整个过程使用 lzop 压缩 -->
<property>
    <name>mapreduce.output.fileoutputformat.compress</name>
    <value>true</value>
</property>

<!-- lzop -->
<property>
   <name>mapreduce.output.fileoutputformat.compress.codec</name>
   <value>com.hadoop.compression.lzo.LzopCodec</value>
</property>

<property>
    <name>mapred.child.env</name>
    <value>LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib</value>
</property>

 

(6)lzop 安装

  wget http://www.lzop.org/download/lzop-1.03.tar.gz
  tar -xzvf lzop-1.03.tar.gz
  cd lzop-1.03
  ./configure && make && make install

 

2.准备数据

(1)生成1w条数据保存在uuid.txt文件中

for i in {1..100000};do echo uuid${i} >> uuid.txt ;done

 

(2)生成lzo文件

lzop uuid.txt

 

(3)du -sh * 查看文件大小, lzo文件大约只有文本文件的38%左右大小


 

    上传到hdfs上

hadoop dfs -mkdir /data/
hadoop dfs -put uuid.txt.lzo /data/

 

(4)生成lzo索引(注意jar的版本) 

  • 本地运行程序建立索引(比较慢): com.hadoop.compression.lzo.LzoIndexer
  • mapreduce程序建立索引(比较快): com.hadoop.compression.lzo.DistributedLzoIndexer
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/share/hadoop/common/hadoop-lzo-0.4.21-SNAPSHOT.jar com.hadoop.compression.lzo.DistributedLzoIndexer /data/uuid.txt.lzo

 

(5)hadoop dfs -ls /data/ 查看hdfs目录,索引已生成

 

 

猜你喜欢

转载自coderlxl201209164551.iteye.com/blog/2412892