1. 程式人生 > >Hadoop學習筆記之lzo檔案格式

Hadoop學習筆記之lzo檔案格式

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/

執行結果:成功
這裡寫圖片描述

五、參考連結