Hiveの圧縮ストレージ(Compression Storage)はLZO、Snappyの主流圧縮を含む
Hiveの圧縮ストレージ(Compression Storage) ?
:
Hive tableのデータを圧縮状態で格納することは、ディスク(使用量、IO)の使用表現やquery表現にかかわらず、非圧縮ストレージよりも優れたパフォーマンスを発揮する場合が多い.
Hiveのデフォルトでサポートされている圧縮方式はDeflate、GZIP、BZIP2
で、SequenceFile形式のデフォルトは圧縮ストレージであり、GZIP 2の圧縮ファイルは分割をサポートし、TEXTFILEのテーブルに直接インポートすることができる.-- GZIP Table
CREATE TABLE raw (line STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '
';
LOAD DATA LOCAL INPATH '/tmp/weblogs/20090603-access.log.gz' INTO TABLE raw;
テーブル構造が同じであるため、シーケンス化されたフォーマットでストレージを最適化できます.CREATE TABLE raw (line STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '
';
CREATE TABLE raw_sequence (line STRING)
STORED AS SEQUENCEFILE;
LOAD DATA LOCAL INPATH '/tmp/weblogs/20090603-access.log.gz' INTO TABLE raw;
--
SET hive.exec.compress.output=true;
SET io.seqfile.compression.type=BLOCK; -- NONE/RECORD/BLOCK (see below)
INSERT OVERWRITE TABLE raw_sequence SELECT * FROM raw;
1 LZO圧縮
LZOは主流のデータのゼロ損失の圧縮フォーマットで、 、
1.1 LZO使用前準備
# Hadoop
bin/hadoop checknative
1.1.1 LZO/LCOP取付
LZOとLZOPはHadoopクラスタの各ノードにインストールする必要がある.
1.1.2 core-siteを配置する.xml
<property>
<name>io.compression.codecsname>
<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec
value>
property>
<property>
<name>io.compression.codec.lzo.classname>
<value>com.hadoop.compression.lzo.LzoCodecvalue>
property>
1.1.3 tableの定義
hive -e "
CREATE EXTERNAL TABLE IF NOT EXISTS hive_table_name (
column_1 datatype_1......
column_N datatype_N)
PARTITIONED BY (partition_col_1 datatype_1 ....col_P datatype_P)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS
INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
"
1.1.4 LZOに格納されているテーブルを問い合わせる
SET mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzoCodec;
SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress=true;
SELECT * FROM lzoTableName;
2 Snappy圧縮
三七二十一にかかわらず、まずbin/hadoop checknative -a
で、trueがすでにサポートされている場合はsnappyをサポートしている場合は、追加のインストールは必要ありません.
OS: CentOS 7 Hadoop: 2.7.2 Hive: 1.2.1
Hiveではsnappy圧縮を構成し、`はMapper側の出力フェーズ、reducerの出力フェーズで過圧縮アルゴリズムを使用してもよいし、圧縮後のデータをテーブルにロードしてクエリーに使用してもよい.Hiveは接尾辞名で対応する圧縮フォーマットを自動的に認識し、クエリー時に解凍するが、データファイルとテーブルのフォーマットが一致しなければならない.そうしないと、結果がすべてNULLであることしか表示されない.
2.1 Snappyをダウンロードしてインストールする
まずgithubまたは公式サイトで関連するソースコードをダウンロードします:snappy-1.1.x.tar.gz #
0、yum -y install gcc gcc-c++ autoconf automake libtools
1、 tar -zxvf snappy-1.1.x.tar.gz
2、
./configure
make
make install
3、
ls -lh /usr/local/lib | grep snappy
>libsnappy.a
libsnappy.la
libsnappy.so
libsnappy.so.1
libsnappy.so.1.3.0
2.2 hadoop 2をコンパイルする.Xのソース
hadoop-2.7.x-src.tar.gz
#
yum -y install cmake zlib-devel ant libssl-dev openssl-devel lzo-devel
#
tar -zxvf hadoop-2.7.x-src.tar.gz hadoop-2.7.x-src;
#
cd /hadoop-2.7.x-src
# Hadoop snappy
mvn clean package -Pdist,native -DskipTests -Dtar -Dbundle.snappy -Dsnappy.lib=/usr/local/lib
# jar
cd /hadoop-dist/target
# native hadoop lib
cp native /hadoop-2.7.x/lib
# lib , hadoop
2.3対応するHiveパラメータを配置して圧縮段階及び圧縮方式を設定する
2.3.1 core-site.xml
<property>
<name>io.compression.codecsname>
<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.SnappyCodec
value>
property>
<property>
<name>mapreduce.map.output.compressname>
<value>truevalue>
property>
<property>
<name>mapreduce.map.output.compress.codecname>
<value>org.apache.hadoop.io.compress.SnappyCodecvalue>
property>
2.3.2 Map端子の出力結果圧縮
-- mapred-site.xml
set hive.exec.compress.intermediate=true; --Hive MR
set mapreduce.map.output.compress=true; -- Hadoop MapReduce Map
-- Hadoop MapReduce Map ( / )
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
2.3.3 Reduce端の出力結果圧縮
-- mapred-site.xml
set hive.exec.compress.output=true;
set mapreduce.output.fileoutputformat.compress=true;
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
set mapreduce.output.fileoutputformat.compress.type=BLOCK;
2.3.4 snappyのインストール構成が成功したかどうかを確認する
-- , MRJOB, *.snappy
INSERT OVERWRITE LOCAL DIRECTORY '/TMP/HIVE/DATA/EXPORT' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT * FROM EMP;
-- Hive
CREATE TEMPORARY TABLE TMP LIKE EMP ;
LOAD DATA LOCAL INAPTH '/TMP/HIVE/DATA/EXPORT/**.snappy' OVERWRITE INTO TABLE TMP;
SELECT * FROM TMP;
-- GZIP Table
CREATE TABLE raw (line STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '
';
LOAD DATA LOCAL INPATH '/tmp/weblogs/20090603-access.log.gz' INTO TABLE raw;
CREATE TABLE raw (line STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '
';
CREATE TABLE raw_sequence (line STRING)
STORED AS SEQUENCEFILE;
LOAD DATA LOCAL INPATH '/tmp/weblogs/20090603-access.log.gz' INTO TABLE raw;
--
SET hive.exec.compress.output=true;
SET io.seqfile.compression.type=BLOCK; -- NONE/RECORD/BLOCK (see below)
INSERT OVERWRITE TABLE raw_sequence SELECT * FROM raw;
# Hadoop
bin/hadoop checknative
<property>
<name>io.compression.codecsname>
<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec
value>
property>
<property>
<name>io.compression.codec.lzo.classname>
<value>com.hadoop.compression.lzo.LzoCodecvalue>
property>
hive -e "
CREATE EXTERNAL TABLE IF NOT EXISTS hive_table_name (
column_1 datatype_1......
column_N datatype_N)
PARTITIONED BY (partition_col_1 datatype_1 ....col_P datatype_P)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS
INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
"
SET mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzoCodec;
SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress=true;
SELECT * FROM lzoTableName;
#
0、yum -y install gcc gcc-c++ autoconf automake libtools
1、 tar -zxvf snappy-1.1.x.tar.gz
2、
./configure
make
make install
3、
ls -lh /usr/local/lib | grep snappy
>libsnappy.a
libsnappy.la
libsnappy.so
libsnappy.so.1
libsnappy.so.1.3.0
#
yum -y install cmake zlib-devel ant libssl-dev openssl-devel lzo-devel
#
tar -zxvf hadoop-2.7.x-src.tar.gz hadoop-2.7.x-src;
#
cd /hadoop-2.7.x-src
# Hadoop snappy
mvn clean package -Pdist,native -DskipTests -Dtar -Dbundle.snappy -Dsnappy.lib=/usr/local/lib
# jar
cd /hadoop-dist/target
# native hadoop lib
cp native /hadoop-2.7.x/lib
# lib , hadoop
<property>
<name>io.compression.codecsname>
<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.SnappyCodec
value>
property>
<property>
<name>mapreduce.map.output.compressname>
<value>truevalue>
property>
<property>
<name>mapreduce.map.output.compress.codecname>
<value>org.apache.hadoop.io.compress.SnappyCodecvalue>
property>
-- mapred-site.xml
set hive.exec.compress.intermediate=true; --Hive MR
set mapreduce.map.output.compress=true; -- Hadoop MapReduce Map
-- Hadoop MapReduce Map ( / )
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
-- mapred-site.xml
set hive.exec.compress.output=true;
set mapreduce.output.fileoutputformat.compress=true;
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
set mapreduce.output.fileoutputformat.compress.type=BLOCK;
-- , MRJOB, *.snappy
INSERT OVERWRITE LOCAL DIRECTORY '/TMP/HIVE/DATA/EXPORT' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT * FROM EMP;
-- Hive
CREATE TEMPORARY TABLE TMP LIKE EMP ;
LOAD DATA LOCAL INAPTH '/TMP/HIVE/DATA/EXPORT/**.snappy' OVERWRITE INTO TABLE TMP;
SELECT * FROM TMP;