Cloudera Impala (Beta) File format & Compression codec

前回に続いて、Cloudera Impalaに触れていきます。
今回は軽く、Impalaが対応するデータの保存形式と圧縮形式についてまとめておきます。

ある程度は検証手順も記載しますが、基本は最後のまとめだけ見てもらえればOKです。



概要

Impala構築において、最後のimpala-shellでのSELECTができずに悩んだ時、閃きでデータ圧縮が悪いのかなーと思って当りだったわけですが、実はちゃんと書いていてくれたんですね。
  • Introducing Cloudera Impala

  • HDFS and HBase storage starting with:
    * HDFS file formats: TextFile, SequenceFile
    * Compression codecs supported with SequenceFile: Snappy, GZIP, BZIP

    検証環境では、TextFile + GZIP だったので動かなかったのですが、実はそれ結構困るじゃないかということで、ちゃんと調べてみました。


    検証した形式

    File format

  • TextFile
  • SequenceFile
  • RCFile

  • Compression codec

  • Raw
  • org.apache.hadoop.io.compress.GzipCodec
  • org.apache.hadoop.io.compress.BZip2Codec
  • org.apache.hadoop.io.compress.SnappyCodec
  • org.apache.hadoop.io.compress.DefaultCodec (Deflate)

  • 検証しなかった形式

    LZOは用意するのが面倒で止めましたが、準備手順のリンクは貼っておきます。
  • Hadoop at Twitter (part 1): Splittable LZO Compressio
  • com.hadoop.compression.lzo.LzoCodec
  • com.hadoop.compression.lzo.LzopCodec

  • Trevniファイルフォーマット?はいつか試すかもなので単語だけ書いておきます。


    Hiveでテーブル作成

    こんな感じで全部作成していきます。
    HiveさんはCDH4.1でもいまだに mapred.output.compression.codec 設定を使っているのですが、いついきなり mapreduce. の設定に切り替わるかドキドキしちゃいますね。

    RCFile + BZIP2

    この組み合わせはSELECT時にエラーが出て使えないようで・・・
  • [Hive-user] RCfile is not working with BZip2. Interesting in using LZO in general.

  • こんなエラーが出てしまいます。


    Impalaで参照

    impala-shellで普通に参照してみます。


    Impala成否まとめ

    形式\圧縮 Raw GZIP BZIP2 Snappy Deflate
    TextFileox (1)x (2)x (3)x (1)
    SequenceFileooooo
    RCFilex (4)x (4)– (5)x (4)x (4)

    注釈

    (1) TextFile + GZIP or Deflate
    select * も seelect count(*) も 0 が返ります。

    (2) TextFile + BZIP2
    Error communicating with impalad: TSocket read 0 bytes が返って接続した impalad が落ちます。

    (3) TextFile + Snappy
    select * の結果はNULL, select count(*) には 0 が返ります。

    (4) RCFile + 全部
    Table default.impala_rcfile_raw has unsupported format RC_FILE のエラーが返ります。

    (5) RCFile + BZIP2
    (4)と同じですが、それ以前にHiveで参照できないので今後も注意。

    まとめ

    SequenceFileを指定すると、圧縮してもHDFSファイルに拡張子が付かないので(TextFileなら付く)確認しづらいところですが、公式で表記されてた以上に対応されている結果になりました。

    TextFileは平文しか扱えないので、今のところは容量少なめのデータだけ、圧縮テーブルの横っちょに平文テーブルも置いておいて、とりあえず遊んでみる的な感じがよさそうですね。でも、解凍機能くらいサクッとつけて欲しいところです(わりと切実)。

    効率面だけ追うと、最終的にはTrevni+圧縮になるのでしょうが、バッチ処理以外にFuse経由でダウンロードしてもらったり、色んな言語で解析処理に使ってもらったりするとなると、TextFileがどうしても必要になるので、選択肢を把握しつつ適確に選んでいきたいものです。