introduction to impala ~hadoop用のsqlエンジン~ #hcj13w
DESCRIPTION
Hadoop Conference Japan 2013 Winter で発表した、Impala の概要についての資料です。TRANSCRIPT
Cloudera 株式会社 カスタマーオペレーションズエンジニア小林大輔2013 年 1 月 21 日
Introduction to Impala ~ Hadoop 用の SQL エンジン~
自己紹介
• 小林 大輔 (@daisukebe_)• Cloudera 株式会社• カスタマーオペレーションズエンジニアとして
テクニカルサポート業務を担当• email: [email protected]
Agenda
• Impala とは• MapReduce, Hive, そして Impala へ• Impala のアーキテクチャ• Impala と Hive の比較 ( デモあり )
Agenda
• Impala とは• MapReduce, Hive, そして Impala へ• Impala のアーキテクチャ• Impala と Hive の比較 ( デモあり )
Impala とは
• Cloudera が開発した、低レイテンシ・分析特化型クエリ実行基盤
• Apache ライセンス ( オープンソース )• Google Dremel, Google F1 などにインスパイアされて開発
された• 開発チームの Marcel Kornacker は、 Google F1 の元開発エンジニ
ア • データサイエンティストが使うことを想定して
いる• あれこれと試行錯誤するときに、すぐに結果がほしいケース
Impala とは ( 技術的な観点から )
• Hadoop 内部で直接実行される SQL クエリエンジン• Hadoop で広く使われているファイルフォーマットを読み込み• HDFS/HBase とやり取り • Hadoop と同じノードで実行
• 高パフォーマンス :• Java の代わりに C++ で開発• ランタイムコードの生成 (LLVM)• 新しい実行エンジンは、 MapReduce に依存しない
Agenda
• Impala とは• MapReduce, Hive, そして Impala へ• Impala のアーキテクチャ• Impala と Hive の比較 ( デモあり )
MapReduce のおさらい
• 分散バッチ処理システム• MapReduce が提供するもの
• 処理の並列化• 耐障害性• ジョブ監視のための基盤• 開発者のための抽象化されたインタフェース (map + reduce)
MapReduce の問題点 (1)
• 分散処理が簡単になったとはいえ、それでも処理の実装はかなり大変
• Java で書かなければいけない• 現実には複数の MapReduce を組み合わせて一つの処理
を実現するため、設計が難しい
MapReduce を基盤としたスクリプト言語・上位アプリケーション開発のモチーベーション
となった
MapReduce を基盤としたツール群
MapReduce
Hive
Pig Mahout
Oozie
Apache Hive とは
• SQL ライクな MapReduce 用クエリ言語• メタデータを保持することで、テーブルスキーマや個々
のデータに対するアクセス権なども設定可能• ユーザー数が多く、多数の BI/DWH ベンダーが Hive から
のアクセスをサポートするようになった
Hive のアーキテクチャ
HDFS DN
MapReduce Slave(Container or TT)
HBase HDFS DN
MapReduce Slave(Container or TT)
HBaseHDFS DN
MapReduce Slave(Container or TT)
HBase
SQL App
HiveQL とインタフェースメタデータとスケジューラ
HDFS NNHive Metastore YARN MRv1
Query Exec Engine
Compiler
Hive のアーキテクチャ
HDFS DN
MapReduce Slave(Container or TT)
HBase HDFS DN
MapReduce Slave(Container or TT)
HBaseHDFS DN
MapReduce Slave(Container or TT)
HBase
SQL App
HiveQL とインタフェースメタデータとスケジューラ
HDFS NNHive Metastore YARN MRv1
Query Exec Engine
Compiler
クエリを解析し、メタストアにアクセスして必要な情報を集め、MapReduce ジョブとして実行計画を作成する
Hive のアーキテクチャ
HDFS DN
MapReduce Slave(Container or TT)
HBase HDFS DN
MapReduce Slave(Container or TT)
HBaseHDFS DN
MapReduce Slave(Container or TT)
HBase
SQL App
HiveQL とインタフェースメタデータとスケジューラ
HDFS NNHive Metastore YARN MRv1
Query Exec Engine
Compiler
通常の MapReduce フレームワークを用いてジョブを実行していく
MapReduce の問題点 (2)
• 高レイテンシ• 小さいジョブを実行しても数十秒かかる• 数十分単位で処理時間がかかることもよくある
• すぐに結果がほしいユーザーのニーズに合わない
MapReduce に依存しない、低レイテンシ処理のための基盤を開発するモチベーションとなった
Agenda
• Impala とは• MapReduce, Hive, そして Impala へ• Impala のアーキテクチャ• Impala と Hive の比較 ( デモあり )
Impala のアーキテクチャ
Query Coordinator
Query Executor
HDFS DN HBase
Hiveメタスト
アHDFS NN Statestore
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
HiveQL とインタフェース メタデータとスケジューラ
SQL App
ODBC
Query Planner
ローカルダイレクト読み込み
Impala のアーキテクチャ
Query Coordinator
Query Executor
HDFS DN HBase
Hiveメタスト
アHDFS NN Statestore
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
HiveQL とインタフェース メタデータとスケジューラ
SQL App
ODBC
Query Planner
ローカルダイレクト読み込み
Impala のアーキテクチャ
Query Coordinator
Query Executor
HDFS DN HBase
Hiveメタスト
アHDFS NN Statestore
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
HiveQL とインタフェース メタデータとスケジューラ
SQL App
ODBC
Query Planner
ローカルダイレクト読み込み
Impala のアーキテクチャ : クエリ実行ODBC/Beeswax の Thrift API 経由で SQL リクエストを受信
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
SQL App
ODBC
Hiveメタスト
アHDFS NN Statestore
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
SQL リクエスト
Hive と同じクエリをそのまま投げる( 一部制限あり )
Impala のアーキテクチャ
Query Coordinator
Query Executor
HDFS DN HBase
Hiveメタスト
アHDFS NN Statestore
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
HiveQL とインタフェース メタデータとスケジューラ
SQL App
ODBC
Query Planner
ローカルダイレクト読み込み
メタデータを取得して実行計画を作成する
Impala のアーキテクチャ● 例 : Join (結合)と Aggregation (集計)のクエリ SELECT state, SUM(revenue) FROM HdfsTbl h JOIN HbaseTbl b ON (...) GROUP BY 1 ORDER BY 2 desc LIMIT 10
HbaseScan
HashJoin
HdfsScan Exch
TopN
Agg
Exch
at coordinator at DataNodes at region servers
AggTopN
Agg
HashJoin
HdfsScan
HbaseScan
Impala のアーキテクチャ : クエリの実行コーディネーターはリモートの Impala デーモンと協調し、
各フラグメントの実行を開始
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
SQL App
ODBC
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
Hiveメタスト
アHDFS NN Statestore
他のノードと協調して分散処理を行う
Impala のアーキテクチャ : クエリ実行
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
SQL App
ODBC
Hiveメタスト
アHDFS NN Statestore
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
ローカルのデータを直接読みこんでクエリを実行
Impala のアーキテクチャ : クエリ実行Impala デーモン間に中間結果が渡され、クエリ結果はクライアントへ
返される
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
SQL App
ODBC
Hiveメタスト
アHDFS NN Statestore
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
クエリ結果
結果は最初のノードに集約インメモリに置いたまま転送
Impala のアーキテクチャ
メタデータの処理 :
• Hive のメタストアを利用
• メタデータのキャッシュ : 一度 Impala を起動すると、メタストアは再度同期されない (再起動が必要 )
• ベータ版 : Impala デーモンは、起動時にメタストアのメタデータを読み込む
• GA: statestore を通じてメタデータを配布
注 :GA で搭載予定の機能は、現時点 (v.0.4) では未サポートです
Impala のアーキテクチャ実行エンジン
• C++ で開発• LLVM によるコード生成
• すべての式をインライン化することで、高速化を図る
Impala のアーキテクチャStatestore• 中央のステートリポジトリ
• ネームサービス ( メンバーシップ )• GA: メタデータ• GA: ほかの関連スケジュールまたは診断ステート
• ソフトステート• Statestore がなくても Impala サービスは古い情報を使用しながら動作を継続
• 定期的に Impala デーモンをプッシュ• ポーリングの失敗が続く場合、クラスタビューから Impala デー
モンが排除されたとみなす● サービス / サブスクリプション登録に Thrift API を利用 注 :GA で搭載予定の機能は、現時点 (v.0.4) では未サポートです
ユーザー視点での Impala: SQL• SQL サポート :
• SQL の Hive バージョンにならって開発• 現時点では一部の DML のサポートのみ (SELECT, INSERT)• GA: DDL のサポート (CREATE, ALTER)
ベータ版では Hive を使用• 機能制限 :
• カスタム UDF 、ファイルフォーマット、 SerDes不可• ハッシュ JOIN のみ ; テーブル JOIN はメモリ内に収める必要が
ある :• ベータ版 : ブロードキャストされたハッシュ JOINだけ• GA:全 ( 実行 ) ノードのメモリを集計
• ベータ版 : JOIN の順番 = FROM節に記述した順番• GA: 基本的なコストベースのオプティマイザ
Agenda
• Impala とは• Hadoop, Hive, そして Impala へ• Impala のアーキテクチャ• Impala と Hive の比較 ( デモあり )
デモ : Hive vs Impala
• Cloudera Demo VM
• 新ベンチマーク TPC-DS データセット ~500MB
• クエリの内容 : 複数データの結合 (joins) 、集計 (aggregate) 、並べ替え (order by)
• フォーマット : 非圧縮テキスト
• VM ダウンロードのリンク :
https://ccp.cloudera.com/display/SUPPORT/Cloudera
%27s+Impala+Demo+VM
Impala と Hive の比較• Hive: MapReduce の実行エンジン
• 高レイテンシ• MapReduce のオンディスクチェックポイントに基づく• MapReduce による耐障害性モデル• 柔軟なファイルフォーマットと UDF• 実行時の高オーバーヘッド
• Impala:• 耐障害性なし• 低レイテンシ
Impala と Hive の比較• Hive より Impala のパフォーマンスが優れている点 :
• Impala は完全なディスクスループットを取得 (~100MB/sec/disk); I/O バウンドのワークロードの 3〜 4倍速い
• Hive 内で複数の map-reduce フェーズを必要とするクエリでは処理スピードのアップを実感
• メモリ内のデータに対して実行するクエリに関しては、よりスピードアップを実感( 100倍のケースもある)
GA で実装予定の機能の紹介
• JDBC ドライバ対応
• ファイルフォーマットとして、 Trevni の採用
• DDL 対応
• SQL パフォーマンスの最適化
http://blog.cloudera.com/blog/2012/12/whats-next-for-
cloudera-impala/
GA後、実装予定の機能紹介
• UDF による拡張
• コストベース・オプティマイザの搭載
• ディスクを使用した外部結合
http://blog.cloudera.com/blog/2012/12/whats-next-for-
cloudera-impala/
まとめ
• Impala の概要、開発のモチベーション、アーキテクチャについて紹介しました
• Impala は、データサイエンティストのためのツールです
• バッチ処理や、業務処理には向きません
• GA 、 GA後も、多くの改良を進めていきます
Impala を試してみる !
• ベータ版は 2012 年 10 月 24 日から入手可能
• 2013 年 Q1 には GA版が公開される予定
• 質問やコメントは [email protected] まで
• https://github.com/cloudera/impala
CONFIDENTIAL - RESTRICTED
ご清聴ありがとうございました。