39
Cloudera 株株株株 株株株株株株株株株株株株株株株株株株 株株株株 2013 株 1 株 21 株 Introduction to Impala Hadoop 用用 SQL 用用用用

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

Embed Size (px)

DESCRIPTION

Hadoop Conference Japan 2013 Winter で発表した、Impala の概要についての資料です。

Citation preview

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

Cloudera 株式会社 カスタマーオペレーションズエンジニア小林大輔2013 年 1 月 21 日

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

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

自己紹介

• 小林 大輔 (@daisukebe_)• Cloudera 株式会社• カスタマーオペレーションズエンジニアとして

テクニカルサポート業務を担当• email: [email protected]

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

Agenda

• Impala とは• MapReduce, Hive, そして Impala へ• Impala のアーキテクチャ• Impala と Hive の比較 ( デモあり )

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

Agenda

• Impala とは• MapReduce, Hive, そして Impala へ• Impala のアーキテクチャ• Impala と Hive の比較 ( デモあり )

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

Impala とは

• Cloudera が開発した、低レイテンシ・分析特化型クエリ実行基盤

• Apache ライセンス ( オープンソース )• Google Dremel, Google F1 などにインスパイアされて開発

された• 開発チームの Marcel Kornacker は、 Google F1 の元開発エンジニ

ア • データサイエンティストが使うことを想定して

いる• あれこれと試行錯誤するときに、すぐに結果がほしいケース

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

Impala とは ( 技術的な観点から )

• Hadoop 内部で直接実行される SQL クエリエンジン• Hadoop で広く使われているファイルフォーマットを読み込み• HDFS/HBase とやり取り • Hadoop と同じノードで実行

• 高パフォーマンス :• Java の代わりに C++ で開発• ランタイムコードの生成 (LLVM)• 新しい実行エンジンは、 MapReduce に依存しない

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

Agenda

• Impala とは• MapReduce, Hive, そして Impala へ• Impala のアーキテクチャ• Impala と Hive の比較 ( デモあり )

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

MapReduce のおさらい

• 分散バッチ処理システム• MapReduce が提供するもの

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

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

MapReduce の問題点 (1)

• 分散処理が簡単になったとはいえ、それでも処理の実装はかなり大変

• Java で書かなければいけない• 現実には複数の MapReduce を組み合わせて一つの処理

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

MapReduce を基盤としたスクリプト言語・上位アプリケーション開発のモチーベーション

となった

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

MapReduce を基盤としたツール群

MapReduce

Hive

Pig Mahout

Oozie

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

Apache Hive とは

• SQL ライクな MapReduce 用クエリ言語• メタデータを保持することで、テーブルスキーマや個々

のデータに対するアクセス権なども設定可能• ユーザー数が多く、多数の BI/DWH ベンダーが Hive から

のアクセスをサポートするようになった

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

Hive のアーキテクチャ

HDFS DN

MapReduce Slave(Container or TT)

HBase HDFS DN

MapReduce Slave(Container or TT)

HBaseHDFS DN

MapReduce Slave(Container or TT)

HBase

SQL App

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

HDFS NNHive Metastore YARN MRv1

Query Exec Engine

Compiler

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

Hive のアーキテクチャ

HDFS DN

MapReduce Slave(Container or TT)

HBase HDFS DN

MapReduce Slave(Container or TT)

HBaseHDFS DN

MapReduce Slave(Container or TT)

HBase

SQL App

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

HDFS NNHive Metastore YARN MRv1

Query Exec Engine

Compiler

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

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

Hive のアーキテクチャ

HDFS DN

MapReduce Slave(Container or TT)

HBase HDFS DN

MapReduce Slave(Container or TT)

HBaseHDFS DN

MapReduce Slave(Container or TT)

HBase

SQL App

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

HDFS NNHive Metastore YARN MRv1

Query Exec Engine

Compiler

通常の MapReduce フレームワークを用いてジョブを実行していく

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

MapReduce の問題点 (2)

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

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

MapReduce に依存しない、低レイテンシ処理のための基盤を開発するモチベーションとなった

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

Agenda

• Impala とは• MapReduce, Hive, そして Impala へ• Impala のアーキテクチャ• Impala と Hive の比較 ( デモあり )

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

Impala のアーキテクチャ

Query Coordinator

Query Executor

HDFS DN HBase

Hiveメタスト

アHDFS NN Statestore

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

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

SQL App

ODBC

Query Planner

ローカルダイレクト読み込み

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

Impala のアーキテクチャ

Query Coordinator

Query Executor

HDFS DN HBase

Hiveメタスト

アHDFS NN Statestore

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

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

SQL App

ODBC

Query Planner

ローカルダイレクト読み込み

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

Impala のアーキテクチャ

Query Coordinator

Query Executor

HDFS DN HBase

Hiveメタスト

アHDFS NN Statestore

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

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

SQL App

ODBC

Query Planner

ローカルダイレクト読み込み

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

Impala のアーキテクチャ : クエリ実行ODBC/Beeswax の Thrift API 経由で SQL リクエストを受信

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

SQL App

ODBC

Hiveメタスト

アHDFS NN Statestore

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

SQL リクエスト

Hive と同じクエリをそのまま投げる( 一部制限あり )

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

Impala のアーキテクチャ

Query Coordinator

Query Executor

HDFS DN HBase

Hiveメタスト

アHDFS NN Statestore

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

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

SQL App

ODBC

Query Planner

ローカルダイレクト読み込み

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

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

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

HbaseScan

HashJoin

HdfsScan Exch

TopN

Agg

Exch

at coordinator at DataNodes at region servers

AggTopN

Agg

HashJoin

HdfsScan

HbaseScan

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

Impala のアーキテクチャ : クエリの実行コーディネーターはリモートの Impala デーモンと協調し、

各フラグメントの実行を開始

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

SQL App

ODBC

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

Hiveメタスト

アHDFS NN Statestore

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

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

Impala のアーキテクチャ : クエリ実行

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

SQL App

ODBC

Hiveメタスト

アHDFS NN Statestore

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

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

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

Impala のアーキテクチャ : クエリ実行Impala デーモン間に中間結果が渡され、クエリ結果はクライアントへ

返される

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

SQL App

ODBC

Hiveメタスト

アHDFS NN Statestore

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

Query Planner

Query Coordinator

Query Executor

HDFS DN HBase

クエリ結果

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

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

Impala のアーキテクチャ

メタデータの処理 :

• Hive のメタストアを利用

• メタデータのキャッシュ : 一度 Impala を起動すると、メタストアは再度同期されない (再起動が必要 )

• ベータ版 : Impala デーモンは、起動時にメタストアのメタデータを読み込む

• GA: statestore を通じてメタデータを配布

注 :GA で搭載予定の機能は、現時点 (v.0.4) では未サポートです

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

Impala のアーキテクチャ実行エンジン

• C++ で開発• LLVM によるコード生成

• すべての式をインライン化することで、高速化を図る

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

Impala のアーキテクチャStatestore• 中央のステートリポジトリ

• ネームサービス ( メンバーシップ )• GA: メタデータ• GA: ほかの関連スケジュールまたは診断ステート

• ソフトステート• Statestore がなくても Impala サービスは古い情報を使用しながら動作を継続

• 定期的に Impala デーモンをプッシュ• ポーリングの失敗が続く場合、クラスタビューから Impala デー

モンが排除されたとみなす● サービス / サブスクリプション登録に Thrift API を利用 注 :GA で搭載予定の機能は、現時点 (v.0.4) では未サポートです

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

ユーザー視点での Impala: SQL• SQL サポート :

• SQL の Hive バージョンにならって開発• 現時点では一部の DML のサポートのみ (SELECT, INSERT)• GA: DDL のサポート (CREATE, ALTER)

ベータ版では Hive を使用• 機能制限 :

• カスタム UDF 、ファイルフォーマット、 SerDes不可• ハッシュ JOIN のみ ; テーブル JOIN はメモリ内に収める必要が

ある :• ベータ版 : ブロードキャストされたハッシュ JOINだけ• GA:全 ( 実行 ) ノードのメモリを集計

• ベータ版 : JOIN の順番 = FROM節に記述した順番• GA: 基本的なコストベースのオプティマイザ

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

Agenda

• Impala とは• Hadoop, Hive, そして Impala へ• Impala のアーキテクチャ• Impala と Hive の比較 ( デモあり )

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

デモ : 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

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

Impala と Hive の比較• Hive: MapReduce の実行エンジン

• 高レイテンシ• MapReduce のオンディスクチェックポイントに基づく• MapReduce による耐障害性モデル• 柔軟なファイルフォーマットと UDF• 実行時の高オーバーヘッド

• Impala:• 耐障害性なし• 低レイテンシ

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

Impala と Hive の比較• Hive より Impala のパフォーマンスが優れている点 :

• Impala は完全なディスクスループットを取得 (~100MB/sec/disk); I/O バウンドのワークロードの 3〜 4倍速い

• Hive 内で複数の map-reduce フェーズを必要とするクエリでは処理スピードのアップを実感

• メモリ内のデータに対して実行するクエリに関しては、よりスピードアップを実感( 100倍のケースもある)

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

GA で実装予定の機能の紹介

• JDBC ドライバ対応

• ファイルフォーマットとして、 Trevni の採用

• DDL 対応

• SQL パフォーマンスの最適化

http://blog.cloudera.com/blog/2012/12/whats-next-for-

cloudera-impala/

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

GA後、実装予定の機能紹介

• UDF による拡張

• コストベース・オプティマイザの搭載

• ディスクを使用した外部結合

http://blog.cloudera.com/blog/2012/12/whats-next-for-

cloudera-impala/

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

まとめ

• Impala の概要、開発のモチベーション、アーキテクチャについて紹介しました

• Impala は、データサイエンティストのためのツールです

• バッチ処理や、業務処理には向きません

• GA 、 GA後も、多くの改良を進めていきます

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

Impala を試してみる !

• ベータ版は 2012 年 10 月 24 日から入手可能

• 2013 年 Q1 には GA版が公開される予定

• 質問やコメントは [email protected] まで

• https://github.com/cloudera/impala

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

CONFIDENTIAL - RESTRICTED

ご清聴ありがとうございました。

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