1

使用: Amazon Aws Hive (0.13)
しようとしています: スナップ圧縮で orc ファイルを出力します。

create external table output{
col1 string}
partitioned by (col2 string)
stored as orc
location 's3://mybucket'
tblproperties("orc.compress"="SNAPPY");

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.compress.output = true;    
set mapred.output.compression.type = BLOCK;  
set mapred.output.compression.codec = org.apache.hadoop.io.compress.SnappyCodec;

insert into table output
partition(col2)
select col1,col2 from input;

問題は、mybucket ディレクトリの出力を見ると、SNAPPY 拡張子が付いていないことです。ただし、バイナリファイルです。これらの orc ファイルを圧縮して SNAPPY 拡張子で出力するように変換するために、どの設定を見逃していますか?

4

2 に答える 2

3

OrcFiles は、特殊な形式のバイナリ ファイルです。ファイルの内容を指定するorc.compress = SNAPPYと、Snappy を使用して圧縮されます。Orc は半円柱形式のファイル形式です。

データのレイアウト方法の詳細については、このドキュメントを参照してください。

ストリームは、そのテーブル内のすべてのストリームのテーブル プロパティとして指定されているコーデックを使用して圧縮されます。メモリの使用を最適化するために、各ブロックが生成されるたびに圧縮が段階的に行われます。圧縮されたブロックは、最初にスキャンのために解凍する必要なく、ジャンプすることができます。ストリーム内の位置は、ブロックの開始位置とブロックへのオフセットによって表されます。

つまり、ファイルは Snappy コーデックを使用して圧縮されています。ファイル内のブロックが実際に圧縮されているため、圧縮されているとは言えません。

于 2015-02-05T22:01:06.280 に答える
3

さらに、hive --orcfiledump /apps/hive/warehouse/orc/000000_0ファイルの詳細を表示するために使用できます。出力は次のようになります。

Reading ORC rows from /apps/hive/warehouse/orc/000000_0 with {include: null, offset: 0, length: 9223372036854775807}
Rows: 6
Compression: ZLIB
Compression size: 262144
Type: struct<_col0:string,_col1:int>

Stripe Statistics:
  Stripe 1:
    Column 0: count: 6
    Column 1: count: 6 min: Beth max: Owen sum: 29
    Column 2: count: 6 min: 1 max: 6 sum: 21

File Statistics:
  Column 0: count: 6
  Column 1: count: 6 min: Beth max: Owen sum: 29
  Column 2: count: 6 min: 1 max: 6 sum: 21
....
于 2015-05-07T22:34:17.207 に答える