Introduction to Impala
~Hadoop用のSQLエンジン~
Cloudera株式会社 カスタマーオペレーションズエンジニア
小林大輔
2013 1月21日
• 小林 大輔 (@daisukebe_)
• Cloudera株式会社
• カスタマーオペレーションズエンジニアとして
  テクニカルサポート業務を担当
• email: daisuke@cloudera.com
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


         Hive           Oozie

   Pig                          Mahout




                MapReduce
Apache Hive
• SQLライクなMapReduce用クエリ言語
• メタデータを保持することで、テーブルスキーマや個々
  のデータに対するアクセス権なども設定可能
• ユーザー数が多く、多数のBI/DWHベンダーがHiveからの
  アクセスをサポートするようになった
Hiveのアーキテクチャ
HiveQL とインタフェース
                                           メタデータとスケジューラ
      SQL App                    Hive
                               Metastore    YARN    MRv1     HDFS NN
     Compiler

 Query Exec Engine




MapReduce Slave      MapReduce Slave               MapReduce Slave
(Container or TT)    (Container or TT)             (Container or TT)


HDFS DN   HBase      HDFS DN   HBase               HDFS DN   HBase
Hiveのアーキテクチャ
HiveQL とインタフェース
                                           メタデータとスケジューラ
      SQL App                    Hive
                               Metastore    YARN    MRv1     HDFS NN
     Compiler

 Query Exec Engine                   クエリを解析し、
                          メタストアにアクセスして必要な情報を集め、
                          MapReduce ジョブとして実行計画を作成する



MapReduce Slave      MapReduce Slave               MapReduce Slave
(Container or TT)    (Container or TT)             (Container or TT)


HDFS DN   HBase      HDFS DN   HBase               HDFS DN   HBase
Hiveのアーキテクチャ
HiveQL とインタフェース
                                           メタデータとスケジューラ
   通常のMapReduceフレームワークを
    SQL App                      Hive
    用いてジョブを実行していく              Metastore    YARN    MRv1     HDFS NN
    Compiler

 Query Exec Engine




MapReduce Slave      MapReduce Slave               MapReduce Slave
(Container or TT)    (Container or TT)             (Container or TT)


HDFS DN   HBase      HDFS DN   HBase               HDFS DN   HBase
MapReduce       (2)

• 高レイテンシ
  • 小さいジョブを実行しても数十秒かかる
  • 数十分単位で処理時間がかかることもよくある
• すぐに結果がほしいユーザーのニーズに合わない




 MapReduceに依存しない、低レイテンシ処理の
 ための基盤を開発するモチベーションとなった
Agenda
•   Impala
•   MapReduce, Hive, そしてImpalaへ
•   Impalaのアーキテクチャ
•   ImpalaとHiveの比較(デモあり)
Impalaのアーキテクチャ

HiveQL とインタフェース                          メタデータとスケジューラ

   SQL App                  Hive
                           メタスト          HDFS NN    Statestore
    ODBC                     ア




   Query Planner      Query Planner           Query Planner
 Query Coordinator   Query Coordinator       Query Coordinator
  Query Executor      Query Executor          Query Executor
 HDFS DN     HBase   HDFS DN     HBase       HDFS DN     HBase

                                            ローカルダイレクト読み込み
Impalaのアーキテクチャ

HiveQL とインタフェース                          メタデータとスケジューラ

   SQL App                  Hive
                           メタスト          HDFS NN    Statestore
    ODBC                     ア




   Query Planner      Query Planner           Query Planner
 Query Coordinator   Query Coordinator       Query Coordinator
  Query Executor      Query Executor          Query Executor
 HDFS DN     HBase   HDFS DN     HBase       HDFS DN     HBase

                                            ローカルダイレクト読み込み
Impalaのアーキテクチャ

HiveQL とインタフェース                          メタデータとスケジューラ

   SQL App                  Hive
                           メタスト          HDFS NN    Statestore
    ODBC                     ア




   Query Planner      Query Planner           Query Planner
 Query Coordinator   Query Coordinator       Query Coordinator
  Query Executor      Query Executor          Query Executor
 HDFS DN     HBase   HDFS DN     HBase       HDFS DN     HBase

                                            ローカルダイレクト読み込み
Impalaのアーキテクチャ: クエリ実行
ODBC/BeeswaxのThrift API経由でSQLリクエストを受信

    SQL App                      Hive と同じクエリをそのまま投げる
                                  Hive
                                メタスト (一部制限あり)Statestore
                                         HDFS NN
     ODBC                          ア

                SQLリクエスト



   Query Planner           Query Planner      Query Planner
  Query Coordinator    Query Coordinator     Query Coordinator
   Query Executor          Query Executor     Query Executor
  HDFS DN     HBase    HDFS DN       HBase   HDFS DN     HBase
Impalaのアーキテクチャ

HiveQL とインタフェース                          メタデータとスケジューラ

   SQL App                  Hive
                           メタスト          HDFS NN    Statestore
   ODBC                      ア
  メタデータを取得して
   実行計画を作成する


   Query Planner      Query Planner           Query Planner
 Query Coordinator   Query Coordinator       Query Coordinator
  Query Executor      Query Executor          Query Executor
 HDFS DN     HBase   HDFS DN     HBase       HDFS DN     HBase

                                            ローカルダイレクト読み込み
Impalaのアーキテクチャ
● 例: Join(結合)とAggregation(集計)のクエリ
        SELECT state, SUM(revenue)
        FROM HdfsTbl h JOIN HbaseTbl b ON (...)
        GROUP BY 1 ORDER BY 2 desc LIMIT 10



   TopN
                                                     Agg
                              TopN
       Agg                                           Hash
                               Agg                   Join
       Hash
       Join                                   Hdfs                    Hbase
                               Exch                         Exch
                                              Scan                     Scan
Hdfs          Hbase         at coordinator   at DataNodes          at region servers
Scan           Scan
Impalaのアーキテクチャ:クエリの実行
コーディネーターはリモートのImpalaデーモンと協調し、
 各フラグメントの実行を開始


    SQL App                Hive
                         メタスト   HDFS NN Statestore
     ODBC             他のノードと協調して分散処理を行う
                            ア




   Query Planner       Query Planner       Query Planner
  Query Coordinator   Query Coordinator   Query Coordinator
   Query Executor      Query Executor      Query Executor
  HDFS DN     HBase   HDFS DN    HBase    HDFS DN    HBase
Impalaのアーキテクチャ:クエリ実行



   SQL App                  Hive
                           メタスト          HDFS NN    Statestore
    ODBC                     ア

              ローカルのデータを直接読みこんで
                   クエリを実行
  Query Planner       Query Planner           Query Planner
 Query Coordinator   Query Coordinator       Query Coordinator
  Query Executor      Query Executor          Query Executor
 HDFS DN     HBase   HDFS DN    HBase        HDFS DN    HBase
Impalaのアーキテクチャ:クエリ実行
Impalaデーモン間に中間結果が渡され、クエリ結果はクライアントへ
  返される


   SQL App                  Hive
                           メタスト 結果は最初のノードに集約
                                   HDFS NN Statestore
    ODBC                     ア   インメモリに置いたまま転送

             クエリ結果


  Query Planner       Query Planner       Query Planner
 Query Coordinator   Query Coordinator   Query Coordinator
  Query Executor      Query Executor      Query Executor
 HDFS DN     HBase   HDFS DN    HBase    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版が公開される予定

•      や             impala-user@cloudera.org

• https://github.com/cloudera/impala
ご清聴ありがとうございました。




       CONFIDENTIAL - RESTRICTED
Introduction to Impala ~Hadoop用のSQLエンジン~ #hcj13w

Introduction to Impala ~Hadoop用のSQLエンジン~ #hcj13w