39
Cloudera Impala 低レイテンシクエリエンジン 2012/11/24 @shiumachi

Cloudera Impala #pyfes 2012.11.24

Embed Size (px)

DESCRIPTION

#pyfes 2012.11 で発表した、Impala についての概要資料です。

Citation preview

Page 1: Cloudera Impala #pyfes 2012.11.24

Cloudera Impala低レイテンシクエリエンジン

2012/11/24  @shiumachi  

Page 2: Cloudera Impala #pyfes 2012.11.24

アジェンダ  

•  Impalaとは  •  Hadoop、Hive、そしてImpala  •  どれくらい速いの?  •  Impala  と  Hive  の違い  

Page 3: Cloudera Impala #pyfes 2012.11.24

お前誰よ?  

•  Sho  Shimauchi    (  @shiumachi  )  •  Cloudera  の問い合わせ担当  •  現在仕事中です(今ここでしゃべるために20

分だけ会議から抜けてきた)  

Page 4: Cloudera Impala #pyfes 2012.11.24

Impala  

•  Cloudera  が開発したオープンソースの低レイテンシ・分析特化型クエリ実行基盤  

•  Google  Dremel,  Google  F1  などにインスパイアされて開発された  –  Impala  作者の  Marcel  Kornacker  は  Google  F1  の開

発エンジニア    •  データサイエンティストが使うことを想定している  – あれこれと試行錯誤するときに、すぐに結果がほしい  – 分析用途:読み込みのみで書き込み処理は基本的に

不要  

Page 5: Cloudera Impala #pyfes 2012.11.24

なぜImpalaが開発されたのか?  

•  Hadoop  (MapReduce)  だと高レイテンシで、すぐに結果が欲しくても処理に時間がかかる  

•  Hive  のように手軽に使えるSQLのインタフェースを持ち、かつ低レイテンシのエンジンが必要になった  

そもそもHadoop/MapReduce/Hive  って何?  

Page 6: Cloudera Impala #pyfes 2012.11.24

Apache  MapReduce  とは?  •  バッチ処理を分散して行うシステム  •  Hadoop  のコアコンポーネントの一つ  •  フレームワークの中で処理の信頼性を担保して

いるので、開発者はアプリケーションロジックのみに集中してコードを書ける  

•  MR  が提供するもの  – 処理の並列化  – 耐障害性  – ジョブ監視のための基盤  – 開発者のための抽象化されたインタフェース(map  +  reduce)  

Page 7: Cloudera Impala #pyfes 2012.11.24

MapReduce(1)  Map処理  

Mapper  

Mapper  

Mapper  

商品   価格  

りんご   100  

みかん   200  

ぶどう   300  

りんご,  100  

みかん,  200  

ぶどう,  300  

入力データに対して計算処理し、<キー,  値>の形式に変換する  

ここでの処理は「何もせずそのまま出力」  

HDFS上のデータ  複数のブロックに分割されていて

も、分割されたまま実行可能  

Page 8: Cloudera Impala #pyfes 2012.11.24

MapReduce(1)  Map処理  

Mapper  

Mapper  

Mapper  

商品   価格  

りんご   200  

なし   400  

いちご   100  

りんご,  100  

みかん,  200  

ぶどう,  300  

りんご,  200  

なし,  400  

いちご,  100  

他のMapperでも同様に実行  このMapperは同一サーバで複

数稼働しても構わない  

商品   価格  

りんご   300  

みかん   400  

なし   100  

りんご,  300  

みかん,  400  

なし,  100  

Page 9: Cloudera Impala #pyfes 2012.11.24

MapReduce(2)  Shuffle処理  

Mapper  

Mapper  

Mapper  

りんご,  100  

みかん,  200  

ぶどう,  300  

りんご,  200  

なし,  400  

いちご,  100  

りんご,  300  

みかん,  400  

なし,  100  

Reducer  

Reducer  

りんご,  [100,  200,  300]  

Map出力の中で同じキーを持つデータは一ヶ所のReducerにまとめる  

この時点ではまとめるだけで計算はしない  

Page 10: Cloudera Impala #pyfes 2012.11.24

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を実行しないケースもある  

Page 11: Cloudera Impala #pyfes 2012.11.24

MapReduce(3)  Reduce処理  

Reducer  

Reducer  

りんご,  [100,  200,  300]  

みかん,  [200,  300]  

ぶどう,  [300]  

なし,  [400,  100]  

いちご,  [100]  

りんご,  200  

みかん,  250  

ぶどう,  300  

なし,  250  

いちご,  100  

Reduce処理で、商品の平均を算出する  

Page 12: Cloudera Impala #pyfes 2012.11.24

MapReduceの問題点(1)  

•  分散処理が簡単になったとはいえ、それでも処理の実装はかなり大変  –  Java  で書かなければいけない  – 現実には複数のMapReduceを組み合わせて一つ

の処理を実現するため、設計が難しい  

MapReduce  を基盤としたスクリプト言語・上位アプリケーションの出現  

Page 13: Cloudera Impala #pyfes 2012.11.24

MapReduce  を基盤としたツール群  

MapReduce  

Hive  

Pig   Mahout  

Oozie  

Page 14: Cloudera Impala #pyfes 2012.11.24

Apache  Hive  とは  

•  SQLライクなMapReduce用クエリ言語  •  RDBMSにメタデータを管理するため、テーブ

ルスキーマやそれらに対するアクセス権なども設定可能  

•  非常にユーザ数が多く、多数のBI/DWHベンダがHiveからのアクセスをサポートするようになった  

Page 15: Cloudera Impala #pyfes 2012.11.24

Hive実行の仕組み  クエリ:  SELECT  *  FROM  …    

Hive  

MRジョブ1   MRジョブ3  

MRジョブ2  

メタストアDB  

クエリをMapReduceのワークフローに分解する  (  =  コンパイルする)  

DBスキーマの情報はメタストアDBで管理する  

Page 16: Cloudera Impala #pyfes 2012.11.24

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  

Page 17: Cloudera Impala #pyfes 2012.11.24

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  ジョブとして実行計画を作成する  

Page 18: Cloudera Impala #pyfes 2012.11.24

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フレームワークを  用いてジョブを実行していく  

Page 19: Cloudera Impala #pyfes 2012.11.24

Hive  アーキテクチャ詳細  

Page 20: Cloudera Impala #pyfes 2012.11.24

MapReduceの問題点(2)  

•  高レイテンシ  – 小さいジョブを実行しても数十秒かかる  – 十分単位で処理時間がかかることもザラ  

•  すぐに結果がほしいユーザのニーズに合わない  

MapReduce  を使わない低レイテンシ処理のための基盤が必要になった  

Page 21: Cloudera Impala #pyfes 2012.11.24

Impala(再掲)  

•  Cloudera  が開発したオープンソースの低レイテンシ・分析特化型クエリ実行基盤  

•  データサイエンティストが使うことを想定している  – あれこれと試行錯誤するときに、すぐに結果がほ

しい  – 分析用途:読み込みのみで書き込み処理は基本

的に不要  

Page 22: Cloudera Impala #pyfes 2012.11.24

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  

Page 23: Cloudera Impala #pyfes 2012.11.24

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  と同じクエリをそのまま投げる  

(一部制限あり)  

Page 24: Cloudera Impala #pyfes 2012.11.24

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  

メタデータを取得して  実行計画を作成する  

Page 25: Cloudera Impala #pyfes 2012.11.24

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  

他のノードと協調して分散処理を行う  

Page 26: Cloudera Impala #pyfes 2012.11.24

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  

ローカルのデータを直で読んで  クエリを実行  

Page 27: Cloudera Impala #pyfes 2012.11.24

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  

結果は最初のノードに集約  インメモリに置いたまま転送  

Page 28: Cloudera Impala #pyfes 2012.11.24

実際に 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  

Page 29: Cloudera Impala #pyfes 2012.11.24

実際に 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  

Page 30: Cloudera Impala #pyfes 2012.11.24

実際に 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  

Page 31: Cloudera Impala #pyfes 2012.11.24

サポート済みの  Impala  の機能(0.2時点)  

•  Cloudera  Manager  からインストール可能  •  Hue  から操作可能  •  ODBC  ドライバを使って操作可能(一部制限あ

り)  •  データの選択、追加、挿入  •  複数ユーザからの同時アクセス  •  Kerberos  認証  •  パーティション  

Page 32: Cloudera Impala #pyfes 2012.11.24

未サポートの  Impala  の機能(0.2時点)  

•  Trevni,  RCFile  のサポート  •  ストリームデータの処理  •  データの削除  •  データの変換  •  インデックス  •  YARN対応  •  全文検索  •  耐障害性  •  Hive  SerDe  •  Hive  UDF  •  テーブル・カラムレベルの認証  •  データ暗号化  •  ウィンドウ関数  •  JDBCドライバ  •  Avroサポート  •  Joinの最適化  

Page 33: Cloudera Impala #pyfes 2012.11.24

よくある質問(1)  

•  もうHiveいらないんじゃね?  – 違います。HiveはUDFが使える、MRを使うので耐

障害性がある、などなど多くの利点があります  

Page 34: Cloudera Impala #pyfes 2012.11.24

Hive  と  Impala  Hive   Impala  

クエリ言語   HiveQL   HiveQL  

メタストア   Hiveメタストア   Hiveメタストア  

ジョブ実行基盤   MapReduce   独自  

レイテンシ   高   低  

ワークロード   read/write   read  only    

ジョブの耐障害性   ◯(MapReduce)   ☓(失敗したらやり直し)  

UDF   ◯   ☓  

用途   パイプラインETL   データサイエンティストによる分析  

Page 35: Cloudera Impala #pyfes 2012.11.24

よくある質問(2)  

•  Impalaってどういう人が使うの?  – 現時点ではデータサイエンティストのためのツー

ルです。つまり、データを色々いじって試行錯誤する人のためのツール  

–  Impalaで色々試して、よさげなクエリがあったらHiveで定期ジョブとして実行、というのがパターン  

Page 36: Cloudera Impala #pyfes 2012.11.24

よくある質問(3)  

•  impalad  が落ちたらどうなるの?  – クエリが全部こけます  – どうせ実行に数秒から数十秒しかかからないの

で流し直してください  

•  JOINのサイズ制限はあるの?  – 現バージョンでは、一番左のテーブル以外は実

行したノードのメモリに収まる必要がある  – GA時には全ノードのメモリ総量を使えるようにす

る予定  

Page 37: Cloudera Impala #pyfes 2012.11.24

試してみたい、という方へ  

•  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  

Page 38: Cloudera Impala #pyfes 2012.11.24

Impala  の情報源  

•  Cloudera  の @kernel023  が日本語・英語のImpala情報をまとめていますのでそちらを見てください  – hjp://linux.wwing.net/WordPress/    

Page 39: Cloudera Impala #pyfes 2012.11.24

おしまい