1. 程式人生 > 其它 >Hbase支援snappy壓縮格式

Hbase支援snappy壓縮格式

說明

本篇文章整個操作都是在root賬號下進行,所有操作步驟完成後,可以根據實際的需求,更改目錄許可權。
整個操作的目的有兩個:

  • 安裝snappy包,安裝完成後所在路徑是/usr/local/lib/
  • 安裝hadoop依賴的snappy包,安裝完成後所在路徑是 $HADOOP_HOME/lib/native

然後將上面兩個拷貝分發到所有節點,其中第2個在安裝hadoop時會拷貝,通常第一個分發拷貝操作可能會遺忘。

1. 安裝編譯環境

1.1 安裝C++編譯器

yum install -y automake autoconf gcc-c++ libedit libtool openssl-devel ncurses-devel

1.2 安裝cmake

注意版本需要大於3
檢視cmake的版本,如果是2.8.12.2,則需要解除安裝掉,單獨安裝。

cmake --version

解除安裝cmake

yum remove cmake -y

重新安裝cmake3.9版本

wget https://cmake.org/files/v3.9/cmake-3.9.2.tar.gz
tar zxvf cmake-3.9.2.tar.gz
cd cmake-3.9.2
./configure
make & make install

1.3 安裝protobuf-2.5.0

版本必須是該版本

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

安裝完成後,退出重新登入。

1.4 安裝maven

yum install wget -y
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
tar xvf apache-maven-3.5.4-bin.tar.gz

修改環境變數/etc/profile

export MAVEN_HOME=/opt/local/maven
export PATH=$PATH:$MAVEN_HOME/bin

修改setting檔案倉庫位置:

<localRepository>/opt/local/maven/repo</localRepository>

修改映象伺服器地址:

    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>

2. 安裝snappy

2.1 安裝snappy

wget https://src.fedoraproject.org/repo/pkgs/snappy/snappy-1.1.3.tar.gz/7358c82f133dc77798e4c2062a749b73/snappy-1.1.3.tar.gz
tar xvf snappy-1.1.3.tar.gz
cd snappy-1.1.3
./configure
make
make install
#解除安裝命令 make uninstall

注意:安裝完成後,在/usr/local/lib/目錄下生成對應的snappy檔案

/usr/local/lib 目錄下所有檔案拷貝到 其他節點相同目錄下。

2.2 編譯hadoop-snappy(未做似乎不影響)

wget下載,或者直接從git地址https://github.com/electrum/hadoop-snappy 手工選擇download ZIP包。

wget https://github.com/electrum/hadoop-snappy/archive/refs/heads/master.zip

解壓縮,編譯

yum install unzip
unzip master.zip
cd hadoop-snappy-master
mvn package

一定要先安裝好snappy,然後檢查在/usr/local/lib/目錄下有對應的snappy檔案,否則該步驟無法打包成功。

編譯成功後,在target資料夾下面如下:

3. hadoop

hadoop編譯的目的是為了獲取到編譯完成後的lib庫,編譯完成的lib庫儲存在路徑

/opt/local/hadoop-3.1.3-src/hadoop-dist/target/hadoop-3.1.3/lib/native

然後將lib庫拷貝到對應版本已安裝的節點上。
拷貝後,需要重啟節點。

3.1 編譯hadoop

wget http://archive.apache.org/dist/hadoop/core/hadoop-3.1.3/hadoop-3.1.3-src.tar.gz
tar -zxvf hadoop-3.1.3-src.tar.gz
cd hadoop-3.1.3-src

hadoop-3.1.3-src目錄裡新建檔案compile.sh,填寫以下內容,並修改許可權755。

vim compile.sh
export MAVEN_OPTS="-Xms256m -Xmx512m"
mvn clean package -Pdist,native -DskipTests -Dtar -rf :hadoop-common -Drequire.snappy -X

這種編譯是將snappy包直接編譯到一起,編譯過程大於20分鐘左右。

chmod 755 compile.sh
./compile.sh

編譯成功如下:

網上還有一段增加其他依賴的編譯命令如下,可以自行嘗試。

#!/bin/bash
mvn package -Pdist,native,nexus -DskipTests=true -Dmaven.javadoc.skip=true -Dtar -Dcontainer-executor.conf.dir=/etc/hadoop/ -Drequire.snappy -Dbundle.snappy -Dsnappy.lib=/opt/develop/snappy/lib -Dsnappy.prefix=/opt/develop/snappy -Drequire.openssl -Dbundle.openssl -Dopenssl.lib=/opt/develop/openssl/lib -Dopenssl.prefix=/opt/develop/openssl -Drequire.bzip2=true -Dzstd.prefix=/opt/develop/zstd -Dzstd.lib=/opt/develop/zstd/lib -Dbundle.zstd -Drequire.zstd -Disal.prefix=/opt/develop/isal -Drequire.isal=true -Dbundle.isal -Disal.lib=/opt/develop/isal/lib

3.2 修改hadoop配置檔案

3.2.1 修改core-site.xml

<!-- 用於壓縮/解壓的CompressionCodec列表,多種演算法使用逗號分隔的類名  -->
<property> 
    <name>io.compression.codecs</name> 
    <value>org.apache.hadoop.io.compress.SnappyCodec</value> 
</property>

3.2.2 修改yarn-site.xml

<!-- 壓縮MapReduce作業的輸出 -->
<property>
    <name>mapreduce.map.output.compress</name>
    <value>true</value>
</property>
<!-- 指定壓縮演算法的類名 -->
<property>
    <name>mapred.map.output.compress.codec</name>
    <value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>

4. 拷貝檔案

4.1 分發snappy檔案

如果2.1沒做拷貝,就將/usr/local/lib 目錄下所有檔案拷貝到 其他節點相同目錄下

 scp -r /usr/local/lib/*  hadoop100:/usr/local/lib/

4.2 分發hadoop lib庫

將hadoop目錄中lib/native資料夾複製拷貝到 /opt/local/hbase/lib/目錄下,需要所有節點都拷貝。

scp -r $HADOOP_HOME/lib/native hadoop100:/opt/local/hbase/lib/

5. 修改hbase配置

修改hbase-env.sh,在末尾新增以下配置:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/:/usr/local/lib/
export HBASE_LIBRARY_PATH=$HBASE_LIBRARY_PATH:$HBASE_HOME/lib/native/:/usr/local/lib/
export CLASSPATH=$CLASSPATH:$HBASE_LIBRARY_PATH

修改完,在所有節點同步該檔案。

6. Hbase測試

create 'test2',{NAME=>'f1',COMPRESSION => 'gz'}
create 'test3',{NAME=>'f1',COMPRESSION => 'SNAPPY'}