Evolution of Impala #hcj2014

14,130 views
14,274 views

Published on

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

Published in: Technology
0 Comments
26 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
14,130
On SlideShare
0
From Embeds
0
Number of Embeds
7,506
Actions
Shares
0
Downloads
139
Comments
0
Likes
26
Embeds 0
No embeds

No notes for slide

Evolution of Impala #hcj2014

  1. 1. 1   Evolu(on  of  Impala   Sho  Shimauchi,  Cloudera   2014/07/08  
  2. 2. 2   今日のトピック   •  Cloudera  Impala  とは?   •  クエリ言語とユーザビリティ   •  メタデータ管理   •  UDF   •  リソース管理   •  アドミッションコントロール   •  YARN  と  Llama  (ラマ)   •  セキュリティ  (Apache  Sentry)   •  パフォーマンスと最適化   •  HDFS   •  Parquet   •  ロードマップ  
  3. 3. 3   Who  am  I?   •  嶋内 翔(しまうち しょう)   •  プロアクティブサポートエンジニア   •  2011年4月にClouderaの最初の日本人社員として入 社   •  email:  sho@cloudera.com   •  twiUer:  @shiumachi  
  4. 4. 4   Cloudera  Impala  
  5. 5. 5   Cloudera  Impala  とは?   •  Hadoop  クラスタのための  MPP  SQL  クエリエンジン   •  ハードウェア性能を最大に引き出すためネイティブ コードで記述   •  オープンソース   •  hUp://impala.io/   •  Cloudera  /  MapR  /  Amazon  がサポートを提供   •  歴史   •  2012/10  パブリックベータリリース   •  2013/04  Impala  1.0  リリース   •  現在のバージョンは  Impala  1.3.1  
  6. 6. 6   Impala  は使うのが簡単   •  HDFS  や HBase  上のデータに対し、仮想的なビューと してテーブルを作成することができる   •  スキーマは  Hive  メタストアに保存   •  ODBC  /  JDBC  で接続可能   •  Kerberos  /  LDAP  で認証可能   •  標準SQLを実行可能   •  ANSI  SQL-­‐92  ベース   •  SELECT  とバルクインサートに限定   •  相関サブクエリは未実装  (Impala  2.0  で実装予定)   •  UDF  /  UDAF  に対応  
  7. 7. 7   Impala  のアーキテクチャ   •  分散サービス   •  コンポーネント   •  impalad   •  statestore   •  catalogd   •  インタフェース   •  impala-­‐shell   •  ODBC  /  JDBC  
  8. 8. 8   impalad   •  データのあるノード全てで動作する   •  どの impalad  でもユーザからのクエリを受け付けるこ とが可能   •  クエリを受け付ける impalad  は、通常「コーディネータノー ド」と呼ばれる   •  コーディネータノードは、リモートの impalad  上での 計算処理を開始する  
  9. 9. 9   statestore   •  ステートリポジトリ   •  ネームサービス   •  クラスタ毎に1ノード   •  ソフトステート   •  起動時に全ての impalad  はstatestoreに登録する   •  impalad  への接続が切れたとき、statestore  はその情報を 他の impalad  へ周知する   •  Impala  サービスは statestore  がなくても動作継続する  
  10. 10. 10   catalogd  (Impala  1.2)   •  Impala  SQL  からクラスタ内の全ノードにメタデータの 変更をリレーする   •  クラスタ毎に1ノード   •  詳細は後述  
  11. 11. 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  
  12. 12. 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  リクエスト   プランナーはプランフラグメン トの集合に変換する   クライアント・インタフェース  
  13. 13. 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上 での計算処理を開始する   クライアント・インタフェース  
  14. 14. 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など)   クライアント・インタフェース  
  15. 15. 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は計算結果を互いに交 換し、他の計算処理を実行   中間結果はストリームで転送される   クライアント・インタフェース  
  16. 16. 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   コーディネータは最後の計算を実行 し、クライアントに結果を返す  
  17. 17. 17   クエリ計画   •  2フェーズプロセス   •  シングルノードプラン   •  クエリ演算子の  lee  deep  tree   •  分散並列処理のためにプランフラグメントに分割する   •  スキャンローカリティを最大化する   •  データの移動を最小化する  
  18. 18. 18   クエリ計画   FRAGMENT  2   HDFS  SCAN   HASH  JOIN   AGGREGATION   FRAGMENT  1   EXCHANGE   AGGREGATION   COORDINATOR   FRAGMENT   TOP-­‐N   EXCHANGE   AGGREGATION  
  19. 19. 19   クエリ実行   •  インメモリでの実行   •  JOINの右側の入力をメモリにキャッシュし、結果を集約し ていく   •  例:  1TB  のテーブルを  JOIN  する。200列のうち2列を参照し、 行の10%を用いる   •  1024  *  (2  /  200)  *  0.1  =  1GB  を、全てのノード上のメモリにキャッ シュする必要がある   •  データはストリームで送信される   •  ディスクに書き出されることはない  
  20. 20. 20   クエリ実行:  ランタイムコード生成   •  LLVMを使って、クエリのランタイム依存の部分をJITコ ンパイルする   •  クエリのカスタムコーディングと同じ効果がある   •  分岐の削除   •  定数、オフセット、ポインタなどのプロパゲート   •  インライン関数呼び出し   •  最近のCPUのための実行最適化(命令パイプライン)  
  21. 21. 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  
  22. 22. 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  
  23. 23. 23   クエリ言語とユーザビリティ  
  24. 24. 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  はコスト高の処理   •  このクエリにより指定したテーブルだけに実行することが可能  
  25. 25. 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)   }  
  26. 26. 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  
  27. 27. 27   リソース管理  
  28. 28. 28   アドミッションコントロール  (Impala  1.3)   •  高速・軽量なリソース管理機構   •  並列ワークロードに対するリソースの過剰利用を避 ける   •  設定した限界値を超えたらクエリはキューイングされる   •  全 impalad  で動作   •  SPOF  なし  
  29. 29. 29   アドミッションコントロール (Impala  1.3)   •  設定可能なリソースプール   •  クエリの最大並列実行数   •  キューの最大長   •  プールのメモリ総量   •  設定方法は2通り   •  Cloudera  Manager  の「動的リソースプール」   •  fair-­‐scheduler.xml  と  llama-­‐site.xml  を手動編集する  
  30. 30. 30   アドミッションコントロールの例   並列実行可能な   クエリ数   クエリキューの   最大長   100   10   10   1   最大メモリ   1000  GB   100  GB   Group  A   Group  B  
  31. 31. 31   アドミッションコントロール (Impala  1.3)   •  制限は「ソフトリミット」   •  実行可能クエリ数の最大値を少しだけオーバーすること がある   •  クエリを statestore  のハートビート間隔(500ms)より速い間 隔で送信していると発生する可能性がある  
  32. 32. 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  
  33. 33. 33   セキュリティ  
  34. 34. 34  34   Apache  Sentry   •  Apache  Incubatorプロジェクト   •  オープンソースで開発   •  Oracle社やCloudera社が主導   •  データベース、テーブル、ビュー、列/行   の粒度でアクセス制御   •  HiveやImpalaなど幅広いHadoop   エコシステムで利用可能  
  35. 35. 35   パフォーマンスと最適化  
  36. 36. 36   HDFS  ショートサーキットリード   •  ローカルディスクから読み込むときにデータノードのプロ トコルをバイパスする   •  ディスクあたり 100+  MB  /  s  の読み込み性能を出せる   Impalad   DataNode   OS  
  37. 37. 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>’  
  38. 38. 38   Parquet   •  Hadoop  用カラムナストレージ   •  多くの Hadoop  エコシステムがサポートしている   •  Impala,  Hive,  Pig,  MapReduce,  Cascading   •  高圧縮かつ高スキャン効率   •  TwiUer  と  Cloudera  の共同開発   •  2014年5月にApache  インキュベータプロジェクトに なった   •  hUp://incubator.apache.org/projects/parquet.html   •  現在のプロジェクトページ:  hUp://parquet.io/  
  39. 39. 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  
  40. 40. 40   Parquet:  ストレージ効率  
  41. 41. 41   Parquet:  スキャン効率  
  42. 42. 42   COMPUTE  STATS  (Impala  1.2.2)   •  テーブルや列の統計情報を収集し、メタストアに保存 する   •  ETL処理の終わりには必ず  COMPUTE  STATS  を実行 しましょう   •  コストベースのJOIN順序の最適化   •  JOINクエリの性能改善とメモリ使用量削減   •  ParquetテーブルへのINSERTの性能改善とメモリ使用量削 減   •  Impala  1.4  では  COMPUTE  STATS  自体が高速化  
  43. 43. 43   Impala  ベンチマーク   •  TPC-­‐DS  を使ったベンチマーク   •  21種類のクエリ   •  15TB  スケールファクタ―データセット   •  21ノードクラスタ   •  Impala  で  TPC-­‐DS  を試したい人は以下のツールを使 うと楽   •  hUps://github.com/cloudera/impala-­‐tpcds-­‐kit  
  44. 44. 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  
  45. 45. 45   Impala  ベンチマーク:  シングルユーザ   •  クエリをグルー プ分けして幾何 平均をとった   •  インタラクティ ブ     •  レポート   •  高度な分析   •  Impala  は次点の Sharkに比べて約5倍 高速  
  46. 46. 46   Impala  ベンチマーク:  シングルユーザ   •  クエリをグルー プ分けして幾何 平均をとった   •  インタラクティ ブ     •  レポート   •  高度な分析   •  Impala  は次点の Sharkに比べて約5倍 高速   17   34   62   49   193   327   Shark  /  ORC  (HDFS)   Impala  
  47. 47. 47   Impala  ベンチマーク:  マルチユーザ   •  10並列のクエリ   •  「インタラク ティブ」クエリ   •  10ユーザでの並 列クエリだと ImpalaはPrestoよ り19.1倍高速  
  48. 48. 48   Impala  ベンチマーク:  マルチユーザ   •  10並列のクエリ   •  「インタラク ティブ」クエリ   •  10ユーザでの並 列クエリだと ImpalaはPrestoよ り19.1倍高速   Impala   1クエリ:    15   10並列:    29   Presto   1クエリ:  64   10並列:  555  
  49. 49. 49   Impala  ベンチマーク:  マルチユーザ  
  50. 50. 50   Impala  ベンチマーク:  マルチユーザ   x21.6  beCer  than   Presto     Impala:  863   Presto:  40  
  51. 51. 51   Impala  ベンチマーク:  マルチユーザ  
  52. 52. 52   Impala  ベンチマーク:  マルチユーザ   Impala   81秒   Presto   1858秒  
  53. 53. 53   Impala  ベンチマーク:  vs.  DBMS-­‐Y  
  54. 54. 54   Hadoopにおけるスケーラビリティ   • Hadoopにはリニアスケーラビリティがある   •  クラスタにノードを追加すれば、それに比 例して性能が向上する   •  性能増はあらゆるワークロードに適用され る   • EDWワークロードにおける評価指標   •  レスポンスタイム   •  並列性とクエリスループット   •  データサイズ  
  55. 55. 55   Hadoopにおけるスケーラビリティ   •  Impalaのスケーラビリティ評価結果   •  クラスタ:  18  ノードと  36  ノード   •  データセット:  15TB  と  30TB  の  TPC-­‐DS  データセット   •  クエリ:  6種類の「インタラクティブ」TPC-­‐DSクエリ   •  並列性:  10  クエリと 20  クエリ  (並列性以外のテストでは 1 クエリ)  
  56. 56. 56   Impala  のスケーラビリティ:  レスポンスタイ ム  
  57. 57. 57   Impala  のスケーラビリティ:  並列性   (10  vs.  20  ユーザ)  
  58. 58. 58   Impala  のスケーラビリティ:  データサイズ   (15TB  vs.  30TB  データセット)  
  59. 59. 59   ロードマップ  
  60. 60. 60   ロードマップ   •  Impala  1.4  (2014年夏)   •  HDFS  キャッシング  DDL   •  COMPUTE  STATS  の高速化   •  LIMIT  なしの ORDER  BY   •  DECIMAL(<precision>,  <scale>)   •  ブロードキャストJOIN用のブルームフィルタ   •  Llama  が  produc(on  ready  になる   •  EDW  システム用の追加のビルトイン   •  そして……さらに高速化!  
  61. 61. 61   ロードマップ   •  Impala  2.0  (2014年下半期)   •  SQL  2003  準拠の分析ウィンドウ関数   •  LEAD(),  LAG(),  etc.   •  相関サブクエリ   •  ハッシュテーブルをディスクに書き出せるようになる   •  任意のサイズのテーブルをJOIN、集約することが可能に   •  Nested  data  type   •  map,  struct,  and  array  
  62. 62. 62   まとめ  
  63. 63. 63   Cloudera  Impala   •  Hadoop  クラスタのためのオープンソースの高速SQL エンジン   •  他の類似ソフトに比べて圧倒的に高速   •  リソース管理、セキュリティなど機能も豊富   Hadoop上の分析SQLエンジンは   Cloudera  Impala  を使いましょう   hUp://impala.io/  
  64. 64. 64   Cloudera  Impala  の⽇日本語フリーブック •  オライリーの「インパラ本」、日本語PDF版が無償公開されました! •  http://www.oreilly.co.jp/books/9784873116723/ •  Cloudera  の John  Russell  著 •  Hadoop、HBase、Hadoopオペレーション、 プログラミングHiveなどを翻訳された 玉川竜司さんが翻訳! 「これまでClouderaの皆 さんにご尽力いただいた 翻訳レビューへの感謝の 気持ちとして、Cloudera World Tokyo開催のお祝 いに翻訳寄贈します!」
  65. 65. 65  

×