6

データを Hive に効率的に保存し、圧縮されたデータを Hive に保存および取得するにはどうすればよいですか? 現在、私はそれをTextFileとして保存しています。私はBejoy の記事を読んでいましたが、LZO 圧縮はファイルの保存に適していて、分割可能であることがわかりました。

出力を生成するHiveQL Selectクエリが1つあり、その出力をどこかに保存して、Hiveテーブル(品質)の1つがそのデータを使用できるようにして、そのqualityテーブルをクエリできるようにします。

以下は、qualityテーブルを上書きするために使用しているパーティションを作成して、以下の SELECT クエリからデータをロードしているテーブルqualityです。

create table quality
(id bigint,
  total bigint,
  error bigint
 )
partitioned by (ds string)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/uname/quality'
;

insert overwrite table quality partition (ds='20120709')
SELECT id  , count2 , coalesce(error, cast(0 AS BIGINT)) AS count1  FROM Table1;

ここでは、現在 として保存していますがTextFile、これを として作成Sequence fileし、データを に保存する必要がありLZO compression formatますか? それともテキストファイルでもいいですか?選択クエリから、毎日テーブル品質にアップロードする必要がある数 GB のデータを取得します。

では、どの方法が最適ですか?出力を TextFile または SequenceFile 形式 (LZO 圧縮) として保存して、Hive 品質テーブルを照会しているときに結果をより速く取得できるようにする必要があります。クエリが高速であることを意味します。

アップデート:-

ブロック圧縮を使用して SequenceFile として保存するとどうなりますか? 以下のように-

set mapred.output.compress=true;
set mapred.output.compression.type=BLOCK;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.LzoCodec;

上記とは別に、BLOCK Compression を有効にするには、他にいくつか設定する必要がありますか? また、テーブルを SequenceFile 形式で作成しています

再更新

以下のようなテーブルを作成する必要がありますか?または、Sequence File で BLOCK 圧縮を有効にするには、他の変更を加える必要がありますか?

create table lipy
( buyer_id bigint,
  total_chkout bigint,
  total_errpds bigint
 )
 partitioned by (dt string)
row format delimited fields terminated by '\t'
stored as sequencefile
location '/apps/hdmi-technology/lipy'
;
4

1 に答える 1

1

私は Hive をあまり使用していませんが、Hadoop と構造化データの経験から、BLOCK 圧縮を使用した SequenceFiles から最高のパフォーマンスを得ていました。デフォルトは行の圧縮ですが、構造化されたデータを格納し、行がそれほど大きくない場合は、BLOCK 圧縮ほど効率的ではありません。それをオンにするために、私は mapred.output.compression.type=BLOCK を使用しました

于 2012-08-02T11:10:33.063 に答える