Cloudera ImpalaとCatalog Serviceの話

14日目です
「Announcing Support for Impala with Amazon Elastic MapReduce」
https://twitter.com/mikeolson/status/411544952145854464
でも紹介されているように、Amazon EMRでCloudera Impala(以下Impala)が利用できるようになったようです!(他のサービスやアプライアンスにもImapalaを利用しているところがいくつかあるようです)
また、Hadoopアドベントカレンダー2013@brfrn169さんの12日目のブログもImpalaの話題です「Amebaのログ解析基盤にCloudera ImpalaとPrestoを導入しました」。興味深い内容が盛りだくさんですね。
さて、本日は最近リリースされたImpala 1.2.Xで利用できるようになった Catalog Service についての話題です(前にちらっと触れましたが、、)。昨日メーリングリストでわかりやすくまとまっていたので、日本語でまとめてみました。

Impalaのメタデータ

ImpalaはHiveと共通のメタストアを使用しています。従来、メタデータが変更された場合には、Impalaで"invalidate metadata/refresh"コマンドを使用して変更を認識する必要がありました。Impala 1.2.Xから管理方法が変更となり、メタデータの変更を管理するサービス、Catalog Serviceが登場しています。

Catalog Service

Catalog Serviceはメタデータの管理を行う中央型のサービスです。Catalog Serviceはメタデータの更新を処理し、クラスタの全てのImpaladノードに対してどのメタデータの変更が行われたのかをStateStore経由で送信します。
このサービスにより、Impalaによって行われたメタデータの変更は"invalidate metadata"コマンドを実行することなく、全てのノードで自動的に認識されるという利点があります。もうひとつの良いところは、Catalog ServiceはHiveのメタストアとHDFSからメタデータを読み込む処理を行うので、クエリの実行の際にコストがかかりません。
しかし、もし1.2.Xで"invalidate metadata"コマンドを実行してしまうと、Catalog Serviceに対して「キャッシュされているメタデータが無効なのでリロードしろと」通知してしまうので、以前のバージョンのImpalaで"invalidate metadata"を実行したときよりも、完了するまでに長い時間がかかってしまいます。実は1.2.Xより前のバージョンでは、全てのメタデータの読み込みが「ゆっくり(lazily)」行われているので、コマンドの実行結果がすぐに戻ってきているのですが、実際にメタデータを使用するクエリではロードにコストがかかっているのです。1.2.Xでは、Impalaによる全ての更新が自動的に全ての他のノードに送られているので、"invalidate metadata"を頻繁に行う必要はありません。

推奨

  1. 可能であればDDLの操作はImaplaを使って行う。"invalidate/refresh"コマンドは使用しなくて良い
  2. Impalaがテーブルを既に知って、テーブルが外部で修正された場合は "refresh <table name>" または"invalidate metadata <table name>"を使用する。これらはカタログのメタデータを完全に無効にするよりもかなり早く完了する。
  3. テーブルやデータベースの追加、削除が外部で行われた場合は、Imapalaが変更を取り入れるために"invalidate metadata"を実行する

将来的に外部での変更を自動的に取り込む機能が追加される予定ですが、v1.2.1にはその機能が含まれていません。
Catalog Serviceの詳細はImpalaのドキュメントを参照して下さい。

カスタムのSerDe対応は?

もうひとつ気になった話題。ImpalaはカスタムのSerDeをサポートしないの?という質問への回答。汎用フォーマットはビルトインで対応するが、パフォーマンスが落ちるのでカスタムのSerDeの対応予定はないとのこと。
「It is not on the roadmap, we're planning on having built-in support for the popular file formats.
A large part of Impala's performance advantage depends on the efficiency of the scanners, and Hive's Serde API would be detrimental to that.」

まとめ

今までは明示的に行わなければならなかったメタデータの更新、自動で検知されるのは良いですね。逆に Invalidate Metadataをしてはいけない、という罠もあるので、以前から使っている人は気をつけましょう!
※該当するメーリングリストの記事はこちら。間違いなどを発見した場合はご指摘下さい。

コメント

  1. […] また、ImpalaはHiveと同じメタストアを利用します。つまり、同じデータに対してHiveを使ってクエリを行うことも可能ですし、Impalaを使ってクエリを行うこともできます[2]。最新のImpalaはCatalog Serviceを導入し、メタ情報のリフレッシュを自動で行うことができるようになっています。(過去のブログを参照) […]