您的位置:首页 > 移动开发

在hadoop2.X集群中安装压缩工具snappy(主要用于hbase)

2017-02-25 00:38 441 查看
在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下的lib/native目录和hbase下的lib/native/Linux-amd64-64目录下,没有则新建,各节点均需拷贝。

修改配置文件:

$ cat core-site.xml
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>


重启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
<property>
<name>hbase.block.data.cachecompressed</name>
<value>true</value>
</property>


重启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资源利用率和压缩,解压数率,这个压缩率还是令人满意的,至少我挺满足了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop hbase 压缩 snappy