Impala Cookbookを読んで

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はサブスクリプションを購入して有償サポートも受けることもできるので、ご予算がある方は是非(笑

コメント

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