2014年のアドベントカレンダーのノルマも無事に終わったので、気楽に書きます(笑
Impala Cookbook
先日 Impala Cookbook というスライドが公開されました。これは非常に役立つスライドで、
- スキーマの設計
- メモリの使用
- クラスタのサイジングと推奨ハードウェア
- ベンチマーク
- マルチテナントでのベストプラクティス
- クエリのチューニング
- Hive, Sentry, Parquetとの関わり
について詳細に書かれています。日本語の情報があると役立つ方もいらっしゃるかもしれないので、興味のあるところを抜き出してみました。詳細は公開されているスライドをご覧下さい。
なお、数日前に Impala 2.1.0 も公開されています。(リリースノート)
スキーマ設計
データ型
- 数字型を使い、文字列型はなるべく使わないようにする
- メモリの消費量、ディスクの使用量、パフォーマンス
- 通貨などにはDecimal型を使う
パーティション
- アクセスパターンを理解
- パーエィション数は10万以下がベター
- 必要であればパーティション数は減らす
その他
- 列数は2000以下にすべき
- タイムスタンプ型はまだHiveのParquetでサポートされていない
ファイルフォーマットとメモリの使用量
- Parquet/Snappy
- 常に読み込みには良好
- 書き込みは非常に遅い
- つまり、ParquetはWrite-once/Read Many型に適していると言うこと
- Write once/Read onceのようなETLではSeqenceFile/Snappyがベストかもしれない
- 一般的にGzipよりもSnappyの方が良好(だがベンチマークをすべき)
メモリの使用量
- メモリが使用されるのは
- JOIN、Group By、 Parquetの書き込みバッファ、メタデータのキャッシュなど
- メモリ使用量の見積もり
- 実行計画を使用
メモリの制限を超えた場合
- 統計情報を使用する (COMPUTE STATS)
- 単一クエリで多くのジョイン
- 大きなテーブルと大きなテーブルでのジョイン
- Impala 2.0以降ではディスクにスピルできる
クラスタのサイジングと推奨ハードウェア
- パフォーマンスのためには 128GB 以上のメモリ
- SSDとハードディスク
- 多くの場合はCPUバウンドになるので、それほどSSDが必要になるケースはない
- 10GBネットワーク
サイジング
- SLA
- ワークロード
- メモリの要求
ベンチマーク
- いろいろ書かれています。準備では/proc/sys/vm/drop_caches でバッファキャッシュをクリアする方法や、注意点などかかれているのでオススメ
マルチテナント
- アドミッションコントロールとLLAMA
- 要するにリソース管理。この日本語資料が詳しいので是非ご覧下さい
クエリのチューニング
- Compute Stats
- 実行計画
- クエリプロファイルでボトルネックを確認
- 他
まとめと雑感
63ページにも渡って詳細に書かれています。物足りなければ下記ページにに大量のドキュメントも公開されています。
http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/impala.html
Impalaは公開されてから約2年。多くの本番環境に実践投入されており、EMRもImpalaをサポートしているなど、いろいろなところで利用されています。多くのビッグデータでのSQLベンチマークの比較においてImpalaが利用されているところからも、選択肢の中では有力な候補かと。
エンタープライズ環境で利用する場合、自力でサポートできる方はお好みのSQL on Hadoopプロダクトを選んで問題ないでしょうが、システムは未来永劫に渡って個人で運用し続けることもないし、よく検討する必要があります。必要があればImpalaはサブスクリプションを購入して有償サポートも受けることもできるので、ご予算がある方は是非(笑

コメント
[…] 昨年末に公開された Impala Cookbook、先日新しいバージョンに更新されました。昨年末も雑記を書きましたが、改めて読み直し、日本語でまとめてみました。 […]