Hadoop學習筆記之lzo檔案格式
阿新 • • 發佈:2019-01-09
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/
執行結果:成功