歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 在hadoop2.X集群中安裝壓縮工具snappy(主要用於hbase)

在hadoop2.X集群中安裝壓縮工具snappy(主要用於hbase)

日期:2017/3/1 11:41:02   编辑:關於Linux

在hadoop2.X集群中安裝壓縮工具snappy(主要用於hbase),在hadoop集群中snappy是一種比較好的壓縮工具,相對gzip壓縮速度和解壓速度有很大的優勢,而且相對節省cpu資源,但壓縮率不及gzip。在此不討論孰優孰劣,各有各的用途。
在hadoop2.X中最好使用源碼編譯生成snappy的so文件,如果使用其它已編譯好的so文件,可能會報出not support錯誤,以下便是hadoop2.X編譯生成snappy的so文件的步驟:
在此,hadoop集群采用的版本是hadoop-2.6.0-cdh5.9.0,系統是centos7.2。

安裝前提:

java 7(使用java 8會報一個錯誤)

java安裝並配置PATH

# rpm -ivh jdk-7uXXX-linux-x64.rpm       #XXX為版本號
# cat /etc/profile
#.......................
export JAVA_HOME=/usr/java/default       
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH:$JRE_HOME/lib

若安裝多個版本的jdk,請將上述的/usr/java/default軟鏈接至java7的目錄
驗證安裝

# source /etc/profile
# java -version
java version "1.7.0_XXX"
Java(TM) SE Runtime Environment (build 1.7.X_XXX-XXX)
Java HotSpot(TM) 64-Bit Server VM (build XXX.XXX-XXX, mixed mode)

yum安裝部分基礎軟件

yum -y install gcc gcc-c++ libtool cmake maven zlib-devel

解壓安裝基礎包

下載如下壓縮包:
hadoop-2.6.0-cdh5.9.0-src.tar.gz(下載地址:http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.9.0-src.tar.gz,也可下載二進制包,內包含src源碼:hadoop-2.6.0-cdh5.9.0-tar.gz)
snappy1.1.1.tar.gz(下載地址:http://pkgs.fedoraproject.org/repo/pkgs/snappy/snappy-1.1.1.tar.gz/8887e3b7253b22a31f5486bca3cbc1c2/snappy-1.1.1.tar.gz)
protobuf-2.5.0.tar.gz(下載地址:https://github.com/google/protobuf/releases/tag/v2.5.0 建議選擇2.5.0版本,不支持最新版本)

安裝snappy

# tar xf snappy-1.1.1.tar.gz
# cd snappy-1.1.1
# ./configure
# make && make install

查看snappy是否安裝完成

# ll /usr/local/lib/ | grep snappy

安裝protobuf

# tar xf protobuf-2.5.0.tar.gz
# cd protobuf-2.5.0
# ./configure
# make && make install

驗證安裝

# protoc --version
libprotoc 2.5.0

編譯生成hadoop-native-Libraries(包括snappy)

# tar xf hadoop-2.6.0-cdh5.9.0-src.tar.gz
# cd hadoop-2.6.0-cdh5.9.0
# mvn package -DskipTests -Pdist,native -Dtar -Dsnappy.lib=/usr/local/lib -Dbundle.snappy

如上通過mvn安裝,不過通過此安裝方法會從官方下載相關所需文件,時間漫長,我大概花了20小時左右,目前由於對mvn工具不是很熟悉,嘗試多種方法均未提升下載速度(包括修改下載源,也許修改方式有誤,報錯找不到相關包)
編譯成功後,snappy的so文件會生成在如下目錄:

hadoop-2.6.0-cdh5.9.0/hadoop-dist/target/hadoop-2.6.0-cdh5.9.0/lib/native

將此目錄下的文件拷貝到hadoop集群中的hadoop和hbase的lib/native目錄下,各節點均需拷貝。
修改配置文件:

$ cat core-site.xml

        io.compression.codecs
        org.apache.hadoop.io.compress.SnappyCodec

重啟hadoop和hbase。

測試是否安裝成功

$ hadoop checknative -a
hadoop:  true ...../hadoop-2.6.0-cdh5.9.0/lib/native/libhadoop.so
zlib:    true /usr/local/lib/libz.so.1
snappy:  true ...../hadoop-2.6.0-cdh5.9.0/lib/native/libsnappy.so.1
lz4:     true revision:10301
bzip2:   false 
openssl: true /lib64/libcrypto.so
$ hbase org.apache.hadoop.hbase.util.CompressionTest /tmp/crq snappy
....................................................
SUCCESS
$ hbase org.apache.hadoop.hbase.util.CompressionTest hdfs://hostname/tmp/crq snappy
....................................................
SUCCESS

上述的hostname一般要改為namenode的hostname。
此時,若修改hbase中表壓縮為snappy,會將此表進入RIT狀態,並無法自動恢復,原因在於,hbase(版本1.2)默認關閉壓縮狀態(關於此,官方文檔有所介紹),須在配置文件中開啟:

$ cat hbase-site.xml

        hbase.block.data.cachecompressed
        true
    

重啟hbase。

在hbase中使用snappy

建表時加入snappy

$ echo "create 'snappyTest',{NAME=>'f',COMPRESSION => 'SNAPPY'} " | hbase shell

修改表壓縮工具

$ echo "disable 'snappyTest2'" | hbase shell    #禁用表
$ echo "desc 'snappyTest2'" | hbase shell    #查看表結構
$ echo "alter 'snappyTest2',{NAME=>'f',COMPRESSION => 'SNAPPY'} " | hbase shell        #壓縮修改為snappy
$ echo "enable 'snappyTest2'" | hbase shell    #使用該表
$ echo "major_compact 'snappyTest2'" | hbase shell     #最好使該表的region compact一次

如上hadoop集群的snappy算是基本安裝ok。

結語

通過今天的簡單測試壓縮率能達到25%左右,雖然不及gzip等壓縮工具,但由於其考慮了cpu資源利用率和壓縮,解壓數據,這個壓縮率還是令人滿意的,至少我挺滿足了。

Copyright © Linux教程網 All Rights Reserved