Impala Q&A
2012/11/7に開催された Cloudera World Tokyo に参加してきました。
本編については他の人がまとめてくれるはずですので省略。
懇親会では米国Cloudera社のCTO、Dr. Amr Awadallah氏に直接Impalaの疑問に答えていただきました。非常に貴重な話を聞けたのでまとめておきます。(公開許可済み)
その場でメモを取っていたわけではなく思い出しながらのまとめなので、一緒に聞いていた方、clouderaの方は補足をお願いします。
Q&A
- Q. なぜJavaでなくてC++で実装したか?
- A. ImpalaのメインデザイナーがGoogleでC++を使って分散処理(
Dremelのこと?F1だそうです)を実装した人物であるのと、JVMの起動コストがレイテンシーの増加につながるため - 補足: この人です
- A. ImpalaのメインデザイナーがGoogleでC++を使って分散処理(
Q. 1ノードに偏ったデータを読む必要があるクエリがくると低レイテンシーを保てなくなるのでは?それを回避する仕組みはImpalaにはあるか?
- A. データの分散はImpalaでは面倒を見ておらず、HDFSに任せている。十分大きなクラスタとデータであればHDFSによって分散されて問題ない。ノード間の偏りが問題になるクエリ、つまり小さなデータのみを読むクエリあれば、ImpalaのデータストアとしてHBaseを用いることを勧める。HDFSは逆に大きなデータを読むクエリに向いている。
Q. なぜYARNのResourceManagerの上で動かすようにしなかったか?
- A. ResourceManager上で動かすように実装しているところである。CDH5に含まれる予定。Mesosについても調査している。
Q. 現状ではメモリの使用量を制限する仕組みがなくJOINなどでメモリを使い尽くす危険があるが改善されるのか?
- A. ResourceManagerにノードのリソース量を考慮する仕組みと、Job毎のリソース使用量を設定する仕組みを入れて対応する予定である。CDH5に含まれる予定。
Q. 現状ではSparrowというスケジューラを利用しているがその理由は?
- A. インターンとしてSparrowの開発元であるUCSの学生がきていたため。また、Sparrowは低レイテンシでのスケジューリングが可能になる。ResourceManager上で動かす場合は二層のスケジューラで動かすことを考えている。その場合はトップレベル(サーバ単位)のスケジューラとしてYARN、下位のスケジューラとしてSparrowになる。
Q. UDFを実装する予定はあるか?
- A. 予定している。言語は未定(現状のHiveのUDFはそのまま動かせるようにしたい?)。CDH5に含まれる予定。
Q. ドキュメントを見る限りImpalaではRCFileよりもtrevniを推奨しているように見えるがどうか?
- A. ImpalaではRCFileとtrevniの両方をサポートする予定である。現場ではRCFileの方がよいが、将来的にはtrevniの方がパフォーマンスがよいので推奨。RCFileとtrevniに仕様上の大きな違いはないが、Doug Cuttingによるtrevniの実装が優れている。
Q. RCFileの列指向のメリットを活かすにはlazy (serialization|deserialization)が必須だが、Impalaでは現状のJavaの実装をそのまま利用できない。C++で実装しなおすのか?
- A. 実装する。trevniのIOについても実装する。
Q. ImpalaはHiveのクエリをそのまま利用できるとあるが、planner/executorはともかくparserも共有していないように見える。この方法だと将来的にサポートする構文が異なってくるのでは?
- A. Hiveのparserはレイテンシーが大きくそのまま利用できなかった。Impalaはアドホックなクエリによるデータ解析をターゲットとしているので、それに向けた構文を追加する予定である。例えばwindow関数の実装を予定している。(但しwindow関数のパーティションはデータのパーティションと一致させる必要がある?)
Q&A 追記
@tagomoris さんありがとうございます!
- Q. Apache Foundationに寄贈とかする予定は?
- A. Apache projectにしちゃうと開発がいろいろ面倒になって遅くなる、ある程度ちゃんと動いて使えるようになってからそうするつもり。今でもApache Licenseのオープンソースプロジェクトだしね!
@shiumachi さんありがとうございます!
- Q. Impala って Oracle Coherence のようなインメモリに比べて速いの?
- A. 正直に言うと、多分 Coherence の方が速い。ただし、コストを比較すれば Impala の方が100倍安い。
追加の疑問
帰ってきた後に思いついたのでその場で聞けなかった疑問です
- MapReduceのように1ブロックに1Mapが立ち上がってコストが大きいというのでなければ、もしかしたらブロックサイズを小さくして細かいブロックに分けた方が、小さいデータを読むクエリの際にデータがより分散されてレイテンシーの低下を抑えれるかも?
感想
- 全体的に低レンテンシーであることににかなり拘っていると感じます。ターゲットが明確で好印象です。
- 来年リリースされるCDH5で現状の不満や落とし穴がかなり改善される予定なので、それまで待つのが無難。
- 但し問題点を認識した上で使うならあり。
- 当面はメモリ使用量を制限できないことが一番大きい問題だと思うので、Impala専用のクラスタを用意する、等。実際に現在利用している会社でクラスタを分けているところがあるそうです。
謝辞
矢継早な質問に一つ一つ丁寧に答えて頂いたDr. Amr Awadallah氏、間を取り持って通訳までして頂いた@shiumachi氏、ありがとうございました!