41
© Hitachi Solutions, Ltd. 2016. All rights reserved. ビッグデータ活用を加速する! 分散SQLエンジン Spark SQLのご紹介 株式会社日立ソリューションズ 研究開発部 オープンソース技術グループ 2016/11/5 倉又 裕輔

ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

Embed Size (px)

Citation preview

Page 1: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

ビッグデータ活用を加速する! 分散SQLエンジン Spark SQLのご紹介

株式会社日立ソリューションズ 研究開発部 オープンソース技術グループ

2016/11/5

倉又 裕輔

Page 2: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

自己紹介

1

名前

倉又 裕輔 (くらまた ゆうすけ)

所属

・(株)日立ソリューションズ

研究開発部 オープンソース技術グループ

・OSSコンソーシアム DB部会

担当業務

・OSSのビッグデータ関連技術の

エンタープライズ利用に向けた調査

・調査で得られた技術情報の社内外への発信

Page 3: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

OSSコンソーシアム DB部会の紹介

2

活動目的 データベース領域でのオープンソースのさらなる発展促進を図る

活動方針 ・特定のプロダクトにとらわれず、第三者的な立場で

さまざまなデータベースの情報を収集し、

ユーザ・ベンダにフィードバックする機会を提供する

・データベースの垣根を越えたイベント等を開催する

参加対象

・オープンソースデータベースを活用したソリューション、

サービスを提供している企業、技術者の皆様

・上記のソリューション、サービスを活用している、

または興味のあるユーザの皆様

参加企業

TIS株式会社

株式会社デジタル・ヒュージ・テクノロジー

特定非営利活動法人LPI-Japan

株式会社日立ソリューションズ

皆様のご参加を

お待ちしています!

http://www.osscons.jp/

Page 4: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

発表の流れ

1. Spark SQLの特徴

2. Spark 2.0におけるSpark SQLの新機能

3. TPC-DSクエリの動作検証

4. まとめ

3

Page 5: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

1. Spark SQLの特徴

4

2. Spark 2.0におけるSpark SQLの新機能

3. TPC-DSクエリの動作検証

4. まとめ

Page 6: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

1.1. Hadoop活用におけるクエリ処理へのニーズ

5

MapReduce

Hive

処理をHDFSのデータに実行

Hiveのクエリ言語はSQLライクな HiveQL

MapReduceはスループット重視で バッチ処理向き

• 従来からHadoopのデータ処理にはMapReduceやHiveが利用されている • Hiveはクエリ処理ツールとしてデファクト

YARN

HDFS

Hadoopでも 標準SQLを活用したい

インタラクティブに クエリを実行したい

HiveQLで クエリ入力

クエリからMapReduceの 処理を生成

Page 7: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

1.2. SQL on Hadoop

6

• Hadoopのクエリ処理の新たなニーズに対してSQL on Hadoopが登場 - 標準SQLインターフェース - MapReduceとは異なる独自の処理エンジンでインタラクティブ処理に対応

HDFS SQL on Hadoop

SQL Impala

Spark SQLはSQL on Hadoopのひとつ Hiveでは対応できない新たなニーズに対応

標準SQLで クエリ入力

処理をHDFSのデータに実行

インタラクティブに クエリ実行

Page 8: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

1.3. Apache SparkとSpark SQLの関係

7

Apache Spark

• OSSの汎用分散処理エンジン - 高スループットと低レイテンシの両方のニーズに対応

- MapReduceより高速といわれている

- Hadoop HDFS, YARNと連携が可能

Logistic regression in Hadoop and Spark

http://spark.apache.org/

http://spark.apache.org/

⇒ 新たなHadoopの処理エンジンとして期待されている

Spark SQLはApache SparkのSQLインターフェース

⇒ 新たなHadoopのクエリツールとして期待

• 4つのコンポーネントを持つ

- SQL処理 :Spark SQL

- ストリーム処理:Spark Streaming

- 機械学習処理 :MLlib

- グラフ処理 :Graph X

Page 9: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

1.4. SparkユーザがSpark SQLを利用する比率

8

http://cdn2.hubspot.net/hubfs/438089/DataBricks_Surveys_-_Content/2016_Spark_Survey/2016_Spark_Infographic.pdf

Spark SQLは全Sparkコンポーネントの中で

最も多く利用されている

• 2015年、2016年に米Databricks社がSparkの利用状況の調査を実施

Spark Survey 2016

Page 10: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

1.5. 活用事例

9

• 米Airbnb社(SNS:空き部屋シェアサイト)

Spark SQLとSpark Streamingを活用したストリーム処理基盤を開発

http://www.slideshare.net/JenAman/airstream-spark-streaming-at-airbnb

• 予約イベントを

ストリーム処理で分析

• 自社のエンジニアや

データサイエンティストが利用

リアルタイムな洞察を得られる

リアルタイムなフィードバックループを構築

Spark Summit (2016/6)

Page 11: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

1.6. 活用事例2

10

http://www.slideshare.net/SparkSummit/video-games-at-scale-improving-the-gaming-experience-with-apache-spark

• 米Riot Games社(オンラインゲーム)

Spark SQLとMLlibを活用したパーソナライズ レコメンド システムを開発

大量データに対するSQL処理時間を大幅に低減

• データ量の増大に対して性能が追い付かないHiveをSpark SQLに置き換え

Spark Summit (2016/6)

Page 12: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

1.7. Spark SQLの概要

11

HDFS

例: ・ Webログ ・ センサーデータ

Hive テーブル

> SELECT * FROM table ;

標準SQL +

HiveQL

SQL

CLI・BIツール ・アプリから

SQLとHiveQLを 使って

HDFS・Hiveテーブル などのデータを分析

例: ・ Microsof Power BI ・ Tableau

Page 13: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

クライアントにJDBC・ODBC

接続インターフェースを提供

1.8. Spark SQLのサーバ機能

12

• インタラクティブ分析ではBIツールの利用が一般的

JDBC/ODBC サーバ

JDBC /ODBC

SQL

> SELECT * FROM table ;

Hive テーブル

Spark SQL 独自のテーブル

テーブル形式のデータに

クエリを実行

Spark SQLのサーバ機能によりBIツールと連携が可能

Page 14: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

1.9. Spark SQLのクエリ処理の流れ

13

クエリ解析・ 最適化し 実行計画を作成

Hadoopクラスタで タスクを分散処理

• Hadoop上でクエリ処理を実行する場合

実行計画から タスク生成

Page 15: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

2. Spark 2.0におけるSpark SQLの新機能

1. Spark SQLの特徴

14

3. TPC-DSクエリの動作検証

4. まとめ

Page 16: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

2.1. Apache Spark 2.0リリース

15

※ 最新2.0.1が10/3にリリース(メンテナンスリリース:バグ修正など)

http://spark.apache.org/news/spark-2-0-0-released.html

• 7月26日 待望のメジャーバージョンアップとなるSpark 2.0がリリース

- Spark SQL (SQL処理) - Spark Streming (ストリーム処理) - MLlib (機械学習処理)

主に以下のコンポーネントを強化

Page 17: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

2.2. Spark 2.0 の全体像とSQLの主な新機能

16

:主な機能追加箇所

Spark Core

Spar

k St

ream

ing

(Dst

ream

)

Stru

ctu

red

St

ream

ing

Spar

k SQ

L

MLl

ib

Gra

ph

X

DataFrame / Dataset

Streaming

■ Streaming DataFrameベースの 新ストリーミングAPIを追加 (Alpha ver.)

■ MLlib ・基本APIがDataFrameベースに変更 ・機械学習モデルとパイプラインの 永続化機能をサポート

- SQLのサポート拡大 - SparkSessionの追加

- Datasetの正式サポート - 性能の大幅な改善

Spark SQL

Page 18: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

2.3. SQLのサポート拡大①

17

• SQL 2003準拠の機能を追加

• サブクエリ - 相関、非相関スカラサブクエリ - (NOT) IN、(NOT) EXISTS (WHERE句、HAVING句内のみ) • ビュー • ROLLUP、CUBE • WINDOW関数

https://issues.apache.org/jira/browse/SPARK-12540

http://spark.apache.org/releases/spark-release-2-0-0.html

※ TPC-DS:BIなどの意思決定支援システムの標準ベンチマーク ※ Spark 1.6では約55種が実行可能だった ※ 詳細は以下を参照 - Spark 2.0リリースノート - SparkのIssue「Support all TPCDS queries」

■新たにサポートしたSQLの例

SQLのサポート範囲の拡大により TPC-DSの全クエリ (99種) を実行可能になった

Page 19: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

2.4. SQLのサポート拡大②

18 http://www.tpc.org/

• TPC (Transaction Processing Performance Council) :トランザクション処理性能評議会

- トランザクション処理とDBのベンチマーク を定義し、客観的・検証可能な性能データを 広めることを目的とする非営利法人 - DBのベンチ―マークとしてデファクト - ユースケース別に11種のベンチマークが存在

• TPC-DS (TPC - Decision Support)

- BIなど意思決定支援システムのベンチマーク - 最新バージョンは2.3.0

• 補足:TPCとTPC-DSの概要

Page 20: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

2.5. Datasetの正式サポート①

19

name: Andy, age: 32, height: 198.4

name: Ichiro, age: 19, height: 169.7

Andy

Ichiro

32

19

198.4

169.7

Name <String>

Age <Long>

Height <Double>

RDD

DataFrame

型 Andy

Ichiro

32

19

198.4

169.7

Dataset

拡張

行レベルで「型」を設定 (型:スキーマ名、列名、データ型)

従来からのデータ構造

• 1.6.X系まではDataFrameがSpark SQLのメインのデータ形式だった ⇒ 2.0ではDataFrameを拡張したDatasetがメインのデータ形式になった

Page 21: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

2.6. Datasetの正式サポート②

20

// cat Person.json

// {"name": "Andy", "age": 32, "height": 198.4}

// {"name": "Ichiro", "age": 19, "height": 169.7}

• DataFrameとDatasetの違い(spark-shellで実行)

DataFrame作成のため JSONファイルを用意

JSONファイルを読み込んでDataFrameを生成

scala> val PersonDFrame = spark.read.json("/Person.json")

PersonDFrame: org.apache.spark.sql.DataFrame = [age: bigint, height: double ...

1 more field]

scala> PersonDFrame.collect()

res1: Array[org.apache.spark.sql.Row] = Array([32,198.4,Andy],

[19,169.7,Ichiro]) DataFrameの各行はデータのみ

Datasetを作成するために型(case class)を作成

scala> case class PersonType(name: String, age: Long, height: Double)

defined class PersonType

型をDataFrameに設定してDatasetを作成

scala> val PersonDS = PersonDFrame.as[PersonType]

PersonDS: org.apache.spark.sql.Dataset[PersonType] = [age: bigint, height:

double ... 1 more field]

Datasetの各行は型とデータのセット

scala> PersonDS.collect()

res3: Array[PersonType] = Array(PersonType(Andy,32,198.4),

PersonType(Ichiro,19,169.7))

Page 22: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

2.7. Datasetの正式サポート③

21

• DataFrameより強い型付け(strongly-typed)のためコンパイル時の意味解析が可能 例:存在しない列(weight)を選択した場合

DataFrameでは

コンパイルエラーにならない

※ 詳細は以下を参照 - 米国Databricks社ブログ 「 A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets 」

https://databricks.com/blog/2016/07/14/a-tale-of-three-apache-spark-apis-rdds-dataframes-and-datasets.html

Datasetの利用により データの型の不一致をコンパイル時に検知できる

Datasetでは、設定した型「PersonType」に

列「weight」が存在しないため、コンパイルエラーになる

Page 23: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

2.8. SparkSessionの追加①

22

• 1.6.X系でのAPIの使い分けの例(spark-shellで実行)

- RDDを使った処理 : SparkContext

1.6.X系まで

SQLContext

HiveContext

• 1.6.X系までは、目的に応じてエントリーポイントのAPIの使い分けが必要

- DataFrameと SQLを使った処理 :

- DataFrameと HiveQLを使った処理:

統一

SparkSession

2.0 から

テキストデータから

RDDの生成 scala> sc

res0: org.apache.spark.SparkContext = org.apache.spark.SparkContext@19b07bac

scala> val textRDD = sc.textFile("テキストファイル")

SQLの実行

scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc)

scala> sqlContext.sql("SQLクエリ").show()

HiveQLの実行

scala> val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)

scala> hiveContext.sql("HiveQLクエリ").show

Page 24: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

2.9. SparkSessionの追加②

23

scala> spark

res1: org.apache.spark.sql.SparkSession =

org.apache.spark.sql.SparkSession@f9528ff

scala> val textRDD = spark.sparkContext.textFile(“テキストファイル")

scala> spark.sql(“SQLクエリ または HiveQLクエリ").show()

SQLとHiveQLの実行

エントリーポイントのAPIの使い分けが不要 ⇒ コードがシンプルになり開発効率が向上

※ Spark 2.0からSQLContext / HiveContextは非推奨 ※ 詳細は以下を参照 - 米国Databricks社ブログ「 How to use SparkSession in Apache Spark 2.0 」

https://databricks.com/blog/2016/08/15/how-to-use-sparksession-in-apache-spark-2-0.html

テキストデータからRDDの生成

• SparkSessionを使った例(spark-shellで実行)

Page 25: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

2.10. 性能の大幅な改善①

24

• クエリオプティマイザと処理エンジンを改良

• Catalystオプティマイザの一般的なワークロードを最適化

• Tungstenエンジンの改良(Tungsten phase2) - Whole stage code generation ・実行時にコードを自動生成し、クエリ全体を単一の関数に統合 ⇒ 一般的なSQL / DataFrame処理において、2~10倍の性能向上 大規模データに対するシンプルな処理において特に効果が高い - ベクトル化デコーダの導入 ・カラム指向データに対して多数の行を一度に処理 ・複雑なクエリなどWhole stage code generationが使えない場合に実行 ⇒ Parquetのスキャンの スループットが向上

スループット

https://databricks.com/blog/2016/05/23/apache-spark-as-a-compiler-joining-a-billion-rows-per-second-on-a-laptop.html

Page 26: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

2.11. 性能の大幅な改善②

25

class Filter(child: Operator, predicate: (Row => Boolean)) extends Operator { def next(): Row = { var current = child.next() while (current == null || predicate(current)) { current = child.next() } return current } }

Spark 1.X系(※)

Spark 2.0 (Whole stage code generation)

・仮想関数呼び出し ・オペレータ間のデータ連携の際 中間データをメモリ保存

クエリ全体を単一の関数に統合 ・仮想関数呼び出し無し ・CPUレジスタで中間データ処理 ・単純ループ処理をCPUレベルで並列処理(SIMD)

クエリの例

※1.X系でもコード生成機能はあったが、 ごく少数の演算子にしか対応していなかった

https://databricks.com/blog/2016/05/23/apache-spark-as-a-compiler-joining-a-billion-rows-per-second-on-a-laptop.html

• Whole stage code generation の概要

Page 27: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

2.12. 性能の大幅な改善③

26

https://databricks.com/blog/2016/05/11/apache-spark-2-0-technical-preview-easier-faster-and-smarter.html

全体的にクエリの処理速度が向上

※プレビュー リリース バージョン

• Databricks社が実施したTPC-DSベンチマークの結果

Page 28: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

3. TPC-DSクエリの動作検証

1. Spark SQLの特徴

2. Spark 2.0におけるSpark SQLの新機能

27

4. まとめ

Page 29: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

3.1. 【再掲】 TPCとTPC-DSの概要

28 http://www.tpc.org/

• TPC (Transaction Processing Performance Council) :トランザクション処理性能評議会

- トランザクション処理とDBのベンチマーク を定義し、客観的・検証可能な性能データを 広めることを目的とする非営利法人 - DBのベンチ―マークとしてデファクト - ユースケース別に11種のベンチマークが存在

• TPC-DS (TPC - Decision Support)

- BIなど意思決定支援システムのベンチマーク - 最新バージョンは2.3.0

Page 30: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

3.2. TPC-DSのデータの概要

29

http://www.slideshare.net/kaigai/tpcdspostgresql

※ 参考資料:海外浩平氏「TPC-DSから学ぶPostgreSQLの弱点と今後の展望」

• データモデル - 全国規模で各地に店舗を持つ小売・流通業の販売業務のモデル - 店舗・Web・カタログの各販売チャネルを持つ - 24個のテーブルで構成される • 業務プロセス - 顧客の購買行動、 返品履歴をトラッキング - 顧客属性によるダイナミックな Webページの生成(CRM) - 在庫商品の管理 • ER図の例 - 店舗販売データ(右図)

Page 31: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

3.3. TPC-DSのクエリの概要

30

with customer_total_return as (

select sr_customer_sk as ctr_customer_sk,

sr_store_sk as ctr_store_sk,

sum(SR_FEE) as ctr_total_return

from store_returns, date_dim

where sr_returned_date_sk = d_date_sk and d_year = 2000

group by sr_customer_sk, sr_store_sk

)

select c_customer_id

from customer_total_return ctr1, store, customer

where ctr1.ctr_total_return > (

select avg(ctr_total_return)*1.2

from customer_total_return ctr2

where ctr1.ctr_store_sk = ctr2.ctr_store_sk

)

and s_store_sk = ctr1.ctr_store_sk and s_state = 'TN'

and ctr1.ctr_customer_sk = c_customer_sk

order by c_customer_id

limit 100;

【クエリ例:Query01】 2000年、 テネシー州の店舗で、 返品数が店舗平均の 120%を越える顧客を、 100件検索

http://www.slideshare.net/kaigai/tpcdspostgresql

※ 参考資料:海外浩平氏「TPC-DSから学ぶPostgreSQLの弱点と今後の展望」

• 99種(103個)のクエリを定義 • 大量データに対する実世界のビジネスクエスチョンを想定 ⇒ Ad-hoc, reporting, data miningなど • プロセッサとI/Oに対する高負荷を想定

Page 32: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

3.4. 検証の目的

31

TPC-DSクエリ

実行結果

TPC-DS テーブル

JDBC/ODBC サーバ

SQL

Spark SQLのサーバ機能で 99種全てのTPC-DSクエリが実行可能か検証する

• TPC-DSクエリのサポートは、Spark 2.0の大きな成果の一つ • TPC-DSは、BIなどの意思決定支援システムのベンチマーク • BIツールからSpark SQLへの接続には、Spark SQLのサーバ機能を利用する

※ クエリが正常にパースされ、実行結果が出力されるかどうかを検証 クエリの実行結果が正しいかどうかは検証範囲外

Page 33: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

3.5. 検証の前提条件

32

クライアントには Beelineを利用

従来からHiveは多く利用されている ⇒ 既存のHiveテーブルがあれば活用できる

標準でサポートする JDBCクライアント

• 検証では以下のクライアントとデータストアを利用

TPC-DSデータは Hiveテーブルに格納

Hive テーブル

Beeline (JDBCクライアント)

JDBC/ODBC サーバ

SQL

> beeline “TPC-DS Query” TPC-DSデータ TPC-DS

クエリ

Page 34: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

3.6. 検証環境の構成

YARN

HDFS

Metastore Server

Beeline

33

SQL

OS CentOS 6.8 64bit

Hadoop 2.7.2 (Apacheコミュニティ版)

Spark SQL 2.0.0

Hive 1.2.1

PostgreSQL 9.5.3

JDBC/ODBC サーバ

シングルノード構成

JDBC

Hiveテーブルの スキーマ情報 (メタデータ)を管理

TPC-DSのデータファイル (1テーブル:1ファイル)

TPC-DSの テーブル定義

Parquet ファイル

> beeline “TPC-DS Query”

Page 35: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

3.7. 利用したTPC-DSのデータ

34

・・・

https://github.com/databricks/spark-sql-perf/blob/master/README.md

データの作成方法(抜粋)

• 米国Databricks社が公開しているツールを利用してデータを生成

• ツールの実行により、1テーブル:1ファイルのデータが生成される

• Hiveテーブルを作成し、生成したファイルをインポート

# ls

call_center customer_demographics promotion time_dim

catalog_page date_dim reason warehouse

・・・省略・・・ # ls call_center/

part-r-00000-570b5da3-e47a-4dec-ae75-47b48afe36ff.snappy.parquet

テーブルごとのデータ

テーブル名が付いたディレクトリ

Page 36: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

3.8. 利用したTPC-DSのクエリ

35

• Spark 2.0のソースに含まれているテスト用のTPC-DSのクエリを利用

・・・

https://github.com/apache/spark/tree/v2.0.0/sql/core/src/test/resources/tpcds

クエリ単位で

ファイル分け

Page 37: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

3.9. TPC-DSのクエリの実行例

36

# beeline -u jdbc:hive2://localhost:10000 -n root -f q1.sql

・・・省略・・・

| c_customer_id |

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

| AAAAAAAAAAABAAAA |

| AAAAAAAAAAAHBAAA |

| AAAAAAAAAAAMAAAA |

・・・省略・・・

| AAAAAAAAABPABAAA |

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

100 rows selected

Beelineの起動オプションに

クエリのファイルを指定して実行

クエリの実行結果が出力される

• 下記の方法でTPC-DSの全103クエリを実行

Page 38: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

3.10. 検証結果

37

TPC-DSの全99種/103クエリが実行できた

クエリNo. q1 q2 q3 …略…

(q4~q98) q99

検証結果

Page 39: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

4. まとめ

3. TPC-DSクエリの動作検証

38

1. Spark SQLの特徴

2. Spark 2.0におけるSpark SQLの新機能

Page 40: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

© Hitachi Solutions, Ltd. 2016. All rights reserved.

まとめ

39

1.Spark SQLはSQL on Hadoopのひとつ

標準SQLによるインタラクティブ分析が可能

2.CLI・アプリ・BIツールから利用でき、

さまざまなファイル・Hiveテーブルのデータを扱える

3.Spark 2.0では標準SQLのサポート範囲が拡大し性能も向上

4.TPC-DSの全クエリをJDBCクライアントから実行可能

Page 41: ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall

・Apache Spark、Apache、Spark、Hadoop、Hiveは、The Apache Software Foundationの米国およびその他の国における登録商標または商標です。

・本資料に掲載されている会社名、製品名、サービス名、ロゴは各社の登録商標、又は商標です。