hadoop-lzo 安裝配置
在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配置完成