Upload
sho-shimauchi
View
4.957
Download
1
Embed Size (px)
DESCRIPTION
#pyfes 2012.11 で発表した、Impala についての概要資料です。
Citation preview
Cloudera Impala低レイテンシクエリエンジン
2012/11/24 @shiumachi
アジェンダ
• Impalaとは • Hadoop、Hive、そしてImpala • どれくらい速いの? • Impala と Hive の違い
お前誰よ?
• Sho Shimauchi ( @shiumachi ) • Cloudera の問い合わせ担当 • 現在仕事中です(今ここでしゃべるために20
分だけ会議から抜けてきた)
Impala
• Cloudera が開発したオープンソースの低レイテンシ・分析特化型クエリ実行基盤
• Google Dremel, Google F1 などにインスパイアされて開発された – Impala 作者の Marcel Kornacker は Google F1 の開
発エンジニア • データサイエンティストが使うことを想定している – あれこれと試行錯誤するときに、すぐに結果がほしい – 分析用途:読み込みのみで書き込み処理は基本的に
不要
なぜImpalaが開発されたのか?
• Hadoop (MapReduce) だと高レイテンシで、すぐに結果が欲しくても処理に時間がかかる
• Hive のように手軽に使えるSQLのインタフェースを持ち、かつ低レイテンシのエンジンが必要になった
そもそもHadoop/MapReduce/Hive って何?
Apache MapReduce とは? • バッチ処理を分散して行うシステム • Hadoop のコアコンポーネントの一つ • フレームワークの中で処理の信頼性を担保して
いるので、開発者はアプリケーションロジックのみに集中してコードを書ける
• MR が提供するもの – 処理の並列化 – 耐障害性 – ジョブ監視のための基盤 – 開発者のための抽象化されたインタフェース(map + reduce)
MapReduce(1) Map処理
Mapper
Mapper
Mapper
商品 価格
りんご 100
みかん 200
ぶどう 300
りんご, 100
みかん, 200
ぶどう, 300
入力データに対して計算処理し、<キー, 値>の形式に変換する
ここでの処理は「何もせずそのまま出力」
HDFS上のデータ 複数のブロックに分割されていて
も、分割されたまま実行可能
MapReduce(1) Map処理
Mapper
Mapper
Mapper
商品 価格
りんご 200
なし 400
いちご 100
りんご, 100
みかん, 200
ぶどう, 300
りんご, 200
なし, 400
いちご, 100
他のMapperでも同様に実行 このMapperは同一サーバで複
数稼働しても構わない
商品 価格
りんご 300
みかん 400
なし 100
りんご, 300
みかん, 400
なし, 100
MapReduce(2) Shuffle処理
Mapper
Mapper
Mapper
りんご, 100
みかん, 200
ぶどう, 300
りんご, 200
なし, 400
いちご, 100
りんご, 300
みかん, 400
なし, 100
Reducer
Reducer
りんご, [100, 200, 300]
Map出力の中で同じキーを持つデータは一ヶ所のReducerにまとめる
この時点ではまとめるだけで計算はしない
MapReduce(2) Shuffle処理
Mapper
Mapper
Mapper
りんご, 100
みかん, 200
ぶどう, 300
りんご, 200
なし, 400
いちご, 100
りんご, 300
みかん, 400
なし, 100
Reducer
Reducer
りんご, [100, 200, 300]
みかん, [200, 300]
ぶどう, [300]
なし, [400, 100]
いちご, [100]
他のデータも同様に処理 Reducerは複数でもいい
Reducerを実行しないケースもある
MapReduce(3) Reduce処理
Reducer
Reducer
りんご, [100, 200, 300]
みかん, [200, 300]
ぶどう, [300]
なし, [400, 100]
いちご, [100]
りんご, 200
みかん, 250
ぶどう, 300
なし, 250
いちご, 100
Reduce処理で、商品の平均を算出する
MapReduceの問題点(1)
• 分散処理が簡単になったとはいえ、それでも処理の実装はかなり大変 – Java で書かなければいけない – 現実には複数のMapReduceを組み合わせて一つ
の処理を実現するため、設計が難しい
MapReduce を基盤としたスクリプト言語・上位アプリケーションの出現
MapReduce を基盤としたツール群
MapReduce
Hive
Pig Mahout
Oozie
Apache Hive とは
• SQLライクなMapReduce用クエリ言語 • RDBMSにメタデータを管理するため、テーブ
ルスキーマやそれらに対するアクセス権なども設定可能
• 非常にユーザ数が多く、多数のBI/DWHベンダがHiveからのアクセスをサポートするようになった
Hive実行の仕組み クエリ: SELECT * FROM …
Hive
MRジョブ1 MRジョブ3
MRジョブ2
メタストアDB
クエリをMapReduceのワークフローに分解する ( = コンパイルする)
DBスキーマの情報はメタストアDBで管理する
Hiveのアーキテクチャ
HDFS DN
MapReduce Slave (Container or TT)
HBase HDFS DN
MapReduce Slave (Container or TT)
HBase HDFS DN
MapReduce Slave (Container or TT)
HBase
SQL App
HiveQL とインタフェース メタデータとスケジューラ
HDFS NN Hive Metastore YARN MRv1
Query Exec Engine
Compiler
Hiveのアーキテクチャ
HDFS DN
MapReduce Slave (Container or TT)
HBase HDFS DN
MapReduce Slave (Container or TT)
HBase HDFS DN
MapReduce Slave (Container or TT)
HBase
SQL App
HiveQL とインタフェース メタデータとスケジューラ
HDFS NN Hive Metastore YARN MRv1
Query Exec Engine
Compiler
クエリを解析し、 メタストアにアクセスして必要な情報を集め、 MapReduce ジョブとして実行計画を作成する
Hiveのアーキテクチャ
HDFS DN
MapReduce Slave (Container or TT)
HBase HDFS DN
MapReduce Slave (Container or TT)
HBase HDFS DN
MapReduce Slave (Container or TT)
HBase
SQL App
HiveQL とインタフェース メタデータとスケジューラ
HDFS NN Hive Metastore YARN MRv1
Query Exec Engine
Compiler
通常のMapReduceフレームワークを 用いてジョブを実行していく
Hive アーキテクチャ詳細
MapReduceの問題点(2)
• 高レイテンシ – 小さいジョブを実行しても数十秒かかる – 十分単位で処理時間がかかることもザラ
• すぐに結果がほしいユーザのニーズに合わない
MapReduce を使わない低レイテンシ処理のための基盤が必要になった
Impala(再掲)
• Cloudera が開発したオープンソースの低レイテンシ・分析特化型クエリ実行基盤
• データサイエンティストが使うことを想定している – あれこれと試行錯誤するときに、すぐに結果がほ
しい – 分析用途:読み込みのみで書き込み処理は基本
的に不要
Impalaのアーキテクチャ
HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase
ローカルダイレクト読み込み
ODBC
SQL App
HiveQL とインタフェース メタデータとスケジューラ
HDFS NN Hive Metastore YARN State
Store
Impalaのアーキテクチャ
HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase
ローカルダイレクト読み込み
ODBC
SQL App
HiveQL とインタフェース メタデータとスケジューラ
HDFS NN Hive Metastore YARN State
Store Hive と同じクエリをそのまま投げる
(一部制限あり)
Impalaのアーキテクチャ
HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase
ローカルダイレクト読み込み
ODBC
SQL App
HiveQL とインタフェース メタデータとスケジューラ
HDFS NN Hive Metastore YARN State
Store
メタデータを取得して 実行計画を作成する
Impalaのアーキテクチャ
HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase
ローカルダイレクト読み込み
ODBC
SQL App
HiveQL とインタフェース メタデータとスケジューラ
HDFS NN Hive Metastore YARN State
Store
他のノードと協調して分散処理を行う
Impalaのアーキテクチャ
HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase
ローカルダイレクト読み込み
ODBC
SQL App
HiveQL とインタフェース メタデータとスケジューラ
HDFS NN Hive Metastore YARN State
Store
ローカルのデータを直で読んで クエリを実行
Impalaのアーキテクチャ
HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase HDFS DN
Query Exec Engine
Query Coordinator
Query Planner
HBase
ローカルダイレクト読み込み
ODBC
SQL App
HiveQL とインタフェース メタデータとスケジューラ
HDFS NN Hive Metastore YARN State
Store
結果は最初のノードに集約 インメモリに置いたまま転送
実際に Impala はどれくらい速いのか? (1) 37signals
処理内容 Impala Hive MySQL
5.2GB HAProxyログ -‐ リクエスト数上位のIPアドレス
3.1 65.4 146
5.2GB HAProxyログ -‐ リクエスト時間上位のIPアドレス
3.3 65.2 164
800MB rails ログ -‐ 最も遅いアカウント 1.0 33.2 48.1
800MB rails ログ -‐ 最もDBの実行時間の長いパス
1.1 33.7 49.6
8GB ページビューテーブル -‐ 日次ページビューとユニークビジター
22.4 92.2 180
単位: 秒 URL: hjp://37signals.com/svn/posts/3315-‐how-‐i-‐came-‐to-‐love-‐big-‐data-‐or-‐at-‐least-‐acknowledge-‐its-‐existence
実際に Impala はどれくらい速いのか? (2) @sudabon さんの評価
処理内容 Impala Hive
非圧縮8.8GB(GZip 600MB) + RCFile SELECT * FROM table_name WHERE column = ‘xxxx’;
-‐ 60.574
非圧縮8.8GB(Snappy 1.5GB) + SequenceFile SELECT * FROM table_name WHERE column = ‘xxxx’;
14.679 -‐
単位: 秒 URL: hjp://www.slideshare.net/sudabon/cloudera-‐impalahive-‐14995751
実際に Impala はどれくらい速いのか? (3) @GedowFather さんの評価(仮)
処理内容 Impala Hive
17MB 45,000行 GROUP BY & ORDER BY 7 63
17MB 45,000行 COUNT 1 34
3.1GB 700万行 15ファイル COUNT(distnct xxx)
27 50
6GB 700万行 JOIN 20MB 5万行 GROUP BY, ORDER BY sum()
56 132
単位: 秒 URL: hjp://togejer.com/li/408008
サポート済みの Impala の機能(0.2時点)
• Cloudera Manager からインストール可能 • Hue から操作可能 • ODBC ドライバを使って操作可能(一部制限あ
り) • データの選択、追加、挿入 • 複数ユーザからの同時アクセス • Kerberos 認証 • パーティション
未サポートの Impala の機能(0.2時点)
• Trevni, RCFile のサポート • ストリームデータの処理 • データの削除 • データの変換 • インデックス • YARN対応 • 全文検索 • 耐障害性 • Hive SerDe • Hive UDF • テーブル・カラムレベルの認証 • データ暗号化 • ウィンドウ関数 • JDBCドライバ • Avroサポート • Joinの最適化
よくある質問(1)
• もうHiveいらないんじゃね? – 違います。HiveはUDFが使える、MRを使うので耐
障害性がある、などなど多くの利点があります
Hive と Impala Hive Impala
クエリ言語 HiveQL HiveQL
メタストア Hiveメタストア Hiveメタストア
ジョブ実行基盤 MapReduce 独自
レイテンシ 高 低
ワークロード read/write read only
ジョブの耐障害性 ◯(MapReduce) ☓(失敗したらやり直し)
UDF ◯ ☓
用途 パイプラインETL データサイエンティストによる分析
よくある質問(2)
• Impalaってどういう人が使うの? – 現時点ではデータサイエンティストのためのツー
ルです。つまり、データを色々いじって試行錯誤する人のためのツール
– Impalaで色々試して、よさげなクエリがあったらHiveで定期ジョブとして実行、というのがパターン
よくある質問(3)
• impalad が落ちたらどうなるの? – クエリが全部こけます – どうせ実行に数秒から数十秒しかかからないの
で流し直してください
• JOINのサイズ制限はあるの? – 現バージョンでは、一番左のテーブル以外は実
行したノードのメモリに収まる必要がある – GA時には全ノードのメモリ総量を使えるようにす
る予定
試してみたい、という方へ
• Impala デモVM(1.5GBぐらい) – hjps://ccp.cloudera.com/display/SUPPORT/Cloudera's+Impala+Demo+VM
• ドキュメント – hjps://ccp.cloudera.com/display/IMPALA10BETADOC/Cloudera+Impala+1.0+Beta+Documentaton
• github ソースコード – hjps://github.com/cloudera/impala
Impala の情報源
• Cloudera の @kernel023 が日本語・英語のImpala情報をまとめていますのでそちらを見てください – hjp://linux.wwing.net/WordPress/
おしまい