impala データサイエンティストのための 高速大規模分散基盤 #tokyowebmining
DESCRIPTION
Tokyo Webmining #25 で発表したときの資料です。メインはデモの方ですTRANSCRIPT
Impala 徹底入門 データサイエンティストのための
高速大規模分散基盤
2013/03/23 @shiumachi
お前誰よ?
• Sho Shimauchi ( @shiumachi ) • Cloudera の問い合わせ担当
Hive 本
• 日本語版鋭意作成中
• 翻訳レビュー手伝ってます
Hive 本
• 日本語版鋭意作成中
• 翻訳レビュー手伝ってます
(主に同僚が)
Impala?
Cloudera Impala
• 一言で言うと速いHive
Cloudera Impala
• 一言で言うと速いHive • どのくらい速いかというと、メチャクチャ速い
Cloudera Impala
• 一言で言うと速いHive • どのくらい速いかというと、メチャクチャ速い – 大体 x10〜30
Cloudera Impala
• 一言で言うと速いHive • どのくらい速いかというと、メチャクチャ速い – 大体 x10〜30 – 遅い時でも x2〜3
Cloudera Impala
• 一言で言うと速いHive • どのくらい速いかというと、メチャクチャ速い – 大体 x10〜30 – 遅い時でも x2〜3
– 私が見たことある最速は x97
まさに TokyoWebmining参加者
のためのツール
いきなりデモします
デモ概要 • 基本単位 5000万行, 1GB • RCFile + snappy 圧縮すると 10.6MB – RCFIie: 列指向フォーマット – snappy: 高速性を重視した圧縮アルゴリズム
• 今回は10単位 5億行, 10GB (圧縮後 106MB) • クラスタ概要 – Amazon EC2 上で構築 – 運用管理ソフト Cloudera Manager で自動構築 – インスタンス m1.large (CPU 2コア, メモリ7.5GB) – 4ノード(マスタ込み)
Cloudera Impala
Cloudera Impala
• オープンソースの低レイテンシSQLエンジン • C++ • MapReduceは使わない • HDFS や HBase 上のデータを処理可能
Impala のアーキテクチャ
• impalad – 各スレーブノードで稼働する、メインのサービス
• statestore – 1台だけ稼働する、状態管理サービス
• impalad の稼動しているサーバ名 • メタデータ
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
ローカルダイレクト読み込み
Impalaのアーキテクチャ: クエリ実行 ODBC/BeeswaxのThri^ 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 と同じクエリをそのまま投げる (一部制限あり)
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
ローカルダイレクト読み込み
メタデータを取得して 実行計画を作成する
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
他のノードと協調して分散処理を行う
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
ローカルのデータを直接読みこんで クエリを実行
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
クエリ結果
結果は最初のノードに集約 インメモリに置いたまま転送
Impalaのアーキテクチャ 例: Join(結合)とAggrega`on(集計)のクエリ SELECT state, SUM(revenue) FROM HdfsTbl h JOIN HbaseTbl b ON (...) GROUP BY 1 ORDER BY 2 desc LIMIT 10
Hbase Scan
Hash Join
Hdfs Scan Exch
TopN
Agg
Exch
コーディネータ データノード リージョンサーバ
Agg TopN
Agg
Hash Join
Hdfs Scan
Hbase Scan
クエリ
Impala: SQL • SQL サポート: • HiveQLがベース • 現時点では一部のDMLのサポートのみ(SELECT, INSERT)
• DML: Data Manipula`on Language • GA: DDLのサポート (CREATE, ALTER) • DDL: Data Defini`on Language
ベータ版ではHiveを使用
Impala: SQL • 機能制限:
• カスタムUDF、ファイルフォーマット、SerDes不可 • UDF: User Define Func`on ユーザ定義関数 • SerDe: シリアライザ・デシリアライザ。「さーでぃー」 • ハッシュJOINのみ; テーブルJOINはメモリ内に収める必要がある:
• ベータ版: ブロードキャストされたハッシュJOINだけ • GA:全(実行)ノードのメモリを集計
• ベータ版: JOINの順番 = FROM節に記述した順番 • GA:基本的なコストベースのオプティマイザ
よくある質問
もうHiveいらないんじゃね?
?!
NO
Hive にあってImpalaにない機能
Hive にあってImpalaにない機能
• 耐障害性
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換 • インデックス
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換 • インデックス • YARN対応
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換 • インデックス • YARN対応
• DDL
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換 • インデックス • YARN対応
• DDL • バケット
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換 • インデックス • YARN対応
• DDL • バケット • メモリに載りきらない
テーブルのJOIN
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換 • インデックス • YARN対応
• DDL • バケット • メモリに載りきらない
テーブルのJOIN
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換 • インデックス • YARN対応
• DDL • バケット • メモリに載りきらない
テーブルのJOIN
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換 • インデックス • YARN対応
• DDL • バケット • メモリに載りきらない
テーブルのJOIN
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換 • インデックス • YARN対応
• DDL • バケット • メモリに載りきらない
テーブルのJOIN
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換 • インデックス • YARN対応
• DDL • バケット • メモリに載りきらない
テーブルのJOIN
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換 • インデックス • YARN対応
• DDL • バケット • メモリに載りきらない
テーブルのJOIN
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換 • インデックス • YARN対応
• DDL • バケット • メモリに載りきらない
テーブルのJOIN
Hive にあってImpalaにない機能
• 耐障害性 • Hive UDF • Hive SerDe • データの削除 • データの変換 • インデックス • YARN対応
• DDL • バケット • メモリに載りきらない
テーブルのJOIN
サポート済みの Impala の機能(0.6時点)
• Cloudera Manager からインストール可能 • Hue から操作可能 • ODBC ドライバを使って操作可能(一部制限あり) • JDBCドライバも対応(0.5) • データの選択、追加、挿入 • 複数ユーザからの同時アクセス • Kerberos 認証 • パーティション • RCFileのサポート (0.6)
Impalaの賢い使い方 • まずはImpalaで色々試す • 使えそうなクエリを発見したら、Hiveで定期実行
50
Impala
Hadoop
Hive
色々なクエリを試して 実験する 業務処理はHiveで
Impala ロードマップ
• GA はもうちょい • 列指向フォーマット Parquet – hhp://parquet.github.com/
• JOINの改善 • UDF • リソース管理
おしまい