evolution of impala #hcj2014

65
1 Evolu(on of Impala Sho Shimauchi, Cloudera 2014/07/08

Upload: cloudera-japan

Post on 28-May-2015

9.278 views

Category:

Technology


1 download

DESCRIPTION

Hadoop Conference Japan 2014 で発表した、Impala の資料です。

TRANSCRIPT

Page 1: Evolution of Impala #hcj2014

1  

Evolu(on  of  Impala  Sho  Shimauchi,  Cloudera  2014/07/08  

Page 2: Evolution of Impala #hcj2014

2  

今日のトピック  

•  Cloudera  Impala  とは?  •  クエリ言語とユーザビリティ  

•  メタデータ管理  •  UDF  

•  リソース管理  •  アドミッションコントロール  •  YARN  と  Llama  (ラマ)  

•  セキュリティ  (Apache  Sentry)  •  パフォーマンスと最適化  

•  HDFS  •  Parquet  

•  ロードマップ  

Page 3: Evolution of Impala #hcj2014

3  

Who  am  I?  

•  嶋内 翔(しまうち しょう)  •  プロアクティブサポートエンジニア  •  2011年4月にClouderaの最初の日本人社員として入社  

•  email:  [email protected]  •  twiUer:  @shiumachi  

Page 4: Evolution of Impala #hcj2014

4  

Cloudera  Impala  

Page 5: Evolution of Impala #hcj2014

5  

Cloudera  Impala  とは?  

•  Hadoop  クラスタのための  MPP  SQL  クエリエンジン  •  ハードウェア性能を最大に引き出すためネイティブコードで記述  

•  オープンソース  •  hUp://impala.io/  

•  Cloudera  /  MapR  /  Amazon  がサポートを提供  •  歴史  

•  2012/10  パブリックベータリリース  •  2013/04  Impala  1.0  リリース  •  現在のバージョンは  Impala  1.3.1  

Page 6: Evolution of Impala #hcj2014

6  

Impala  は使うのが簡単  

•  HDFS  や HBase  上のデータに対し、仮想的なビューとしてテーブルを作成することができる  •  スキーマは  Hive  メタストアに保存  

•  ODBC  /  JDBC  で接続可能  •  Kerberos  /  LDAP  で認証可能  •  標準SQLを実行可能  

•  ANSI  SQL-­‐92  ベース  •  SELECT  とバルクインサートに限定  •  相関サブクエリは未実装  (Impala  2.0  で実装予定)  •  UDF  /  UDAF  に対応  

Page 7: Evolution of Impala #hcj2014

7  

Impala  のアーキテクチャ  

•  分散サービス  •  コンポーネント  

•  impalad  •  statestore  •  catalogd  

•  インタフェース  •  impala-­‐shell  •  ODBC  /  JDBC  

Page 8: Evolution of Impala #hcj2014

8  

impalad  

•  データのあるノード全てで動作する  •  どの impalad  でもユーザからのクエリを受け付けることが可能  •  クエリを受け付ける impalad  は、通常「コーディネータノー

ド」と呼ばれる  

•  コーディネータノードは、リモートの impalad  上での計算処理を開始する  

Page 9: Evolution of Impala #hcj2014

9  

statestore  

•  ステートリポジトリ  •  ネームサービス  •  クラスタ毎に1ノード  

•  ソフトステート  •  起動時に全ての impalad  はstatestoreに登録する  •  impalad  への接続が切れたとき、statestore  はその情報を

他の impalad  へ周知する  •  Impala  サービスは statestore  がなくても動作継続する  

Page 10: Evolution of Impala #hcj2014

10  

catalogd  (Impala  1.2)  

•  Impala  SQL  からクラスタ内の全ノードにメタデータの変更をリレーする  

•  クラスタ毎に1ノード  •  詳細は後述  

Page 11: Evolution of Impala #hcj2014

11  

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  /  JDBC  

SQL  App  

クライアント・インタフェース   メタデータ  

Hive  Metastore   HDFS  NN   State  

Store  Catalogd  

Page 12: Evolution of Impala #hcj2014

12  

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  /  JDBC  

SQL  App  

メタデータ  

Hive  Metastore   HDFS  NN   State  

Store  Catalogd  

SQL  リクエスト  プランナーはプランフラグメン

トの集合に変換する  

クライアント・インタフェース  

Page 13: Evolution of Impala #hcj2014

13  

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  /  JDBC  

SQL  App  

メタデータ  

Hive  Metastore   HDFS  NN   State  

Store  Catalogd  

コーディネータはリモートのimpalad上での計算処理を開始する  

クライアント・インタフェース  

Page 14: Evolution of Impala #hcj2014

14  

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  /  JDBC  

SQL  App  

メタデータ  

Hive  Metastore   HDFS  NN   State  

Store  Catalogd  

HDFS  ショートサーキットリードを使って  ローカルダイレクトスキャン、その後計算処理を実行  (集約やハッシュJOINなど)  

クライアント・インタフェース  

Page 15: Evolution of Impala #hcj2014

15  

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  /  JDBC  

SQL  App  

メタデータ  

Hive  Metastore   HDFS  NN   State  

Store  Catalogd  

もしクエリが複雑なら、impaladは計算結果を互いに交換し、他の計算処理を実行  中間結果はストリームで転送される  

クライアント・インタフェース  

Page 16: Evolution of Impala #hcj2014

16  

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  /  JDBC  

SQL  App  

HiveQLとインタフェース   メタデータ  

Hive  Metastore   HDFS  NN   State  

Store  Catalogd  

コーディネータは最後の計算を実行し、クライアントに結果を返す  

Page 17: Evolution of Impala #hcj2014

17  

クエリ計画  

•  2フェーズプロセス  •  シングルノードプラン  

•  クエリ演算子の  lee  deep  tree  

•  分散並列処理のためにプランフラグメントに分割する  •  スキャンローカリティを最大化する  •  データの移動を最小化する  

Page 18: Evolution of Impala #hcj2014

18  

クエリ計画  

FRAGMENT  2  

HDFS  SCAN  

HASH  JOIN  

AGGREGATION  

FRAGMENT  1  

EXCHANGE  

AGGREGATION  

COORDINATOR  FRAGMENT  

TOP-­‐N  

EXCHANGE  

AGGREGATION  

Page 19: Evolution of Impala #hcj2014

19  

クエリ実行  

•  インメモリでの実行  •  JOINの右側の入力をメモリにキャッシュし、結果を集約し

ていく  •  例:  1TB  のテーブルを  JOIN  する。200列のうち2列を参照し、

行の10%を用いる  •  1024  *  (2  /  200)  *  0.1  =  1GB  を、全てのノード上のメモリにキャッ

シュする必要がある  

•  データはストリームで送信される  •  ディスクに書き出されることはない  

Page 20: Evolution of Impala #hcj2014

20  

クエリ実行:  ランタイムコード生成  

•  LLVMを使って、クエリのランタイム依存の部分をJITコンパイルする  

•  クエリのカスタムコーディングと同じ効果がある  •  分岐の削除  •  定数、オフセット、ポインタなどのプロパゲート  •  インライン関数呼び出し  

•  最近のCPUのための実行最適化(命令パイプライン)  

Page 21: Evolution of Impala #hcj2014

21  

What’s  new?  

HCJ  2013  (2013/01/21)  

HCJ  2014  (2014/07/08)  

Impala   0.4  (Beta)  

DDL  (CREATE,  ALTER,  etc.)   No  

JOIN  最適化   No  

分散  JOIN   No  

UDF   No  

JDBC  ドライバ   No  

カラムナファイル  フォーマット   RCFile  

Page 22: Evolution of Impala #hcj2014

22  

What’s  new?  

HCJ  2013  (2013/01/21)  

HCJ  2014  (2014/07/08)  

Impala   0.4  (Beta)   1.3.1  

DDL  (CREATE,  ALTER,  etc.)   No   Yes  

JOIN  最適化   No   Yes  (コストベース)  

分散  JOIN   No   Yes  

UDF   No   Yes  (UDF  /  UDAF)  

JDBC  ドライバ   No   Yes  

カラムナファイル  フォーマット   RCFile   RCFile,  Parquet  

Page 23: Evolution of Impala #hcj2014

23  

クエリ言語とユーザビリティ  

Page 24: Evolution of Impala #hcj2014

24  

メタデータ管理  

•  catalogd  (Impala  1.2)  •  Impala  SQL  からクラスタ内の全ノードにメタデータの変更をリ

レーする  •  クラスタ毎に1ノード  

•  DDL(CREATE  や  DROP  TABLEなど)の後に、  REFRESH  や  INVALIDATE  METADATA  を実行する必要がなくなった  

•  HiveでDDLを実行した場合は引き続き実行が必要  •  INVALIDATE  METADATA  new_table_name  (Impala  1.2.4)    

•  INVALIDATE  METADATA  はコスト高の処理  •  このクエリにより指定したテーブルだけに実行することが可能  

Page 25: Evolution of Impala #hcj2014

25  

UDF  (ユーザ定義関数)  

•  Impala  1.1  /  1.2  からの新機能  •  UDF  と UDAF  をサポート  •  以下のUDFを作成可能  

•  C++  でネイティブコードを書く  •  Java  で書かれた Hive  UDF  をポートする    

•  Python  UDF  も開発中!  •  hUps://github.com/cloudera/impyla  

IntVal  AddUdf  (UdfContext*  context,        const  IntVal&  arg1,        const  IntVal&  arg2)  {    if  (arg1.is_null  ||  arg2.is_null)  {      return  IntVal::null();    }    return  IntVal(arg1.val  +  arg2.val)  

}  

Page 26: Evolution of Impala #hcj2014

26  

HBase  連携  

•  Impala  は HBase  のテーブルに対し  SELECT  や  INSERT  を実行可能  •  ユースケース  

•  巨大なファクトテーブルをImpalaに持ち、より小さいディメンジョンテーブルをHBase  で持つ  

•  高速にインクリメントされるカウンタをHBaseに保存する  •  例:  WebサイトのPVや、SNS  の投稿での投票の数など  

•  非常に幅広い(そして通常は疎な)テーブルをHBaseで持つ  •  例:  オンラインサービスのユーザ情報  

•  1行インサートも可能  •  INSERT  …  VALUES    

Impala  HBase  external  systems  

put   SELECT  *  FROM  hbase_tbl  …  

INSERT  /  INSERT  …  VALUES  get,  scan  

Page 27: Evolution of Impala #hcj2014

27  

リソース管理  

Page 28: Evolution of Impala #hcj2014

28  

アドミッションコントロール  (Impala  1.3)  

•  高速・軽量なリソース管理機構  •  並列ワークロードに対するリソースの過剰利用を避ける  •  設定した限界値を超えたらクエリはキューイングされる  

•  全 impalad  で動作  •  SPOF  なし  

Page 29: Evolution of Impala #hcj2014

29  

アドミッションコントロール (Impala  1.3)  

•  設定可能なリソースプール  •  クエリの最大並列実行数  •  キューの最大長  •  プールのメモリ総量  

•  設定方法は2通り  •  Cloudera  Manager  の「動的リソースプール」  •  fair-­‐scheduler.xml  と  llama-­‐site.xml  を手動編集する  

Page 30: Evolution of Impala #hcj2014

30  

アドミッションコントロールの例  

並列実行可能な  クエリ数  

クエリキューの  最大長  

100   10  

10   1  

最大メモリ  

1000  GB  

100  GB  

Group  A  

Group  B  

Page 31: Evolution of Impala #hcj2014

31  

アドミッションコントロール (Impala  1.3)  

•  制限は「ソフトリミット」  •  実行可能クエリ数の最大値を少しだけオーバーすること

がある  •  クエリを statestore  のハートビート間隔(500ms)より速い間

隔で送信していると発生する可能性がある  

Page 32: Evolution of Impala #hcj2014

32  

YARN  と  Llama  (ラマ)  

•  Llama:  Low  Latency  Applica(on  MAster  •  低レイテンシ・短寿命のクエリで用いるために、粒度の粗いYARNのスケジューリングをよりきめ細かくする  

•  YARNプールごとに長寿命のAMを登録する  •  YARNから割り当てられたリソースを短時間キャッシュする  •  Impala  クエリに高速に再割り当てする  •  YARN  を待つよりもはるかに高速  

•  Impala  1.3  ではベータ版  •  Produc(on  Ready  in  Impala  1.4  

Page 33: Evolution of Impala #hcj2014

33  

セキュリティ  

Page 34: Evolution of Impala #hcj2014

34  34  

Apache  Sentry  

•  Apache  Incubatorプロジェクト  •  オープンソースで開発  •  Oracle社やCloudera社が主導  

• データベース、テーブル、ビュー、列/行  の粒度でアクセス制御  

•  HiveやImpalaなど幅広いHadoop  エコシステムで利用可能  

Page 35: Evolution of Impala #hcj2014

35  

パフォーマンスと最適化  

Page 36: Evolution of Impala #hcj2014

36  

HDFS  ショートサーキットリード  

•  ローカルディスクから読み込むときにデータノードのプロトコルをバイパスする  

•  ディスクあたり 100+  MB  /  s  の読み込み性能を出せる  

Impalad  

DataNode   OS  

Page 37: Evolution of Impala #hcj2014

37  

HDFS  キャッシング  

•  メモリ常駐データへのゼロオーバヘッドアクセス  •  チェックサム計算とデータコピーを回避する  •  新しい  HDFS  API  が  CDH5.0  で導入された  •  Impala  DDL  でキャッシュ指定することが可能 (Impala  1.4)  •  CREATE  TABLE  tbl_name  CACHED  IN  ‘<pool>’  •  ALTER  TABLE  tbl_name  ADD  PARTITION  …  CACHED  IN  ‘<pool>’  

Page 38: Evolution of Impala #hcj2014

38  

Parquet  

•  Hadoop  用カラムナストレージ  •  多くの Hadoop  エコシステムがサポートしている  

•  Impala,  Hive,  Pig,  MapReduce,  Cascading  

•  高圧縮かつ高スキャン効率  •  TwiUer  と  Cloudera  の共同開発  •  2014年5月にApache  インキュベータプロジェクトになった  •  hUp://incubator.apache.org/projects/parquet.html  •  現在のプロジェクトページ:  hUp://parquet.io/  

Page 39: Evolution of Impala #hcj2014

39  

Parquet  のアーキテクチャ  

a   b   c  

a1   b1   c1  

a2   b2   c2  

a3   b3   c3  

a4   b4   c4  

a1   a2   a3   a4   b1   b2   b3   b4   c1   c2   c3   c4  

Row  Group  

column  chunk   column  chunk   column  chunk  

Page 40: Evolution of Impala #hcj2014

40  

Parquet:  ストレージ効率  

Page 41: Evolution of Impala #hcj2014

41  

Parquet:  スキャン効率  

Page 42: Evolution of Impala #hcj2014

42  

COMPUTE  STATS  (Impala  1.2.2)  

•  テーブルや列の統計情報を収集し、メタストアに保存する  

•  ETL処理の終わりには必ず  COMPUTE  STATS  を実行しましょう  •  コストベースのJOIN順序の最適化  •  JOINクエリの性能改善とメモリ使用量削減  •  ParquetテーブルへのINSERTの性能改善とメモリ使用量削

減  

•  Impala  1.4  では  COMPUTE  STATS  自体が高速化  

Page 43: Evolution of Impala #hcj2014

43  

Impala  ベンチマーク  

•  TPC-­‐DS  を使ったベンチマーク  •  21種類のクエリ  •  15TB  スケールファクタ―データセット  •  21ノードクラスタ  

•  Impala  で  TPC-­‐DS  を試したい人は以下のツールを使うと楽  •  hUps://github.com/cloudera/impala-­‐tpcds-­‐kit  

Page 44: Evolution of Impala #hcj2014

44  

Impala  ベンチマーク  

Hardware  

#  of  nodes   21  

CPU   Intel  Xeon  CPU  E5-­‐2630L  0  at  2.00GHz  2  processors  12  cores  

disk   12  disks  932GB  each  OS:  1  disk  HDFS:  11  disks  

memory   348GB    

So>ware  

Impala   1.3  

Hive-­‐on-­‐Tez   13.0  

Shark  (RDD)   0.9.2  

Shark  (HDFS)   0.9.2  

Presto   0.60  

Page 45: Evolution of Impala #hcj2014

45  

Impala  ベンチマーク:  シングルユーザ  

•  クエリをグループ分けして幾何平均をとった  •  インタラクティブ    

•  レポート  

•  高度な分析  

•  Impala  は次点のSharkに比べて約5倍高速  

Page 46: Evolution of Impala #hcj2014

46  

Impala  ベンチマーク:  シングルユーザ  

•  クエリをグループ分けして幾何平均をとった  •  インタラクティブ    

•  レポート  

•  高度な分析  

•  Impala  は次点のSharkに比べて約5倍高速  

17   34   62  49  

193  327  

Shark  /  ORC  (HDFS)  

Impala  

Page 47: Evolution of Impala #hcj2014

47  

Impala  ベンチマーク:  マルチユーザ  

•  10並列のクエリ  

•  「インタラクティブ」クエリ  

•  10ユーザでの並列クエリだとImpalaはPrestoより19.1倍高速  

Page 48: Evolution of Impala #hcj2014

48  

Impala  ベンチマーク:  マルチユーザ  

•  10並列のクエリ  

•  「インタラクティブ」クエリ  

•  10ユーザでの並列クエリだとImpalaはPrestoより19.1倍高速  

Impala  1クエリ:    15  10並列:    29  

Presto  1クエリ:  64  10並列:  555  

Page 49: Evolution of Impala #hcj2014

49  

Impala  ベンチマーク:  マルチユーザ  

Page 50: Evolution of Impala #hcj2014

50  

Impala  ベンチマーク:  マルチユーザ  

x21.6  beCer  than  Presto    

Impala:  863  

Presto:  40  

Page 51: Evolution of Impala #hcj2014

51  

Impala  ベンチマーク:  マルチユーザ  

Page 52: Evolution of Impala #hcj2014

52  

Impala  ベンチマーク:  マルチユーザ  

Impala  81秒  

Presto  1858秒  

Page 53: Evolution of Impala #hcj2014

53  

Impala  ベンチマーク:  vs.  DBMS-­‐Y  

Page 54: Evolution of Impala #hcj2014

54  

Hadoopにおけるスケーラビリティ  

• Hadoopにはリニアスケーラビリティがある  • クラスタにノードを追加すれば、それに比例して性能が向上する  • 性能増はあらゆるワークロードに適用される  

• EDWワークロードにおける評価指標  •  レスポンスタイム  •  並列性とクエリスループット  •  データサイズ  

Page 55: Evolution of Impala #hcj2014

55  

Hadoopにおけるスケーラビリティ  

•  Impalaのスケーラビリティ評価結果  •  クラスタ:  18  ノードと  36  ノード  •  データセット:  15TB  と  30TB  の  TPC-­‐DS  データセット  •  クエリ:  6種類の「インタラクティブ」TPC-­‐DSクエリ  •  並列性:  10  クエリと 20  クエリ  (並列性以外のテストでは 1

クエリ)  

Page 56: Evolution of Impala #hcj2014

56  

Impala  のスケーラビリティ:  レスポンスタイム  

Page 57: Evolution of Impala #hcj2014

57  

Impala  のスケーラビリティ:  並列性  (10  vs.  20  ユーザ)  

Page 58: Evolution of Impala #hcj2014

58  

Impala  のスケーラビリティ:  データサイズ  (15TB  vs.  30TB  データセット)  

Page 59: Evolution of Impala #hcj2014

59  

ロードマップ  

Page 60: Evolution of Impala #hcj2014

60  

ロードマップ  

•  Impala  1.4  (2014年夏)  •  HDFS  キャッシング  DDL  •  COMPUTE  STATS  の高速化  •  LIMIT  なしの ORDER  BY  •  DECIMAL(<precision>,  <scale>)  •  ブロードキャストJOIN用のブルームフィルタ  •  Llama  が  produc(on  ready  になる  •  EDW  システム用の追加のビルトイン  •  そして……さらに高速化!  

Page 61: Evolution of Impala #hcj2014

61  

ロードマップ  

•  Impala  2.0  (2014年下半期)  •  SQL  2003  準拠の分析ウィンドウ関数  

•  LEAD(),  LAG(),  etc.  

•  相関サブクエリ  •  ハッシュテーブルをディスクに書き出せるようになる  

•  任意のサイズのテーブルをJOIN、集約することが可能に  

•  Nested  data  type  •  map,  struct,  and  array  

Page 62: Evolution of Impala #hcj2014

62  

まとめ  

Page 63: Evolution of Impala #hcj2014

63  

Cloudera  Impala  

•  Hadoop  クラスタのためのオープンソースの高速SQLエンジン  

•  他の類似ソフトに比べて圧倒的に高速  •  リソース管理、セキュリティなど機能も豊富  

Hadoop上の分析SQLエンジンは  Cloudera  Impala  を使いましょう  

hUp://impala.io/  

Page 64: Evolution of Impala #hcj2014

64  

Cloudera  Impala  の⽇日本語フリーブック

•  オライリーの「インパラ本」、日本語PDF版が無償公開されました!

•  http://www.oreilly.co.jp/books/9784873116723/•  Cloudera  の John  Russell  著•  Hadoop、HBase、Hadoopオペレーション、

プログラミングHiveなどを翻訳された玉川竜司さんが翻訳!

「これまでClouderaの皆さんにご尽力いただいた翻訳レビューへの感謝の気持ちとして、Cloudera World Tokyo開催のお祝いに翻訳寄贈します!」

Page 65: Evolution of Impala #hcj2014

65