impala 2.0 update 日本語版 #impalajp

35
1 Impala 2.0 Update 嶋内 翔, Cloudera 2014/10/31

Upload: cloudera-japan

Post on 04-Jul-2015

1.168 views

Category:

Technology


6 download

DESCRIPTION

2014/10/31に Tokyo Impara Meetup で実施した嶋内の発表の日本語資料です http://connpass.com/event/9031/

TRANSCRIPT

Page 1: Impala 2.0 Update 日本語版 #impalajp

1

Impala 2.0 Update嶋内翔, Cloudera

2014/10/31

Page 2: Impala 2.0 Update 日本語版 #impalajp

2

トピック

• Cloudera Impalaとは?

• Impala 1.4 / 2.0 の update

• パフォーマンスの改善

• クエリ言語

• リソース管理とセキュリティ

• その他

Page 3: Impala 2.0 Update 日本語版 #impalajp

3

自己紹介

• Pre-sales Solutions Architect

• 2011年にCloudera入社 , 日本における最初の社員

• email: [email protected]

• twitter: @shiumachi

Page 4: Impala 2.0 Update 日本語版 #impalajp

4

Cloudera Impala

Page 5: Impala 2.0 Update 日本語版 #impalajp

5

Impalaとは?

• Hadoop環境でのMPP SQL query engine

• ハードウェアの性能を最大限に引き出すためネイティブコードで提供されている

• open-source!• http://impala.io/

• Cloudera, Amazon, MapRからのサポート提供

• 略史• 2012/10 Public Beta released

• 2013/04 Impala 1.0 released

• current version: Impala 2.0

Page 6: Impala 2.0 Update 日本語版 #impalajp

6

Impalaを使うのは簡単

• HDFS / HBaseに格納されたデータを仮想的なビューとして表を作成• Metastoreにスキーマ情報を格納

• shared with Hive, Pig, etc.

• ODBC / JDBCを通じてアクセス

• 認証には Kerberos / LDAPを使用可

• 標準的な SQL• ANSI SQL-92 based

• 限定的な SELECT と bulk INSERT

• no correlated subqueries available in 2.0

• UDF / UDAF

Page 7: Impala 2.0 Update 日本語版 #impalajp

7

Impala 1.4 (2014/07)

• DECIMAL(<precision>, <scale>)• HDFS caching DDL• Sentry-based authorization (GRANT / REVOKE)• Parquet file を元にした列定義(CREATE TABLE … LIKE PARQUET)• LIMIT句を指定しないORDER BY• TLS上でのLDAP• SHOW PARTITIONS• 本番利用可能な統合リソースマネージャであるYARN • Llama HA のサポート• CREATE TABLE … STORED AS AVRO• SUMMARY• COMPUTE STATSの高速化• partition pruningのパフォーマンス改善• impala shell での UTF-8 のサポート• EDW systems からの追加の built-ins

Page 8: Impala 2.0 Update 日本語版 #impalajp

8

Impala 2.0 (2014/10)

• Hash Tableを diskへ書き出し可能に• join and aggregate tables の制限が不要に

• サブクエリの機能追加• WHERE句でのクエリ• EXISTS / NOT EXISTS• IN / NOT IN のサブクエリの結果への適用• correlated / uncorrelated サブクエリ• Scalar サブクエリ

• SQL 2003 準拠の解析ウィンドウ関数• LEAD(), LAG(), RANK(), FIRST_VALUE(), etc.

• 新しいデータ型: VARCHAR, CHAR• セキュリティへの機能追加

• 複数の認証方式• GRANT / REVOKE / CREATE ROLE / DROP ROLE / SHOW ROLES / etc.

• text + gzip / bzip2 / Snappy• Hints• QUERY_TIMEOUT_S• DATE_PART() / EXTRACT()• Parquet の default block size が 256MB に変更(変更前: 1GB)• LEFT ANTI JOIN / RIGHT ANTI JOIN• impala-shellの設定ファイルとして $HOME/.impalarcを使用可能に

Page 9: Impala 2.0 Update 日本語版 #impalajp

9

パフォーマンスの改善

Page 10: Impala 2.0 Update 日本語版 #impalajp

10

HDFS caching

• HDFS ファイルがメモリ上にキャッシュされた場合にImpalaはディスクアクセスなしにアクセス可能になり別のメモリ上のコピーを作成必要もない

• チェックサムの確認とデータコピーが不要

• この新しい HDFS API は CDH 5.0から使用可能

• Impala DDLでキャッシュを構成する方法

• CREATE TABLE tbl_name CACHED IN ‘<pool>’

• ALTER TABLE tbl_name ADD PARTITION … CACHED IN ‘<pool>’

Page 11: Impala 2.0 Update 日本語版 #impalajp

11

Partition Pruning の改善

• 以前の Impala が検索していたのはおよそ3000パーティション程度。Partition Pruningの改善で万単位のパーティションの処理を快適に処理できるように

Page 12: Impala 2.0 Update 日本語版 #impalajp

12

SQL 処理のディスクへの書き出し

• メモリに収まらない一時データの書き出し

• BlockMgr.BytesWrittenプロファイルでクエリ中にディスクに書き出されたデータの統計を確認可能

• 新しいクエリのオプションの QUERY_TIMEOUT_S で各クエリのタイムアウトを設定可能

Page 13: Impala 2.0 Update 日本語版 #impalajp

13

クエリ言語

Page 14: Impala 2.0 Update 日本語版 #impalajp

14

サブクエリ

スカラサブクエリ:結果が単一セルの値になる

SELECT x FROM t1 WHERE x > (SELECT MAX(y) FROM t2);

非相関サブクエリ: サブクエリの外側で参照されている表を参照しない

SELECT x FROM t1 WHERE x IN (SELECT y FROM t2);

相関サブクエリ: サブクエリの外側の表の値を参照する

SELECT employee_name, employee_id FROM employees one WHERE

salary > (SELECT avg(salary) FROM employees two WHERE

one.dept_id = two.dept_id);

Page 15: Impala 2.0 Update 日本語版 #impalajp

15

分析関数(またはウィンドウ関数)

• 2.0 以降でのサポート

• サポートされる関数

• RANK() / DENSE_RANK()

• FIRST_VALUE() / LAST_VALUE()

• LAG() / LEAD()

• ROW_NUMBER()

Page 16: Impala 2.0 Update 日本語版 #impalajp

16

分析関数の例

select stock_symbol, closing_date, closing_price,

lag(closing_price,1) over (partition by stock_symbol order by closing_date) as "yesterday closing"

from stock_ticker

order by closing_date;

+--------------+---------------------+---------------+-------------------+

| stock_symbol | closing_date | closing_price | yesterday closing |

+--------------+---------------------+---------------+-------------------+

| JDR | 2014-09-13 00:00:00 | 12.86 | NULL |

| JDR | 2014-09-14 00:00:00 | 12.89 | 12.86 |

| JDR | 2014-09-15 00:00:00 | 12.94 | 12.89 |

| JDR | 2014-09-16 00:00:00 | 12.55 | 12.94 |

| JDR | 2014-09-17 00:00:00 | 14.03 | 12.55 |

| JDR | 2014-09-18 00:00:00 | 14.75 | 14.03 |

| JDR | 2014-09-19 00:00:00 | 13.98 | 14.75 |

+--------------+---------------------+---------------+-------------------+

日毎に終値と前日の終値を出力

Page 17: Impala 2.0 Update 日本語版 #impalajp

17

概算の仕組み

• APPX_COUNT_DISTINCT クエリオプション

• COUNT(DISTINCT) を NDV()に書き変える

• 処理の高速化

• COUNT(DISTINCT) が単一クエリ内に複数回あっても可

• APPX_MEDIAN()

• 入力に対するおよその中央値を返す

Page 18: Impala 2.0 Update 日本語版 #impalajp

18

概算関数の例

[localhost:21000] > select min(x), max(x), avg(x) from

million_numbers;

+-------------------+-------------------+-------------------+

| min(x) | max(x) | avg(x) |

+-------------------+-------------------+-------------------+

| 4.725693727250069 | 49994.56852674231 | 24945.38563793553 |

+-------------------+-------------------+-------------------+

[localhost:21000] > select appx_median(x) from million_numbers;

+----------------+

| appx_median(x) |

+----------------+

| 24721.6 |

+----------------+

Page 19: Impala 2.0 Update 日本語版 #impalajp

19

CREATE TABLE … LIKE PARQUET

• CREATE TABLE ... LIKE PARQUET 'hdfs_path_of_parquet_file'

• 列名とデータ形式はPARQUETファイルを元に設定される

Page 20: Impala 2.0 Update 日本語版 #impalajp

20

LIMIT句無しのORDER BY

• ORDER BY句でのLIMITの設定はオプションに

• Impala はデータノードのメモリを超過しそうな際には自動的に一時データをDiskに書き込む

Page 21: Impala 2.0 Update 日本語版 #impalajp

21

DECODE()

SELECT event, DECODE(day_of_week, 1, "Monday", 2, "Tuesday", 3,

"Wednesday”, 4, "Thursday", 5, "Friday", 6, "Saturday", 7,

"Sunday", "Unknown day")

FROM calendar;

Page 22: Impala 2.0 Update 日本語版 #impalajp

22

ANTI JOIN

LEFT ANTI JOIN / RIGHT ANTI JOIN が Impala 2.0からサポート

[localhost:21000] > create table t1 (x int);

[localhost:21000] > insert into t1 values (1), (2), (3), (4), (5), (6);

[localhost:21000] > create table t2 (y int);

[localhost:21000] > insert into t2 values (2), (4), (6);

[localhost:21000] > select x from t1 left anti join t2 on (t1.x = t2.y);

+---+

| x |

+---+

| 1 |

| 3 |

| 5 |

+---+

Page 23: Impala 2.0 Update 日本語版 #impalajp

23

新しいデータ型

• DECIMAL (Impala 1.4-)

• column_name DECIMAL[(precision[,scale])]

• precision と scale を指定しない場合はDECIMAL(9,0)と同等

• VARCHAR (Impala 2.0-)

• 長さ上限のあるSTRING

• CHAR (Impala 2.0-)

• 長さが指定されたSTRING

Page 24: Impala 2.0 Update 日本語版 #impalajp

24

新しい built-in 関数

• EXTRACT() : TIMESTAMP から単一の日付もしくは時刻を返す

• TRUNC() : date/time をyear, monthなどに切り詰め• ADD_MONTHS(): MONTHS_ADD()のエイリアス• ROUND(): DECIMAL のまるめた値• 統計的分散を計算するための関数

• STDDEV()• STDDEV_SAMP() / STDDEV_POP()• VARIANCE()• VARIANCE_SAMP() / VARIANCE_POP()

• MAX_INT() / MIN_SMALLINT()• IS_INF() / IS_NAN()

Page 25: Impala 2.0 Update 日本語版 #impalajp

25

SHOW PARTITIONS

[localhost:21000] > show partitions census;

+-------+-------+--------+------+---------+

| year | #Rows | #Files | Size | Format |

+-------+-------+--------+------+---------+

| 2000 | -1 | 0 | 0B | TEXT |

| 2004 | -1 | 0 | 0B | TEXT |

| 2008 | -1 | 0 | 0B | TEXT |

| 2010 | -1 | 0 | 0B | TEXT |

| 2011 | 4 | 1 | 22B | TEXT |

| 2012 | 4 | 1 | 22B | TEXT |

| 2013 | 1 | 1 | 231B | PARQUET |

| Total | 9 | 3 | 275B | |

+-------+-------+--------+------+---------+

Page 26: Impala 2.0 Update 日本語版 #impalajp

26

SUMMARY

• impala-shell のコマンド

• クエリ実行時のフェーズごとの統計を把握するための簡易な要約

[localhost:21000] > select avg(ss_sales_price) from store_sales where ss_coupon_amt = 0;

+---------------------+

| avg(ss_sales_price) |

+---------------------+

| 37.80770926328327 |

+---------------------+

[localhost:21000] > summary;

+--------------+--------+----------+----------+-------+------------+----------+---------------+-----------------+

| Operator | #Hosts | Avg Time | Max Time | #Rows | Est. #Rows | Peak Mem | Est. Peak Mem | Detail |

+--------------+--------+----------+----------+-------+------------+----------+---------------+-----------------+

| 03:AGGREGATE | 1 | 1.03ms | 1.03ms | 1 | 1 | 48.00 KB | -1 B | MERGE FINALIZE |

| 02:EXCHANGE | 1 | 0ns | 0ns | 1 | 1 | 0 B | -1 B | UNPARTITIONED |

| 01:AGGREGATE | 1 | 30.79ms | 30.79ms | 1 | 1 | 80.00 KB | 10.00 MB | |

| 00:SCAN HDFS | 1 | 5.45s | 5.45s | 2.21M | -1 | 64.05 MB | 432.00 MB | tpc.store_sales |

+--------------+--------+----------+----------+-------+------------+----------+---------------+-----------------+

Page 27: Impala 2.0 Update 日本語版 #impalajp

27

SET 文

• Impala 2.0以前では SET はimpala-shell内でのみ使用可能

• Impala 2.0 ではSETを JDBC / ODBC APIを通してクライアントアプリケーションから実行可能

Page 28: Impala 2.0 Update 日本語版 #impalajp

28

リソース管理とセキュリティ

Page 29: Impala 2.0 Update 日本語版 #impalajp

29

YARN と Llama

• Llama: 低レイテンシの Application Master

• 粒度の大きなYARNのスケジュールを低レイテンシで短期間のクエリに細分化

• Llama は単一の長期間のApplication MasterをYARN pool に登録

• Llama は YARNに割り当てられたリソースをImparaのクエリ用に高速に再割り当てしながら使用する

• YARNよりさらに高速

• Impala 1.4から Llama HA をサポート

Page 30: Impala 2.0 Update 日本語版 #impalajp

30

セキュリティ

• Impala 2.0 は複数の認証形式を使用可能

• ex) host A は Kerberos host B は LDAPで認証といった混在

• セキュリティ関連の文

• GRANT

• REVOKE

• CREATE ROLE

• DROP ROLE

• SHOW ROLES

• SHOW ROLE GRANT

• --disk_spill_engryption option

Page 31: Impala 2.0 Update 日本語版 #impalajp

31

その他

Page 32: Impala 2.0 Update 日本語版 #impalajp

32

Text + gzip, bzip2, and Snappy

• Impala 2.0 以降ではgzip, bzip2, Snappy といった形式で圧縮されたテキストデータをサポート

• デリミタ、エスケープシーケンスといった行のフォーマットを指定しての表作成

CREATE TABLE csv_compressed (a STRING, b STRING, c STRING)

ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";

Page 33: Impala 2.0 Update 日本語版 #impalajp

33

impala-shell

• UTF-8 サポート (1.4)

• .impalarc file (2.0)

[impala]

verbose=true

default_db=tpc_benchmarking

write_delimited=true

output_delimiter=,

output_file=/home/tester1/benchmark_results.csv

show_profiles=true

Page 34: Impala 2.0 Update 日本語版 #impalajp

34

Documentation

• Impalaを使用する Cluster のサイジングGuidelines

• http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/impala_cluster_sizing.html

Page 35: Impala 2.0 Update 日本語版 #impalajp

35