Указание кодека сжатия для INSERT OVERWRITE SELECT в Hive - PullRequest
6 голосов
/ 28 января 2011

У меня есть стол улей, как

  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.

К сожалению, я не совсем уверен, как это сделать, но я предполагаю, что это одна из многих настроек времени выполнения или, возможно, просто дополнительная строка в CREATE TABLE DDL.

1 Ответ

14 голосов
/ 28 января 2011

Перед 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 обеспечит сжатие файлов большего размера с более высоким соотношением по сравнению с меньшим набором сжатых файлов меньшего размера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...