6

次のようなハイブテーブルがあります

  CREATE TABLE beacons
 (
     foo string,
     bar string,
     foonotbar string
 )
 COMMENT "Digest of daily beacons, by day"
 PARTITIONED BY ( day string COMMENt "In YYYY-MM-DD format" );

移入するために、私は次のようなことをしています:

 SET hive.exec.compress.output=True;
 SET io.seqfile.compression.type=BLOCK;

 INSERT OVERWRITE TABLE beacons PARTITION ( day = "2011-01-26" ) SELECT
   someFunc(query, "foo") as foo,
   someFunc(query, "bar") as bar,
   otherFunc(query, "foo||bar") as foonotbar
   )
  FROM raw_logs
WHERE day = "2011-01-26";

これにより、個々の製品が deflate によって圧縮された新しいパーティションが作成されますが、ここでの理想は、代わりに LZO 圧縮コーデックを使用することです。

残念ながら、それを実現する方法は正確にはわかりませんが、多くの実行時設定の 1 つか、または CREATE TABLE DDL の単なる追加行であると思います。

4

1 に答える 1

14

INSERT OVERWRITE の前に、次のランタイム構成値を追加します。

SET hive.exec.compress.output=true; 
SET io.seqfile.compression.type=BLOCK;
SET mapred.output.compression.codec = com.hadoop.compression.lzo.LzopCodec;

また、以下をチェックして、目的の圧縮コーデックがあることを確認してください。

io.compression.codecs

io.seqfile.compression.type の詳細については、 http: //wiki.apache.org/hadoop/Hive/CompressedStorage を参照してください。

私は間違っているかもしれませんが、BLOCK タイプは、圧縮率の低いファイルの小さなセットに対して、より大きなファイルをより高い比率で圧縮することを保証するように思えました。

于 2011-01-28T20:14:45.600 に答える