[TOC]
一、hadoop checknative
首先檢查下 hadoop 是否已經(jīng)集成 snappy:
hadoop checknative -a
Native library checking:
hadoop: true /home/bigdata/hadoop/lib/native/libhadoop.so.1.0.0
zlib: true /lib/x86_64-linux-gnu/libz.so.1
snappy: false
zstd : false
lz4: true revision:10301
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
二叶眉、所需組件
- Snappy 1.1.3: https://pan.baidu.com/s/1aT-voN7TM6kUeZIVIa5p_w&shfl=sharepset 提取碼:ly76
- protobuf-2.5.0: https://pan.baidu.com/s/1pJlZubT
三、安裝依賴包
sudo apt-get install gcc g++ libtool cmake maven zlib1g.dev autoconf automake gzip unzip
# 后續(xù)編譯出錯:CMAKE Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)季研,添加如下依賴
sudo apt-get install --reinstall pkg-config cmake-data
# 編譯繼續(xù)出錯:CMake not able to find OpenSSL library富腊,添加如下依賴
sudo apt-get install libssl-dev
四腺占、安裝 Snappy
解壓下載的 sanppy 安裝包
tar -xvf snappy-1.1.3.tar.gz
cd snappy-1.1.3
./configure
make
sudo make install
默認(rèn)目錄是 /usr/local/lib琉朽,查看snappy是否安裝成功
ll /usr/local/lib | grep snappy
出現(xiàn)下面5個文件毒租,安裝成功
libsnappy.a
libsnappy.la*
libsnappy.so -> libsnappy.so.1.3.0*
libsnappy.so.1 -> libsnappy.so.1.3.0*
libsnappy.so.1.3.0*
五、安裝 protobuf
tar -xvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure --prefix=/home/bigdata/protobuf
make && make install
編譯成功后加入環(huán)境變量并生效:
export PATH= /home/bigdata/protobuf/bin:$PATH
最后箱叁,protoc --version命令墅垮,如顯示libprotoc 2.5.0 則安裝成功。
六耕漱、hadoop-src-2.9.2 編譯源碼
Hadoop2.x 以后版本在 hadoop-common 模塊已經(jīng)內(nèi)置 snappy 編解碼算色,所以編譯安裝 hadoop-snappy 是多余的(Hadoop1.x 需要),只要安裝 snappy 本地庫和重新編譯 hadoop native 庫螟够。
由于下載hadoop-2.9.2.tar.gz中不包含源碼文件灾梦,所以需要使用 hadoop-src-2.9.2包來編譯源碼;
官網(wǎng)下載后解壓:
tar -xvf hadoop-2.9.2-src.tar.gz
編譯過程中妓笙,會出現(xiàn)java堆棧溢出情況斥废,因此執(zhí)行下述命令擴(kuò)大內(nèi)存:
export MAVEN_OPTS="-Xms256m -Xmx512m"
然后編譯:
mvn package -DskipTests -Pdist,native -Dtar -Dsnappy.lib=/usr/local/lib -Dbundle.snappy
時間會很長,如果安裝了第三步中的依賴给郊,應(yīng)該沒有問題,如果還有報錯捧灰,一般也是缺少相應(yīng)依賴淆九,相應(yīng)安裝解決即可。
編譯成功后可以看到:
ll /home/bigdata/hadoop-2.9.2-src/hadoop-dist/target/hadoop-2.9.2/lib/native
有如下文件:
libhadoop.a libhadooputils.a libsnappy.a libsnappy.so.1.3.0
libhadooppipes.a libhdfs.a libsnappy.la
libhadoop.so libhdfs.so libsnappy.so
libhadoop.so.1.0.0 libhdfs.so.0.0.0 libsnappy.so.1
七毛俏、hadoop 添加 snappy
拷貝庫文件到 hadoop炭庙,同步到集群:
cp -r /home/bigdata/hadoop-2.9.2-src/hadoop-dist/target/hadoop-2.9.2/lib/native/* $HADOOP_HOME/lib/native/
scp -r $HADOOP_HOME/lib/native/* bigdata@intellif-bigdata-node1:/$HADOOP_HOME/lib/native/
scp -r $HADOOP_HOME/lib/native/* bigdata@intellif-bigdata-node2:/$HADOOP_HOME/lib/native/
scp -r $HADOOP_HOME/lib/native/* bigdata@intellif-bigdata-node3:/$HADOOP_HOME/lib/native/
$HADOOP_/HOME/etc/hadoop/hadoop-env.sh 添加如下環(huán)境變量:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native/
修改 $HADOOP_HOME/etc/hadoop/core-site.xml配置文件,在文件中加入:
<property>
<name>io.compression.codecs</name>
<value>
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.BZip2Codec,
org.apache.hadoop.io.compress.SnappyCodec
</value>
</property>
修改 $HADOOP_HOME/etc/hadoop/mapred-site.xml
<property>
<name>mapred.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapred.output.compression.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
<property>
<name>mapred.map.output.compression.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
同步修改配置到所有集群煌寇。
重新啟動 hdfs焕蹄,再次檢查:
hadoop checknative -a
Native library checking:
hadoop: true /home/bigdata/hadoop/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
**snappy: true /home/bigdata/hadoop/lib/native/libsnappy.so.1**
zstd : false
lz4: true revision:10301
bzip2: false
八、hbase 添加 snappy
在 hbase 每個節(jié)點(diǎn)中創(chuàng)建目錄
mkdir -p $HBASE_HOME/lib/native/Linux-amd64-64
每個節(jié)點(diǎn)拷貝庫文件到 Hbase
cp -r $HADOOP_HOME/lib/native/* $HBASE_HOME/lib/native/Linux-amd64-64/
每個節(jié)點(diǎn) $HBASE_HOME/conf/hbase-env.sh 添加如下環(huán)境變量:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/bigdata/hadoop/lib/native/:/usr/local/lib/
export HBASE_LIBRARY_PATH=$HBASE_LIBRARY_PATH:$HBASE_HOME/lib/native/Linux-amd64-64/:/usr/local/lib/
每個節(jié)點(diǎn) $HBASE_HOME/conf/hbase-site.xml 添加:
<property>
<name>hbase.regionserver.codecs</name>
<value>snappy</value>
</property>
然后重啟 hbase阀溶。
創(chuàng)建表驗(yàn)證一下:
create 'tsnappy', { NAME => 'f', COMPRESSION => 'snappy'}
describe 'tsnappy'
put 'tsnappy', 'row1', 'f:col1', 'value'
scan 'tsnappy'