© 2021 NTT DATA Corporation
大量のデータ処理や分析に使えるOSS Apache Spark入門
- Open Source Conference2021 Online/Kyotoエディション
-
2021/7/30
株式会社NTTデータ 技術開発本部
猿田 浩輔
オープンソースカンファレンス2021 Online/Kyoto
2
© 2021 NTT DATA Corporation
$ whoami
 猿田 浩輔
 株式会社NTTデータ 技術開発本部
 シニア・ソフトウェアエンジニア / Apache Sparkコミッタ & PMCメンバ
 Hadoop/Sparkなど、OSSミドル関連のR&Dや技術支援
 普及活動の一環で講演や書籍執筆なども
 Twitter: @raspberry1123
3
© 2021 NTT DATA Corporation
本日のお話
 前半: Apache Sparkの紹介
 Apache Sparkの基本
 Spark SQL
 Sparkの動作環境
 Pythonユーザ向けの注目のアップデート
 後半: Apache Sparkコミュニティへの参加の仕方
 様々な参加の仕方の紹介
 Apache Spark関連のイベント
前半
Apache Sparkの紹介
Apache Sparkの基本
6
© 2021 NTT DATA Corporation
大量のデータ処理に困っていませんか?
データ処理や分析に、何を使っていますか?
7
© 2021 NTT DATA Corporation
大量のデータ処理に困っていませんか?
データ処理や分析に、何を使っていますか?
1台のサーバでデータを処理しきれなくなった時、どうし
ますか?
8
© 2021 NTT DATA Corporation
大量のデータ処理に困っていませんか?
データ処理や分析に、何を使っていますか?
1台のサーバでデータを処理しきれなくなった時、どうし
ますか?
そんな時に使えるのがApache です!
9
© 2021 NTT DATA Corporation
Apache Spark in a nutshell
 Apache Sparkとは?
 OSSの並列分散処理系
10
© 2021 NTT DATA Corporation
Apache Spark in a nutshell
 Apache Sparkとは?
 OSSの並列分散処理系
大量のデータセットを
(数100GBs, TBs, PBs, 数千
万, 数億レコード)
11
© 2021 NTT DATA Corporation
Apache Spark in a nutshell
 Apache Sparkとは?
 OSSの並列分散処理系
複数台のサーバで構成された
クラスタを用いて
大量のデータセットを
(数100GBs, TBs, PBs, 数千
万, 数億レコード)
12
© 2021 NTT DATA Corporation
Apache Spark in a nutshell
 Apache Sparkとは?
 OSSの並列分散処理系
複数台のサーバで構成された
クラスタを用いて
現実的な時間で処理する
(数十分, 数時間のオーダー)
大量のデータセットを
(数100GBs, TBs, PBs, 数千
万, 数億レコード)
13
© 2021 NTT DATA Corporation
Apache Spark in a nutshell
 Apache Sparkとは?
 OSSの並列分散処理系
 並列分散処理に関する面倒な制御をSparkが肩代わりしてくれる。
 エラーハンドリング
 処理の分割やスケジューリング
 etc
複数台のサーバで構成された
クラスタを用いて
現実的な時間で処理する
(数十分, 数時間のオーダー)
大量のデータセットを
(数100GBs, TBs, PBs, 数千
万, 数億レコード)
14
© 2021 NTT DATA Corporation
データ処理ロジックの実装もシンプルに
 プログラミングインターフェイスの観点からも、分散処理の複雑さを隠蔽
 SQLライクなクエリやAPIを用いて、テーブルを操作するように分散処理を記述できる
where
select groupBy avg
val df = spark.read.json("/path/to/dataset")
val result = df.select("col1", "col2").where("col3 > 0")
.groupBy("col1").avg("col2")
15
© 2021 NTT DATA Corporation
Sparkのソフトウェアスタックとプログラミング言語
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)
GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
16
© 2021 NTT DATA Corporation
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)
GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
Sparkのソフトウェアスタックとプログラミング言語
17
© 2021 NTT DATA Corporation
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)
GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
Sparkのソフトウェアスタックとプログラミング言語
18
© 2021 NTT DATA Corporation
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)
GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
Sparkのソフトウェアスタックとプログラミング言語
19
© 2021 NTT DATA Corporation
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)
GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
Sparkのソフトウェアスタックとプログラミング言語
20
© 2021 NTT DATA Corporation
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)
GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
Sparkのソフトウェアスタックとプログラミング言語
後のスライドでもう少し解説
21
© 2021 NTT DATA Corporation
Sparkのソフトウェアスタックとプログラミング言語
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)
GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
22
© 2021 NTT DATA Corporation
Apache Sparkの基本 おさえておきたいポイント
① Apache SparkはOSSの並列分散処理系
 大量のデータを、何台もの計算機を用いて処理するために用いら
れる
② 分散処理を意識させないAPIで、シンプルにデータ処理を記述できる
 SQLや、SQLライクなAPIなどが提供されている
③ 様々な用途向けのライブラリが同梱されている
汎用的なデータ処理
機械学習
ストリーム処理
グラフ処理
Spark SQL
24
© 2021 NTT DATA Corporation
Spark SQLとは
 データセットをRDBMSのテーブルのように操作する手段を提供する
 DataFrameと呼ばれるテーブル表現に対してSQLに似たAPIでクエリを発行できる
 SQLで処理を記述することもできる
 カラムには名前やデータ型を付与でき、見通しの良いデータ処理の記述を可能にしている
id,name,date
0,aaa,2020-05-21
1,bbb,2020-06-03
2,ccc,2020-07-08
・・・
id
(Integer)
name
(String)
date
(Date)
0 aaa 2020-05-21
1 bbb 2020-06-03
2 ccc 2020-07-08
・・・
カラム名やデータ型は、明示的な指定だけでなく推論させることが可能
テーブル / DataFrame
25
© 2021 NTT DATA Corporation
クエリから最適化データフローを生成する
クエリエンジン
SQL APIを用いたデータ操作
• クエリのパース
• 実行プランの生成
• 意味解析
• 最適化
• RDD(Sparkの最もプリミティブなデータ表現)レベルで表現されたデータフロー
• 加工の仕方や順序などはクエリエンジンによって最適化済み
RDD
ロード 保存
RDD
加工 加工
RDD ・・・
26
© 2021 NTT DATA Corporation
クエリエンジンによる最適化
 RDDベースの処理を人手で記述する場合、プログラマが最適なデータフローを考える必要
があった
 Spark SQLではクエリエンジンが実行プランに対して、様々な最適化を適用する
 最適化の一例
 データフローの効率化
• 処理の順序の入れ替え
• 適切なJoinアルゴリズムの選択
 I/O量の削減
• 不要なカラムの読み込みを避ける (カラムプルーニング)
• 不要なパーティションの読み込みを避ける (パーティションプルーニング)
• フィルタリングをデータソース側に移譲する (フィルタプシュダウン)
 etc
27
© 2021 NTT DATA Corporation
実行プランに対して適用される最適化の例
論理プラン
クエリの内容から生成される
最初の実行プラン
Filter
Join
dimension
table
fact table
28
© 2021 NTT DATA Corporation
実行プランに対して適用される最適化の例
ジョインの前にフィルタできると判
断されたら、順序を入れ替える
(ジョインの負荷が下がる)。
論理プラン 最適化済み論理プラン
クエリの内容から生成される
最初の実行プラン
Filter
Join
dimension
table
fact table
Filter
Join
dimension
table
fact table
29
© 2021 NTT DATA Corporation
実行プランに対して適用される最適化の例
Filter
Join
dimension
table
fact table
Filter
Join
dimension
table
Broadcast Hash
Join
Scan Scan
+
Filter
• ジョインなどは具体的なア
ルゴリズムが選択される
• データソースの機能を利
用して、フィルタをプッシュ
ダウンできる場合もある
ジョインの前にフィルタできると判
断されたら、順序を入れ替える
(ジョインの負荷が下がる)。
fact table
論理プラン 最適化済み論理プラン 物理プラン
クエリの内容から生成される
最初の実行プラン
30
© 2021 NTT DATA Corporation
Spark SQLのオプティマイザの進化はめざましい
Spark 1.x
ルールベース
Spark 2.x
ルールベース + コストベース
31
© 2021 NTT DATA Corporation
Spark SQLのオプティマイザの進化はめざましい
Spark 1.x
ルールベース
Spark 2.x
ルールベース + コストベース
Spark 3.x
ルールベース + コストベース + ランタイムベース
処理の途中で得られた、推定ではない実際の情報をもとに、
適応的に実行プランの最適化が行われるようになった
32
© 2021 NTT DATA Corporation
ランタイムの最適化の一例(ジョインアルゴリズムの動的な変更)
Scan + Filter
Sort Merge Join
Scan
対象のデータサイズは100GB
Sort Sort
33
© 2021 NTT DATA Corporation
ランタイムの最適化の一例(ジョインアルゴリズムの動的な変更)
Scan + Filter
Sort Merge Join
Scan
対象のデータサイズは100GB
実際に読んだのは
10MB
Sort Sort
34
© 2021 NTT DATA Corporation
ランタイムの最適化の一例(ジョインアルゴリズムの動的な変更)
Scan + Filter
Sort Merge Join
Scan
Scan + Filter
Broadcast Hash Join
Scan
対象のデータサイズは100GB
実際に読んだのは
10MB
Sort Sort
実行時に判明したデータサイズに基づいて、
片方のデータサイズが小さい場合に最適な
ジョインアルゴリズムに変更
35
© 2021 NTT DATA Corporation
Spark SQLをベースとするコンポーネントも増えてきた
 他のコンポーネントも、Spark SQLをベースとしたものになってきた
 MLlib(spark.mlパッケージ)
 Structured Streaming
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)
GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
36
© 2021 NTT DATA Corporation
Spark SQL おさえておきたいポイント
① SQLなどで、テーブルを操作するようにデータ処理を記述可能にする
② アプリ開発者が記述した処理の内容に基づいて、最適なデータフローを
構成してくれる
 Spark SQL普及以前は、人手で最適なデータフローを構成する
必要があった
③ オプティマイザは日々進化し続けている
 Spark 3.0ではランタイムの最適化も導入された
④ Spark SQLは昨今のSparkにおける中心的なコンポーネント
 Sparkの様々なコンポーネントが、Spark SQLをベースとしたもの
が増えてきた
Sparkの動作環境
38
© 2021 NTT DATA Corporation
Sparkの動作環境
 Sparkを動かすには、複数のサーバで構成されたクラスタが必要
 利用するサーバは、IAサーバなどコモディティなものでよい
 YARNやKubernetes、Mesosといった既存のクラスタマネージャで管理
されたクラスタ上で動作する
 Sparkに同梱されているStandalone Clusterと呼ばれるクラスタマネー
ジャを利用することもできる
39
© 2021 NTT DATA Corporation
Sparkの動作環境
 Sparkを動かすには、複数のサーバで構成されたクラスタが必要
 利用するサーバは、IAサーバなどコモディティなものでよい
 YARNやKubernetes、Mesosといった既存のクラスタマネージャで管理
されたクラスタ上で動作する
 Sparkに同梱されているStandalone Clusterと呼ばれるクラスタマネー
ジャを利用することもできる
 クラウドサービスでSparkを利用することも可能
 Amazon Web Services: Amazon EMR
 Microsoft Azure: HDInsight
 Google Cloud Platform: Dataproc
 Databricks
Pythonユーザ向けの
注目のアップデート
41
© 2021 NTT DATA Corporation
Spark 3.0以降でPythonユーザ向けに大幅なアップデートが行われている
 昨今はPySparkで分析処理を行うユーザが増えており、その状況を鑑みたアップデートが
行われている
 もともとデータ分析の分野ではPythonが人気
 アップデートの一例
 Pythonicなエラーメッセージ (Spark 3.0)
 ビルトイン関数を含むPySparkのAPIがタイプヒントに対応 (Spark 3.1)
• IDEの補完機能と組み合わせたり、静的エラー解析が効くようになる
 公式ドキュメントの大幅な改善 (Spark 3.1)
• 目的のコンテンツを探しやすいように構造化
• クイックスタートガイドやサンプルコードも充実
• APIドキュメントも従来のreSTスタイルからnumpydocスタイルに変更(APIの
docstringの可読性が向上した)
 pandas APIのサポート (次期フィーチャーリリースのSpark 3.2での導入を予定)
42
© 2021 NTT DATA Corporation
Spark 3.0以降でPythonユーザ向けに大幅なアップデートが行われている
 昨今はPySparkで分析処理を行うユーザが増えており、その状況を鑑みたアップデートが
行われている
 もともとデータ分析の分野ではPythonが人気
 アップデートの一例
 Pythonicなエラーメッセージ (Spark 3.0)
 ビルトイン関数を含むPySparkのAPIがタイプヒントに対応 (Spark 3.1)
• IDEの補完機能と組み合わせたり、静的エラー解析が効くようになる
 公式ドキュメントの大幅な改善 (Spark 3.1)
• 目的のコンテンツを探しやすいように構造化
• クイックスタートガイドやサンプルコードも充実
• APIドキュメントも従来のreSTスタイルからnumpydocスタイルに変更(APIの
docstringの可読性が向上した)
 pandas APIのサポート (次期フィーチャーリリースのSpark 3.2での導入を予定)
Pick Up!
43
© 2021 NTT DATA Corporation
ブラッシュアップされたドキュメント
https://spark.apache.org/docs/latest/api/python/getting_started/index.html
従来はPySpark向けのドキュ
メントが整理されていなかったが、
Spark 3.1以降でまとまったも
のが提供されるようになった
44
© 2021 NTT DATA Corporation
ブラッシュアップされたドキュメント
https://spark.apache.org/docs/latest/api/python/getting_started/index.html
探したいコンテンツを見つけ
やすいように、ナビゲーション
が追加された
インストールガイドやクイック
スタートガイドも整備された
45
© 2021 NTT DATA Corporation
ブラッシュアップされたドキュメント
Spark 3.0までのAPIドキュメント Spark 3.1からのAPIドキュメント
コンポーネントごとにカテゴライズされ、
目的のAPIが探しやすい
https://spark.apache.org/docs/latest/api/python/reference/index.html
46
© 2021 NTT DATA Corporation
Spark 3.0以降でPythonユーザ向けに大幅なアップデートが行われている
 昨今はPySparkで分析処理を行うユーザが増えており、その状況を鑑みたアップデートが
行われている
 もともとデータ分析の分野ではPythonが人気
 アップデートの一例
 Pythonicなエラーメッセージ (Spark 3.0)
 ビルトイン関数を含むPySparkのAPIがタイプヒントに対応 (Spark 3.1)
• IDEの補完機能と組み合わせたり、静的エラー解析が効くようになる
 公式ドキュメントの大幅な改善 (Spark 3.1)
• 目的のコンテンツを探しやすいように構造化
• クイックスタートガイドやサンプルコードも充実
• APIドキュメントも従来のreSTスタイルからnumpydocスタイルに変更(APIの
docstringの可読性が向上した)
 pandas APIのサポート (次期フィーチャーリリースのSpark 3.2での導入を予定)
Pick Up!
47
© 2021 NTT DATA Corporation
データ分析では人気のpandas。でも計算機1台で処理しきれなくなったら・・・?
 pandasはデータ分析で用いられるデファクトスタンダードなライブラリのひとつだ
が、単一の計算機で処理しきれないデータを扱う場合にはpandas以外の
方法を検討する必要があった
 PySparkは選択肢のひとつとなり得るが、既存の資産を流用できなかったり、
従来pandasを利用してきたユーザにとって使いやすいAPIではなかった
 そこで、Koalasと呼ばれるプロジェクトが立ち上がった
48
© 2021 NTT DATA Corporation
What is Koalas?
 Koalas
 pandas互換のAPIで、Sparkのアプリケーションを
記述可能にする
 pandasユーザが、使い慣れたAPIそのままに処理を
スケールアウトさせられる
 https://github.com/databricks/koalas
 類似プロダクトのDaskと比較して、5倍程度高速という結果もレポートされて
いる
 https://www.slideshare.net/databricks/koalas-how-well-
does-koalas-work
 さらにSpark 3.2からは、Sparkの標準機能として使えるようになる見込み
 https://issues.apache.org/jira/browse/SPARK-34849
49
© 2021 NTT DATA Corporation
Koalas / pandas API on Sparkを用いたSparkアプリケーション記述例
import pandas as pd
df = pd.read_csv(file)
df['x'] = df.y * df.z
df.describe()
df.plot.line(...)
import databricks.koalas as ks
df = ks.read_csv(file)
df['x'] = df.y * df.z
df.describe()
df.plot.line(...)
import pyspark.pandas as ps
df = ps.read_csv(file)
df['x'] = df.y * df.z
df.describe()
df.plot.line(...)
Pandas Koalas
pandas API on Spark(Spark 3.2)
50
© 2021 NTT DATA Corporation
プロットもサポート
引用: https://www.slideshare.net/databricks/deep-dive-into-the-new-features-of-apache-spark-31
PandasやKoalasで実装済みのプロットを、Spark 3.2でも利用可能になる見込み
51
© 2021 NTT DATA Corporation
https://spark.apache.org/docs/l
atest/api/python/index.htmlから、
「Live Notebook」リンクをクリックし
てLive Notebookにアクセス
まずはLive Notebookを使って、Webブラウザから試してみてください!
※ 2021/7/28現在、Spark 3.1.2の機能を試すことができる
52
© 2021 NTT DATA Corporation
Pythonユーザ向けの注目のアップデート おさえておきたいポイント
① エラーメッセージが、Pythonユーザにとってわかりやすいものに改善された
② PySparkのAPIがタイプヒントに対応した
 IDEと連携して補完や静的エラー解析が期待できる
③ ドキュメントの大幅なブラッシュアップが行われた
 構造化され、探したいコンテンツを見つけやすい
④ さらにSpark 3.2では、pandas APIでSparkアプリケーションが記述できる
ようになる
 既存のpandasユーザが資産を流用したり、使い慣れたAPIを利用し
つつ、処理をスケールアウトさせられる
© 2021 NTT DATA Corporation
後半
Apache Sparkコミュニティに飛び込もう
54
© 2021 NTT DATA Corporation
いちユーザの枠を超えてApache Sparkと関わる
 いちユーザとしてSparkを利用するだけではなく、Sparkコミュニティに参加することで得られ
るメリットがある
 開発に関わるもよし、情報収集の場として活用するもよし
 開発に関わることで、自分たちが使うものをよりよく育てることにつながる
 日本人の感覚(品質や細かい部分の作りこみ)をSparkの改善に活かしてほしい
• 安定性、運用のしやすさや、いざという時のトラブルシュートのしやすさなど
 コミュニティに向かって声を上げないと伝わらない
• 必要なものは必要だと伝えることが大事
 コミュニティと関わることで得られる情報がある
 開発動向がわかる
 不具合などの情報を得られる
 使っていて困ったことを質問できる
55
© 2021 NTT DATA Corporation
開発者としての参加の仕方もいろいろ
 Sparkの開発に参加する方法はパッチ投稿だけじゃない!
 JIRAへのIssue登録(バグ報告 / 機能追加提案 / 改善提案)
• 自分たちでパッチを書かなくても、登録するだけでもよい
• 声を上げることが大事(ただし機能追加や改善提案の場合は必然性もセットで)
 JIRAのメンテナンス
 パッチのレビュー
 メーリングリスト上での議論への参加
• ユーザ視点からの意見はSparkの改善にとって重要
 もちろん、パッチの投稿も歓迎!
 バグ修正
 機能追加
 ドキュメントの修正 / 充実化
56
© 2021 NTT DATA Corporation
そのパッチ、コミュニティに還元してください!
 秘蔵のパッチを適用し続けたSpark(だけではなくOSS全般)を運用し続けるメリットはあま
りない
 Sparkのメインストリームから乖離する
• それ、全部自分たちで保守し続けるんですか?
• 秘蔵パッチを当てたバイナリでトラブルが起こっても、コミュニティの人たちは面
倒見てくれない・・・
• マージコンフリクトだらけでバージョンアップが困難になる
• いつのまにかバージョンアップ不能なほどつぎはぎだらけに・・・
 パッチの品質
• 場当たり的なパッチ (当面の問題は解決しているが、別の部分に悪影響をもた
らしているかも・・・?)
• コミッタを含む、コミュニティの人たちからレビューを受けたほうが良い
 パッチがマージされるとリリースノートにクレジットされる
57
© 2021 NTT DATA Corporation
メーリングリストの活用
 情報収集/交換の手段としてメーリングリストが活用できる
 Sparkのメーリングリストは2種類
 user@spark.apache.org
• ユーザ向け
• ユーザ同士の情報交換などに利用できる
• トラブル発生時の質問、Spark関係の宣伝などもこちら
 dev@spark.apache.org
• 開発者向け(コミッタ以外の開発者も)
• リリースや各種決めごとの投票に関する情報などが流れる
• 開発者が留意すべきメンテナンス方針や開発方針がアナウンスされる
• パッチを投稿する人は購読したほうが良い
• あとはCIインフラのダウンに関するアナウンスなど・・・
58
© 2021 NTT DATA Corporation
そうは言っても参加のハードルが高いのでは?
 でも、パッチを投稿しようにもコードとか書けないし・・・。
 ドキュメントの修正やブラッシュアップのパッチならコードが書けなくても大丈夫
 パッチを投稿する以外にも貢献の仕方がある!
 やりとりは英語なんでしょ?
 そのとおり・・・。でも大丈夫。意外と通じる!
 マサカリとか飛んでくるんじゃないかと・・・
 コードレビューでおびただしい指摘を受けることもあるが、紳士的にコードやアプローチ
の良し悪しについての指摘に閉じている
 間違えても大丈夫
 手順やお作法がありそれに則って進めるべきだが、間違えていたら教えてくれる
© 2021 NTT DATA Corporation
Issue登録やパッチを投稿をしてみよう
60
© 2021 NTT DATA Corporation
バグ報告 / 機能追加 / 改善提案とパッチの投稿
 SparkではIssue登録(バグ報告 / 機能追加 / 改善提案)にJIRAを、パッチの投稿や
レビューにGitHubを利用している
 JIRA
• https://issues.apache.org/jira/browse/SPARK
• 単にバグレポートをする場合はこちら
 GitHub
• https://github.com/apache/spark
• パッチを投稿する場合はこちら。プルリクエストの形でパッチを投稿する
 詳細はhttps://spark.apache.org/contributing.htmlに記載されているが、以降
のスライドで簡単な手順を紹介する
61
© 2021 NTT DATA Corporation
Issue登録 (1/4)
 SparkのJIRAにアクセスする
 https://issues.apache.org/jira/browse/SPARK
 あらかじめログインしておく(事前にユーザ登録が必要)
 ページ右上のLog inリンクからログイン/ユーザ登録が可能
 ページ上部のCreateボタンを押してバグ報告のフォームを開く
 ログインするまでCreateボタンは表示されないので注意
62
© 2021 NTT DATA Corporation
Issue登録 (2/4)
 項目がいろいろあるが、以下の項目を埋めればOK(ほとんどプルダウンメニュー)
① Project
 「Spark」になっていること
② Issue Type
 バグ/新機能/改善などの分類
③ Summary
 一目で内容が分かるタイトル
• Add 〜 (〜機能を追加しよう)
• Fix 〜 (〜を修正しよう)
• 〜 doesn't work (〜が動かない)
63
© 2021 NTT DATA Corporation
Issue登録 (3/4)
④ Priority
 重要度(Blocker / Critical / Major / Minor / Trivial)
• ユーザやリリースへの影響によって選ぶ
• 内容に対して重要度がマッチしないと判断されたら単に修正されるだけなので、
開発に携わりながら感覚を掴んでいけばOK
⑤ Component/s
 報告の対象コンポーネント
⑥ Affect Version/s
 影響を受けるSparkのバージョン
64
© 2021 NTT DATA Corporation
Issue登録 (4/4)
⑦ Description
 詳しい説明
• 〜という操作をしたら〜という例外が送出された + サンプルコードなど
• 〜という効果が得られるので〜の機能を追加しよう
⑧ Environment
 バグをレポートする場合などは、OSやJVMなど環境情報も記入するのがよい
65
© 2021 NTT DATA Corporation
GitHubでプルリクエストの投稿手順
 細かい手順は割愛するが、大体以下の手順でプルリクエストを投げる
① SparkのGitリポジトリを自分のGitHubアカウントにフォークする(最初の1回でOK)
② フォークしたリポジトリを手元の環境にクローン(最初の1回でOK)
③ トピックブランチを作る(パッチ投稿するたびに実施)
• プルリクエストを投稿しようとしているブランチをもとに、新しいブランチを作る
• 次期最新リリース向けのパッチの場合はmasterブランチをベースにする
• 3.1系向けにパッチを投稿しようとしている場合はbranch-3.1をベースにする
④ 修正してコミット
⑤ フォークしたリポジトリにPushするとGitHubからプルリクエストが投稿できる
66
© 2021 NTT DATA Corporation
GitHubでプルリクエストを投稿してからマージまでの流れ
 テストを通す
 投稿されたプルリクエストに対して裏で単体テストが走る。
 新規の参加者はプルリクエストを投げても自動的にテストが走らない。コミッタが
Jenkinsに命令してテストを走行してくれるのを待つ
• GitHubの機能でレビュアがサジェストされるので、お願いしてみてみるのも手
 マージ件数が多くなると、コミッタがJenkinsを使役する権利を付与してくれる
• やりとりの中で「add to whitelist」と言われたら権限が付与されたことになる
• テストが自動的に走行するようになる
• 明示的にJenkinsにテストを依頼することができる(Jenkins, retest this
please.)
 指摘事項に対応する
 修正したコードをコミット&Push
 裏で走行しているテストが通り、コミッタがマージしてもよいと判断したら晴れてマージ
67
© 2021 NTT DATA Corporation
GitHubでプルリクエストを投稿する際の注意 - タイトル -
 タイトルのつけ方に注意
 「[対応するJIRAのチケット番号][コンポーネント名] タイトル」が基本形
• [SPARK-XXXX][SQL] Add new function to 〜
 タイトルはJIRAからコピーでOK
 コンポーネント名はJIRAで選択できるものと微妙に表記が異なるが、他のプルリクエ
ストを真似したり、指摘を受けながら覚えていけばよい
• CORE: Spark Core
• SS: Structured Streaming
• DOCS: Documentation
• ほかにも・・・
 masterブランチ以外のブランチにプルリクエストを投稿する場合は[ブランチ名]のタグ
をつける
 [SPARK-XXXX][3.1][MLlib] 〜
68
© 2021 NTT DATA Corporation
GitHubでプルリクエストを投稿する際の注意 - プルリクエストの説明 -
 GitHub上でもプルリクエストの目的などを書く(テンプレートに従って記述する)
 What changes were proposed in this pull request?
• プルリクエストで何を変更しようとしているのか
 Why are the changes needed?
• なぜその変更が必要なのか
 Does this PR introduce any user-facing change?
• ユーザに影響があるか
 How was this patch tested?
 どうやってテストしたか
 スクリーンショットも貼り付けられるので、WebUIなど見た目に関する変更を行う場合は
Before / Afterの画像を貼り付ける
 基本的にはテストコードも含めるべきだが、手動での動作確認が許容される場合もある
 この場合は実際に確認に使用したコードスニペットや、確認した手順/環境、何を確
認したかなどを記述するのが良い
© 2021 NTT DATA Corporation
コミュニケーションの仕方や
コミュニティでのふるまい方
70
© 2021 NTT DATA Corporation
英語でのコミュニケーション
 メーリングリストやJIRA/GitHub上での議論は英語だが、意外と簡単な英語でも通じ
る!
 私も英語は苦手ですが、なんとか(?)やれています・・・。
 語順と時制が合っていれば大体通じる
 時制の間違いも、特に混乱をきたさない場合は大体空気を読んでくれる
 複雑なことを説明する際無理に長い文章にせず、箇条書きに
すると伝わりやすい
 他人が使っているフレーズをまねるのもよし
 GitHubや上での議論やメーリングリストでのやりとり
 もし自分の理解が怪しい時には、素直に確認すればOK
 You mean 〜 right? (〜ってこと?)
 とはいえ、英語上達の努力を怠ってはいけない・・・
71
© 2021 NTT DATA Corporation
(余談) GitHubやJIRA上でよく見かける略語
略語 元々の表現 意味 シチュエーション
LGTM / SGTM Looks / Seems good
to me
よさそうです パッチやアイディアなどに
ついてのコメント。主にレ
ビュアーやコミッタが使う
IMO / IMHO In my (humble)
opinion
私の考えでは〜 議論の中で使われる。
意見が対立した時など
FYI For your information 補足情報など
AFAIK As far as I know 知る限り〜 わりとどこでも
BTW By the way ところで 話題転換
a.k.a Also known as 〜としても知られていま
す
わりとどこでも
更に知りたい方はこちら(Spark界隈ではお目にかかったことが無いものもありますが・・・)
http://qiita.com/uasi/items/86c3a09d17792ab62dfe
72
© 2021 NTT DATA Corporation
コミュニティでやらないほうがよいこと
 JIRA / GitHubに質問を投稿する(意外とある)
 「そういうのはuser@spark.apache.orgに投稿しようね」とたしなめられる
 いきなり巨大なパッチを投稿する
 レビューする人も大変
 分割できるものは分割したり、大きな機能は事前にMLで議論するのが良い
 実効的な影響のない変更を加えるパッチを投稿する(意外とある)
 例えば変数名のタイポや無駄なimport文の除去など・・・
 何かの修正のついでに一緒に直したりするのがよい
 ユーザの目に触れるものなので、ドキュメントのタイポ修正は歓迎!
 他人を罵倒する
 粗悪なコードを憎んで人を憎まず。客観的に、コードのどの部分がどうよくないのか、ど
う修正した方が良いのか指摘するとOK
 Sparkコミュニティではあまり見たことない
© 2021 NTT DATA Corporation
イベントに参加しよう
74
© 2021 NTT DATA Corporation
Data + AI Summit (2020年11月開催より前はSpark + AI Summit)
 Sparkコミュニティ最大のイベント
 2013年から始まるイベント。当時の名称はSpark Summit
 世界中の開発者やユーザや開発者が一堂に会して、ユースケースや最新動向などが発表
される
 ここ数年はアメリカ西海岸とヨーロッパの年2回の開催(2020年6月開催からはオンライン
での実施)
 直近開催されたのは5/24 - 5/28のData + AI Summit North America
 F2Fで開発者と議論やコネクションづくりができる機会でもある
 主要な開発者は大体参加している
 メールでアポを取るのが望ましいが、その辺うろうろしていたら立ち話も
できるはず
 割と大きめの機能追加などを考えているのであれば、F2Fだと話が早かったり
 2020年からはオンライン開催になったが、コミュニケーションがとりやすいプラットフォー
ムが活用されており一方通行にならないようにイベントが運営されている
75
© 2021 NTT DATA Corporation
日本でもイベントが開催されている
 Spark Meetup Tokyo(不定期開催)
https://spark-meetup-tokyo.connpass.com
次回の開催は未定だが、決まったら@raspberry1123のアカウントで呟く予定
 Hadoopソースコードリーディング(不定期開催)
誰かがオーなシップを握っているわけではなく、実施したい人が日本Hadoopユーザ会の
メーリングリストに告知する形で行われるのが通例
Hadoopと言いつつ、実態はOSS分散処理基盤のMeetup
イベント名に反してソースコードリーディングに限らないので、ハードルは高くない
1週間くらい前にTwitterやメーリングリストで開催が告知される
 Hadoop / Spark Conference Japan(数年に1回くらいのペース)
これまでもSparkコミュニティのキーパーソンをして基調講演が行われた
次回の開催は未定だが、決まったら@raspberry1123のアカウントで呟く予定
まとめ
77
© 2021 NTT DATA Corporation
まとめ
 Apache Sparkの紹介
 Sparkは大量のデータを現実的な時間で処理するためのOSS並列分散処理系
 巨大なデータセットをテーブルのようなデータ構造に抽象化して処理を記述できる
 様々な用途に利用できるコンポーネントが同梱されている
 昨今はSpark SQLがSparkの中心的なコンポーネント
• シンプルに処理が記述できることに加え、最適化を施してくれる
• 最適化手法も進化し続けている
 Spark 3.0以降ではPythonユーザ向けのアップデートがたくさん盛り込まれた
 Apache Sparkコミュニティに飛び込もう
 開発に関われたり、いち早く最新動向が得られるのはOSSの利点
 直接開発に参加する以外にも、様々な参加の仕方がある
• バグレポートやメーリングリストでの議論への参加も立派なコントリビューション
 情報交換の場として、国内外で様々なイベントが開催されている
• 開発者や他のユーザと直接議論しやすい場でもある
© 2021 NTT DATA Corporation
本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)

  • 1.
    © 2021 NTTDATA Corporation 大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2021 Online/Kyotoエディション - 2021/7/30 株式会社NTTデータ 技術開発本部 猿田 浩輔 オープンソースカンファレンス2021 Online/Kyoto
  • 2.
    2 © 2021 NTTDATA Corporation $ whoami  猿田 浩輔  株式会社NTTデータ 技術開発本部  シニア・ソフトウェアエンジニア / Apache Sparkコミッタ & PMCメンバ  Hadoop/Sparkなど、OSSミドル関連のR&Dや技術支援  普及活動の一環で講演や書籍執筆なども  Twitter: @raspberry1123
  • 3.
    3 © 2021 NTTDATA Corporation 本日のお話  前半: Apache Sparkの紹介  Apache Sparkの基本  Spark SQL  Sparkの動作環境  Pythonユーザ向けの注目のアップデート  後半: Apache Sparkコミュニティへの参加の仕方  様々な参加の仕方の紹介  Apache Spark関連のイベント
  • 4.
  • 5.
  • 6.
    6 © 2021 NTTDATA Corporation 大量のデータ処理に困っていませんか? データ処理や分析に、何を使っていますか?
  • 7.
    7 © 2021 NTTDATA Corporation 大量のデータ処理に困っていませんか? データ処理や分析に、何を使っていますか? 1台のサーバでデータを処理しきれなくなった時、どうし ますか?
  • 8.
    8 © 2021 NTTDATA Corporation 大量のデータ処理に困っていませんか? データ処理や分析に、何を使っていますか? 1台のサーバでデータを処理しきれなくなった時、どうし ますか? そんな時に使えるのがApache です!
  • 9.
    9 © 2021 NTTDATA Corporation Apache Spark in a nutshell  Apache Sparkとは?  OSSの並列分散処理系
  • 10.
    10 © 2021 NTTDATA Corporation Apache Spark in a nutshell  Apache Sparkとは?  OSSの並列分散処理系 大量のデータセットを (数100GBs, TBs, PBs, 数千 万, 数億レコード)
  • 11.
    11 © 2021 NTTDATA Corporation Apache Spark in a nutshell  Apache Sparkとは?  OSSの並列分散処理系 複数台のサーバで構成された クラスタを用いて 大量のデータセットを (数100GBs, TBs, PBs, 数千 万, 数億レコード)
  • 12.
    12 © 2021 NTTDATA Corporation Apache Spark in a nutshell  Apache Sparkとは?  OSSの並列分散処理系 複数台のサーバで構成された クラスタを用いて 現実的な時間で処理する (数十分, 数時間のオーダー) 大量のデータセットを (数100GBs, TBs, PBs, 数千 万, 数億レコード)
  • 13.
    13 © 2021 NTTDATA Corporation Apache Spark in a nutshell  Apache Sparkとは?  OSSの並列分散処理系  並列分散処理に関する面倒な制御をSparkが肩代わりしてくれる。  エラーハンドリング  処理の分割やスケジューリング  etc 複数台のサーバで構成された クラスタを用いて 現実的な時間で処理する (数十分, 数時間のオーダー) 大量のデータセットを (数100GBs, TBs, PBs, 数千 万, 数億レコード)
  • 14.
    14 © 2021 NTTDATA Corporation データ処理ロジックの実装もシンプルに  プログラミングインターフェイスの観点からも、分散処理の複雑さを隠蔽  SQLライクなクエリやAPIを用いて、テーブルを操作するように分散処理を記述できる where select groupBy avg val df = spark.read.json("/path/to/dataset") val result = df.select("col1", "col2").where("col3 > 0") .groupBy("col1").avg("col2")
  • 15.
    15 © 2021 NTTDATA Corporation Sparkのソフトウェアスタックとプログラミング言語 Spark Core (実行エンジンおよび汎用的なデータ処理ライブラリ) Spark Streaming (ストリーム処理) Structured Streaming (ストリーム処理) GraphX (グラフ処理) MLlib (機械学習) Spark SQL (クエリ処理) SQL
  • 16.
    16 © 2021 NTTDATA Corporation Spark Core (実行エンジンおよび汎用的なデータ処理ライブラリ) Spark Streaming (ストリーム処理) Structured Streaming (ストリーム処理) GraphX (グラフ処理) MLlib (機械学習) Spark SQL (クエリ処理) SQL Sparkのソフトウェアスタックとプログラミング言語
  • 17.
    17 © 2021 NTTDATA Corporation Spark Core (実行エンジンおよび汎用的なデータ処理ライブラリ) Spark Streaming (ストリーム処理) Structured Streaming (ストリーム処理) GraphX (グラフ処理) MLlib (機械学習) Spark SQL (クエリ処理) SQL Sparkのソフトウェアスタックとプログラミング言語
  • 18.
    18 © 2021 NTTDATA Corporation Spark Core (実行エンジンおよび汎用的なデータ処理ライブラリ) Spark Streaming (ストリーム処理) Structured Streaming (ストリーム処理) GraphX (グラフ処理) MLlib (機械学習) Spark SQL (クエリ処理) SQL Sparkのソフトウェアスタックとプログラミング言語
  • 19.
    19 © 2021 NTTDATA Corporation Spark Core (実行エンジンおよび汎用的なデータ処理ライブラリ) Spark Streaming (ストリーム処理) Structured Streaming (ストリーム処理) GraphX (グラフ処理) MLlib (機械学習) Spark SQL (クエリ処理) SQL Sparkのソフトウェアスタックとプログラミング言語
  • 20.
    20 © 2021 NTTDATA Corporation Spark Core (実行エンジンおよび汎用的なデータ処理ライブラリ) Spark Streaming (ストリーム処理) Structured Streaming (ストリーム処理) GraphX (グラフ処理) MLlib (機械学習) Spark SQL (クエリ処理) SQL Sparkのソフトウェアスタックとプログラミング言語 後のスライドでもう少し解説
  • 21.
    21 © 2021 NTTDATA Corporation Sparkのソフトウェアスタックとプログラミング言語 Spark Core (実行エンジンおよび汎用的なデータ処理ライブラリ) Spark Streaming (ストリーム処理) Structured Streaming (ストリーム処理) GraphX (グラフ処理) MLlib (機械学習) Spark SQL (クエリ処理) SQL
  • 22.
    22 © 2021 NTTDATA Corporation Apache Sparkの基本 おさえておきたいポイント ① Apache SparkはOSSの並列分散処理系  大量のデータを、何台もの計算機を用いて処理するために用いら れる ② 分散処理を意識させないAPIで、シンプルにデータ処理を記述できる  SQLや、SQLライクなAPIなどが提供されている ③ 様々な用途向けのライブラリが同梱されている 汎用的なデータ処理 機械学習 ストリーム処理 グラフ処理
  • 23.
  • 24.
    24 © 2021 NTTDATA Corporation Spark SQLとは  データセットをRDBMSのテーブルのように操作する手段を提供する  DataFrameと呼ばれるテーブル表現に対してSQLに似たAPIでクエリを発行できる  SQLで処理を記述することもできる  カラムには名前やデータ型を付与でき、見通しの良いデータ処理の記述を可能にしている id,name,date 0,aaa,2020-05-21 1,bbb,2020-06-03 2,ccc,2020-07-08 ・・・ id (Integer) name (String) date (Date) 0 aaa 2020-05-21 1 bbb 2020-06-03 2 ccc 2020-07-08 ・・・ カラム名やデータ型は、明示的な指定だけでなく推論させることが可能 テーブル / DataFrame
  • 25.
    25 © 2021 NTTDATA Corporation クエリから最適化データフローを生成する クエリエンジン SQL APIを用いたデータ操作 • クエリのパース • 実行プランの生成 • 意味解析 • 最適化 • RDD(Sparkの最もプリミティブなデータ表現)レベルで表現されたデータフロー • 加工の仕方や順序などはクエリエンジンによって最適化済み RDD ロード 保存 RDD 加工 加工 RDD ・・・
  • 26.
    26 © 2021 NTTDATA Corporation クエリエンジンによる最適化  RDDベースの処理を人手で記述する場合、プログラマが最適なデータフローを考える必要 があった  Spark SQLではクエリエンジンが実行プランに対して、様々な最適化を適用する  最適化の一例  データフローの効率化 • 処理の順序の入れ替え • 適切なJoinアルゴリズムの選択  I/O量の削減 • 不要なカラムの読み込みを避ける (カラムプルーニング) • 不要なパーティションの読み込みを避ける (パーティションプルーニング) • フィルタリングをデータソース側に移譲する (フィルタプシュダウン)  etc
  • 27.
    27 © 2021 NTTDATA Corporation 実行プランに対して適用される最適化の例 論理プラン クエリの内容から生成される 最初の実行プラン Filter Join dimension table fact table
  • 28.
    28 © 2021 NTTDATA Corporation 実行プランに対して適用される最適化の例 ジョインの前にフィルタできると判 断されたら、順序を入れ替える (ジョインの負荷が下がる)。 論理プラン 最適化済み論理プラン クエリの内容から生成される 最初の実行プラン Filter Join dimension table fact table Filter Join dimension table fact table
  • 29.
    29 © 2021 NTTDATA Corporation 実行プランに対して適用される最適化の例 Filter Join dimension table fact table Filter Join dimension table Broadcast Hash Join Scan Scan + Filter • ジョインなどは具体的なア ルゴリズムが選択される • データソースの機能を利 用して、フィルタをプッシュ ダウンできる場合もある ジョインの前にフィルタできると判 断されたら、順序を入れ替える (ジョインの負荷が下がる)。 fact table 論理プラン 最適化済み論理プラン 物理プラン クエリの内容から生成される 最初の実行プラン
  • 30.
    30 © 2021 NTTDATA Corporation Spark SQLのオプティマイザの進化はめざましい Spark 1.x ルールベース Spark 2.x ルールベース + コストベース
  • 31.
    31 © 2021 NTTDATA Corporation Spark SQLのオプティマイザの進化はめざましい Spark 1.x ルールベース Spark 2.x ルールベース + コストベース Spark 3.x ルールベース + コストベース + ランタイムベース 処理の途中で得られた、推定ではない実際の情報をもとに、 適応的に実行プランの最適化が行われるようになった
  • 32.
    32 © 2021 NTTDATA Corporation ランタイムの最適化の一例(ジョインアルゴリズムの動的な変更) Scan + Filter Sort Merge Join Scan 対象のデータサイズは100GB Sort Sort
  • 33.
    33 © 2021 NTTDATA Corporation ランタイムの最適化の一例(ジョインアルゴリズムの動的な変更) Scan + Filter Sort Merge Join Scan 対象のデータサイズは100GB 実際に読んだのは 10MB Sort Sort
  • 34.
    34 © 2021 NTTDATA Corporation ランタイムの最適化の一例(ジョインアルゴリズムの動的な変更) Scan + Filter Sort Merge Join Scan Scan + Filter Broadcast Hash Join Scan 対象のデータサイズは100GB 実際に読んだのは 10MB Sort Sort 実行時に判明したデータサイズに基づいて、 片方のデータサイズが小さい場合に最適な ジョインアルゴリズムに変更
  • 35.
    35 © 2021 NTTDATA Corporation Spark SQLをベースとするコンポーネントも増えてきた  他のコンポーネントも、Spark SQLをベースとしたものになってきた  MLlib(spark.mlパッケージ)  Structured Streaming Spark Core (実行エンジンおよび汎用的なデータ処理ライブラリ) Spark Streaming (ストリーム処理) Structured Streaming (ストリーム処理) GraphX (グラフ処理) MLlib (機械学習) Spark SQL (クエリ処理)
  • 36.
    36 © 2021 NTTDATA Corporation Spark SQL おさえておきたいポイント ① SQLなどで、テーブルを操作するようにデータ処理を記述可能にする ② アプリ開発者が記述した処理の内容に基づいて、最適なデータフローを 構成してくれる  Spark SQL普及以前は、人手で最適なデータフローを構成する 必要があった ③ オプティマイザは日々進化し続けている  Spark 3.0ではランタイムの最適化も導入された ④ Spark SQLは昨今のSparkにおける中心的なコンポーネント  Sparkの様々なコンポーネントが、Spark SQLをベースとしたもの が増えてきた
  • 37.
  • 38.
    38 © 2021 NTTDATA Corporation Sparkの動作環境  Sparkを動かすには、複数のサーバで構成されたクラスタが必要  利用するサーバは、IAサーバなどコモディティなものでよい  YARNやKubernetes、Mesosといった既存のクラスタマネージャで管理 されたクラスタ上で動作する  Sparkに同梱されているStandalone Clusterと呼ばれるクラスタマネー ジャを利用することもできる
  • 39.
    39 © 2021 NTTDATA Corporation Sparkの動作環境  Sparkを動かすには、複数のサーバで構成されたクラスタが必要  利用するサーバは、IAサーバなどコモディティなものでよい  YARNやKubernetes、Mesosといった既存のクラスタマネージャで管理 されたクラスタ上で動作する  Sparkに同梱されているStandalone Clusterと呼ばれるクラスタマネー ジャを利用することもできる  クラウドサービスでSparkを利用することも可能  Amazon Web Services: Amazon EMR  Microsoft Azure: HDInsight  Google Cloud Platform: Dataproc  Databricks
  • 40.
  • 41.
    41 © 2021 NTTDATA Corporation Spark 3.0以降でPythonユーザ向けに大幅なアップデートが行われている  昨今はPySparkで分析処理を行うユーザが増えており、その状況を鑑みたアップデートが 行われている  もともとデータ分析の分野ではPythonが人気  アップデートの一例  Pythonicなエラーメッセージ (Spark 3.0)  ビルトイン関数を含むPySparkのAPIがタイプヒントに対応 (Spark 3.1) • IDEの補完機能と組み合わせたり、静的エラー解析が効くようになる  公式ドキュメントの大幅な改善 (Spark 3.1) • 目的のコンテンツを探しやすいように構造化 • クイックスタートガイドやサンプルコードも充実 • APIドキュメントも従来のreSTスタイルからnumpydocスタイルに変更(APIの docstringの可読性が向上した)  pandas APIのサポート (次期フィーチャーリリースのSpark 3.2での導入を予定)
  • 42.
    42 © 2021 NTTDATA Corporation Spark 3.0以降でPythonユーザ向けに大幅なアップデートが行われている  昨今はPySparkで分析処理を行うユーザが増えており、その状況を鑑みたアップデートが 行われている  もともとデータ分析の分野ではPythonが人気  アップデートの一例  Pythonicなエラーメッセージ (Spark 3.0)  ビルトイン関数を含むPySparkのAPIがタイプヒントに対応 (Spark 3.1) • IDEの補完機能と組み合わせたり、静的エラー解析が効くようになる  公式ドキュメントの大幅な改善 (Spark 3.1) • 目的のコンテンツを探しやすいように構造化 • クイックスタートガイドやサンプルコードも充実 • APIドキュメントも従来のreSTスタイルからnumpydocスタイルに変更(APIの docstringの可読性が向上した)  pandas APIのサポート (次期フィーチャーリリースのSpark 3.2での導入を予定) Pick Up!
  • 43.
    43 © 2021 NTTDATA Corporation ブラッシュアップされたドキュメント https://spark.apache.org/docs/latest/api/python/getting_started/index.html 従来はPySpark向けのドキュ メントが整理されていなかったが、 Spark 3.1以降でまとまったも のが提供されるようになった
  • 44.
    44 © 2021 NTTDATA Corporation ブラッシュアップされたドキュメント https://spark.apache.org/docs/latest/api/python/getting_started/index.html 探したいコンテンツを見つけ やすいように、ナビゲーション が追加された インストールガイドやクイック スタートガイドも整備された
  • 45.
    45 © 2021 NTTDATA Corporation ブラッシュアップされたドキュメント Spark 3.0までのAPIドキュメント Spark 3.1からのAPIドキュメント コンポーネントごとにカテゴライズされ、 目的のAPIが探しやすい https://spark.apache.org/docs/latest/api/python/reference/index.html
  • 46.
    46 © 2021 NTTDATA Corporation Spark 3.0以降でPythonユーザ向けに大幅なアップデートが行われている  昨今はPySparkで分析処理を行うユーザが増えており、その状況を鑑みたアップデートが 行われている  もともとデータ分析の分野ではPythonが人気  アップデートの一例  Pythonicなエラーメッセージ (Spark 3.0)  ビルトイン関数を含むPySparkのAPIがタイプヒントに対応 (Spark 3.1) • IDEの補完機能と組み合わせたり、静的エラー解析が効くようになる  公式ドキュメントの大幅な改善 (Spark 3.1) • 目的のコンテンツを探しやすいように構造化 • クイックスタートガイドやサンプルコードも充実 • APIドキュメントも従来のreSTスタイルからnumpydocスタイルに変更(APIの docstringの可読性が向上した)  pandas APIのサポート (次期フィーチャーリリースのSpark 3.2での導入を予定) Pick Up!
  • 47.
    47 © 2021 NTTDATA Corporation データ分析では人気のpandas。でも計算機1台で処理しきれなくなったら・・・?  pandasはデータ分析で用いられるデファクトスタンダードなライブラリのひとつだ が、単一の計算機で処理しきれないデータを扱う場合にはpandas以外の 方法を検討する必要があった  PySparkは選択肢のひとつとなり得るが、既存の資産を流用できなかったり、 従来pandasを利用してきたユーザにとって使いやすいAPIではなかった  そこで、Koalasと呼ばれるプロジェクトが立ち上がった
  • 48.
    48 © 2021 NTTDATA Corporation What is Koalas?  Koalas  pandas互換のAPIで、Sparkのアプリケーションを 記述可能にする  pandasユーザが、使い慣れたAPIそのままに処理を スケールアウトさせられる  https://github.com/databricks/koalas  類似プロダクトのDaskと比較して、5倍程度高速という結果もレポートされて いる  https://www.slideshare.net/databricks/koalas-how-well- does-koalas-work  さらにSpark 3.2からは、Sparkの標準機能として使えるようになる見込み  https://issues.apache.org/jira/browse/SPARK-34849
  • 49.
    49 © 2021 NTTDATA Corporation Koalas / pandas API on Sparkを用いたSparkアプリケーション記述例 import pandas as pd df = pd.read_csv(file) df['x'] = df.y * df.z df.describe() df.plot.line(...) import databricks.koalas as ks df = ks.read_csv(file) df['x'] = df.y * df.z df.describe() df.plot.line(...) import pyspark.pandas as ps df = ps.read_csv(file) df['x'] = df.y * df.z df.describe() df.plot.line(...) Pandas Koalas pandas API on Spark(Spark 3.2)
  • 50.
    50 © 2021 NTTDATA Corporation プロットもサポート 引用: https://www.slideshare.net/databricks/deep-dive-into-the-new-features-of-apache-spark-31 PandasやKoalasで実装済みのプロットを、Spark 3.2でも利用可能になる見込み
  • 51.
    51 © 2021 NTTDATA Corporation https://spark.apache.org/docs/l atest/api/python/index.htmlから、 「Live Notebook」リンクをクリックし てLive Notebookにアクセス まずはLive Notebookを使って、Webブラウザから試してみてください! ※ 2021/7/28現在、Spark 3.1.2の機能を試すことができる
  • 52.
    52 © 2021 NTTDATA Corporation Pythonユーザ向けの注目のアップデート おさえておきたいポイント ① エラーメッセージが、Pythonユーザにとってわかりやすいものに改善された ② PySparkのAPIがタイプヒントに対応した  IDEと連携して補完や静的エラー解析が期待できる ③ ドキュメントの大幅なブラッシュアップが行われた  構造化され、探したいコンテンツを見つけやすい ④ さらにSpark 3.2では、pandas APIでSparkアプリケーションが記述できる ようになる  既存のpandasユーザが資産を流用したり、使い慣れたAPIを利用し つつ、処理をスケールアウトさせられる
  • 53.
    © 2021 NTTDATA Corporation 後半 Apache Sparkコミュニティに飛び込もう
  • 54.
    54 © 2021 NTTDATA Corporation いちユーザの枠を超えてApache Sparkと関わる  いちユーザとしてSparkを利用するだけではなく、Sparkコミュニティに参加することで得られ るメリットがある  開発に関わるもよし、情報収集の場として活用するもよし  開発に関わることで、自分たちが使うものをよりよく育てることにつながる  日本人の感覚(品質や細かい部分の作りこみ)をSparkの改善に活かしてほしい • 安定性、運用のしやすさや、いざという時のトラブルシュートのしやすさなど  コミュニティに向かって声を上げないと伝わらない • 必要なものは必要だと伝えることが大事  コミュニティと関わることで得られる情報がある  開発動向がわかる  不具合などの情報を得られる  使っていて困ったことを質問できる
  • 55.
    55 © 2021 NTTDATA Corporation 開発者としての参加の仕方もいろいろ  Sparkの開発に参加する方法はパッチ投稿だけじゃない!  JIRAへのIssue登録(バグ報告 / 機能追加提案 / 改善提案) • 自分たちでパッチを書かなくても、登録するだけでもよい • 声を上げることが大事(ただし機能追加や改善提案の場合は必然性もセットで)  JIRAのメンテナンス  パッチのレビュー  メーリングリスト上での議論への参加 • ユーザ視点からの意見はSparkの改善にとって重要  もちろん、パッチの投稿も歓迎!  バグ修正  機能追加  ドキュメントの修正 / 充実化
  • 56.
    56 © 2021 NTTDATA Corporation そのパッチ、コミュニティに還元してください!  秘蔵のパッチを適用し続けたSpark(だけではなくOSS全般)を運用し続けるメリットはあま りない  Sparkのメインストリームから乖離する • それ、全部自分たちで保守し続けるんですか? • 秘蔵パッチを当てたバイナリでトラブルが起こっても、コミュニティの人たちは面 倒見てくれない・・・ • マージコンフリクトだらけでバージョンアップが困難になる • いつのまにかバージョンアップ不能なほどつぎはぎだらけに・・・  パッチの品質 • 場当たり的なパッチ (当面の問題は解決しているが、別の部分に悪影響をもた らしているかも・・・?) • コミッタを含む、コミュニティの人たちからレビューを受けたほうが良い  パッチがマージされるとリリースノートにクレジットされる
  • 57.
    57 © 2021 NTTDATA Corporation メーリングリストの活用  情報収集/交換の手段としてメーリングリストが活用できる  Sparkのメーリングリストは2種類  user@spark.apache.org • ユーザ向け • ユーザ同士の情報交換などに利用できる • トラブル発生時の質問、Spark関係の宣伝などもこちら  dev@spark.apache.org • 開発者向け(コミッタ以外の開発者も) • リリースや各種決めごとの投票に関する情報などが流れる • 開発者が留意すべきメンテナンス方針や開発方針がアナウンスされる • パッチを投稿する人は購読したほうが良い • あとはCIインフラのダウンに関するアナウンスなど・・・
  • 58.
    58 © 2021 NTTDATA Corporation そうは言っても参加のハードルが高いのでは?  でも、パッチを投稿しようにもコードとか書けないし・・・。  ドキュメントの修正やブラッシュアップのパッチならコードが書けなくても大丈夫  パッチを投稿する以外にも貢献の仕方がある!  やりとりは英語なんでしょ?  そのとおり・・・。でも大丈夫。意外と通じる!  マサカリとか飛んでくるんじゃないかと・・・  コードレビューでおびただしい指摘を受けることもあるが、紳士的にコードやアプローチ の良し悪しについての指摘に閉じている  間違えても大丈夫  手順やお作法がありそれに則って進めるべきだが、間違えていたら教えてくれる
  • 59.
    © 2021 NTTDATA Corporation Issue登録やパッチを投稿をしてみよう
  • 60.
    60 © 2021 NTTDATA Corporation バグ報告 / 機能追加 / 改善提案とパッチの投稿  SparkではIssue登録(バグ報告 / 機能追加 / 改善提案)にJIRAを、パッチの投稿や レビューにGitHubを利用している  JIRA • https://issues.apache.org/jira/browse/SPARK • 単にバグレポートをする場合はこちら  GitHub • https://github.com/apache/spark • パッチを投稿する場合はこちら。プルリクエストの形でパッチを投稿する  詳細はhttps://spark.apache.org/contributing.htmlに記載されているが、以降 のスライドで簡単な手順を紹介する
  • 61.
    61 © 2021 NTTDATA Corporation Issue登録 (1/4)  SparkのJIRAにアクセスする  https://issues.apache.org/jira/browse/SPARK  あらかじめログインしておく(事前にユーザ登録が必要)  ページ右上のLog inリンクからログイン/ユーザ登録が可能  ページ上部のCreateボタンを押してバグ報告のフォームを開く  ログインするまでCreateボタンは表示されないので注意
  • 62.
    62 © 2021 NTTDATA Corporation Issue登録 (2/4)  項目がいろいろあるが、以下の項目を埋めればOK(ほとんどプルダウンメニュー) ① Project  「Spark」になっていること ② Issue Type  バグ/新機能/改善などの分類 ③ Summary  一目で内容が分かるタイトル • Add 〜 (〜機能を追加しよう) • Fix 〜 (〜を修正しよう) • 〜 doesn't work (〜が動かない)
  • 63.
    63 © 2021 NTTDATA Corporation Issue登録 (3/4) ④ Priority  重要度(Blocker / Critical / Major / Minor / Trivial) • ユーザやリリースへの影響によって選ぶ • 内容に対して重要度がマッチしないと判断されたら単に修正されるだけなので、 開発に携わりながら感覚を掴んでいけばOK ⑤ Component/s  報告の対象コンポーネント ⑥ Affect Version/s  影響を受けるSparkのバージョン
  • 64.
    64 © 2021 NTTDATA Corporation Issue登録 (4/4) ⑦ Description  詳しい説明 • 〜という操作をしたら〜という例外が送出された + サンプルコードなど • 〜という効果が得られるので〜の機能を追加しよう ⑧ Environment  バグをレポートする場合などは、OSやJVMなど環境情報も記入するのがよい
  • 65.
    65 © 2021 NTTDATA Corporation GitHubでプルリクエストの投稿手順  細かい手順は割愛するが、大体以下の手順でプルリクエストを投げる ① SparkのGitリポジトリを自分のGitHubアカウントにフォークする(最初の1回でOK) ② フォークしたリポジトリを手元の環境にクローン(最初の1回でOK) ③ トピックブランチを作る(パッチ投稿するたびに実施) • プルリクエストを投稿しようとしているブランチをもとに、新しいブランチを作る • 次期最新リリース向けのパッチの場合はmasterブランチをベースにする • 3.1系向けにパッチを投稿しようとしている場合はbranch-3.1をベースにする ④ 修正してコミット ⑤ フォークしたリポジトリにPushするとGitHubからプルリクエストが投稿できる
  • 66.
    66 © 2021 NTTDATA Corporation GitHubでプルリクエストを投稿してからマージまでの流れ  テストを通す  投稿されたプルリクエストに対して裏で単体テストが走る。  新規の参加者はプルリクエストを投げても自動的にテストが走らない。コミッタが Jenkinsに命令してテストを走行してくれるのを待つ • GitHubの機能でレビュアがサジェストされるので、お願いしてみてみるのも手  マージ件数が多くなると、コミッタがJenkinsを使役する権利を付与してくれる • やりとりの中で「add to whitelist」と言われたら権限が付与されたことになる • テストが自動的に走行するようになる • 明示的にJenkinsにテストを依頼することができる(Jenkins, retest this please.)  指摘事項に対応する  修正したコードをコミット&Push  裏で走行しているテストが通り、コミッタがマージしてもよいと判断したら晴れてマージ
  • 67.
    67 © 2021 NTTDATA Corporation GitHubでプルリクエストを投稿する際の注意 - タイトル -  タイトルのつけ方に注意  「[対応するJIRAのチケット番号][コンポーネント名] タイトル」が基本形 • [SPARK-XXXX][SQL] Add new function to 〜  タイトルはJIRAからコピーでOK  コンポーネント名はJIRAで選択できるものと微妙に表記が異なるが、他のプルリクエ ストを真似したり、指摘を受けながら覚えていけばよい • CORE: Spark Core • SS: Structured Streaming • DOCS: Documentation • ほかにも・・・  masterブランチ以外のブランチにプルリクエストを投稿する場合は[ブランチ名]のタグ をつける  [SPARK-XXXX][3.1][MLlib] 〜
  • 68.
    68 © 2021 NTTDATA Corporation GitHubでプルリクエストを投稿する際の注意 - プルリクエストの説明 -  GitHub上でもプルリクエストの目的などを書く(テンプレートに従って記述する)  What changes were proposed in this pull request? • プルリクエストで何を変更しようとしているのか  Why are the changes needed? • なぜその変更が必要なのか  Does this PR introduce any user-facing change? • ユーザに影響があるか  How was this patch tested?  どうやってテストしたか  スクリーンショットも貼り付けられるので、WebUIなど見た目に関する変更を行う場合は Before / Afterの画像を貼り付ける  基本的にはテストコードも含めるべきだが、手動での動作確認が許容される場合もある  この場合は実際に確認に使用したコードスニペットや、確認した手順/環境、何を確 認したかなどを記述するのが良い
  • 69.
    © 2021 NTTDATA Corporation コミュニケーションの仕方や コミュニティでのふるまい方
  • 70.
    70 © 2021 NTTDATA Corporation 英語でのコミュニケーション  メーリングリストやJIRA/GitHub上での議論は英語だが、意外と簡単な英語でも通じ る!  私も英語は苦手ですが、なんとか(?)やれています・・・。  語順と時制が合っていれば大体通じる  時制の間違いも、特に混乱をきたさない場合は大体空気を読んでくれる  複雑なことを説明する際無理に長い文章にせず、箇条書きに すると伝わりやすい  他人が使っているフレーズをまねるのもよし  GitHubや上での議論やメーリングリストでのやりとり  もし自分の理解が怪しい時には、素直に確認すればOK  You mean 〜 right? (〜ってこと?)  とはいえ、英語上達の努力を怠ってはいけない・・・
  • 71.
    71 © 2021 NTTDATA Corporation (余談) GitHubやJIRA上でよく見かける略語 略語 元々の表現 意味 シチュエーション LGTM / SGTM Looks / Seems good to me よさそうです パッチやアイディアなどに ついてのコメント。主にレ ビュアーやコミッタが使う IMO / IMHO In my (humble) opinion 私の考えでは〜 議論の中で使われる。 意見が対立した時など FYI For your information 補足情報など AFAIK As far as I know 知る限り〜 わりとどこでも BTW By the way ところで 話題転換 a.k.a Also known as 〜としても知られていま す わりとどこでも 更に知りたい方はこちら(Spark界隈ではお目にかかったことが無いものもありますが・・・) http://qiita.com/uasi/items/86c3a09d17792ab62dfe
  • 72.
    72 © 2021 NTTDATA Corporation コミュニティでやらないほうがよいこと  JIRA / GitHubに質問を投稿する(意外とある)  「そういうのはuser@spark.apache.orgに投稿しようね」とたしなめられる  いきなり巨大なパッチを投稿する  レビューする人も大変  分割できるものは分割したり、大きな機能は事前にMLで議論するのが良い  実効的な影響のない変更を加えるパッチを投稿する(意外とある)  例えば変数名のタイポや無駄なimport文の除去など・・・  何かの修正のついでに一緒に直したりするのがよい  ユーザの目に触れるものなので、ドキュメントのタイポ修正は歓迎!  他人を罵倒する  粗悪なコードを憎んで人を憎まず。客観的に、コードのどの部分がどうよくないのか、ど う修正した方が良いのか指摘するとOK  Sparkコミュニティではあまり見たことない
  • 73.
    © 2021 NTTDATA Corporation イベントに参加しよう
  • 74.
    74 © 2021 NTTDATA Corporation Data + AI Summit (2020年11月開催より前はSpark + AI Summit)  Sparkコミュニティ最大のイベント  2013年から始まるイベント。当時の名称はSpark Summit  世界中の開発者やユーザや開発者が一堂に会して、ユースケースや最新動向などが発表 される  ここ数年はアメリカ西海岸とヨーロッパの年2回の開催(2020年6月開催からはオンライン での実施)  直近開催されたのは5/24 - 5/28のData + AI Summit North America  F2Fで開発者と議論やコネクションづくりができる機会でもある  主要な開発者は大体参加している  メールでアポを取るのが望ましいが、その辺うろうろしていたら立ち話も できるはず  割と大きめの機能追加などを考えているのであれば、F2Fだと話が早かったり  2020年からはオンライン開催になったが、コミュニケーションがとりやすいプラットフォー ムが活用されており一方通行にならないようにイベントが運営されている
  • 75.
    75 © 2021 NTTDATA Corporation 日本でもイベントが開催されている  Spark Meetup Tokyo(不定期開催) https://spark-meetup-tokyo.connpass.com 次回の開催は未定だが、決まったら@raspberry1123のアカウントで呟く予定  Hadoopソースコードリーディング(不定期開催) 誰かがオーなシップを握っているわけではなく、実施したい人が日本Hadoopユーザ会の メーリングリストに告知する形で行われるのが通例 Hadoopと言いつつ、実態はOSS分散処理基盤のMeetup イベント名に反してソースコードリーディングに限らないので、ハードルは高くない 1週間くらい前にTwitterやメーリングリストで開催が告知される  Hadoop / Spark Conference Japan(数年に1回くらいのペース) これまでもSparkコミュニティのキーパーソンをして基調講演が行われた 次回の開催は未定だが、決まったら@raspberry1123のアカウントで呟く予定
  • 76.
  • 77.
    77 © 2021 NTTDATA Corporation まとめ  Apache Sparkの紹介  Sparkは大量のデータを現実的な時間で処理するためのOSS並列分散処理系  巨大なデータセットをテーブルのようなデータ構造に抽象化して処理を記述できる  様々な用途に利用できるコンポーネントが同梱されている  昨今はSpark SQLがSparkの中心的なコンポーネント • シンプルに処理が記述できることに加え、最適化を施してくれる • 最適化手法も進化し続けている  Spark 3.0以降ではPythonユーザ向けのアップデートがたくさん盛り込まれた  Apache Sparkコミュニティに飛び込もう  開発に関われたり、いち早く最新動向が得られるのはOSSの利点  直接開発に参加する以外にも、様々な参加の仕方がある • バグレポートやメーリングリストでの議論への参加も立派なコントリビューション  情報交換の場として、国内外で様々なイベントが開催されている • 開発者や他のユーザと直接議論しやすい場でもある
  • 78.
    © 2021 NTTDATA Corporation 本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。