Más contenido relacionado
La actualidad más candente (20)
Similar a 大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuokaエディション - (20)
Más de NTT DATA Technology & Innovation (20)
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuokaエディション -
- 1. © 2020 NTT DATA Corporation
大量のデータ処理や分析に使えるOSS Apache Spark入門
- Open Source Conference2020 Online/Fukuokaエディ
ション -
2020/11/28
株式会社NTTデータ 技術開発本部
猿田 浩輔
オープンソースカンファレンス2020
Online/Fukuoka
- 2. 2© 2020 NTT DATA Corporation
$ whoami
猿田 浩輔
株式会社NTTデータ 技術開発本部
シニア・ソフトウェアエンジニア / Apache Sparkコミッタ
Hadoop/Sparkなど、OSSミドル関連のR&Dや技術支援
普及活動の一環で講演や書籍執筆なども
Twitter: @raspberry1123
- 3. 3© 2020 NTT DATA Corporation
本日のお話
Apache Sparkの基本 + α
Sparkとは何か
Sparkのソフトウェアスタック
• Spark SQLを掘り下げて解説
簡単に並列分散処理が行える裏側の仕掛け
Spark 3.0のアップデートダイジェスト
Apache Sparkコミュニティへの参加の仕方
様々な参加の仕方の紹介
Apache Spark関連のイベント
- 5. 5© 2020 NTT DATA Corporation
Apache Spark in a nutshell
Apache Sparkとは?
JVM上で動作するOSSの並列分散処理系
- 6. 6© 2020 NTT DATA Corporation
Apache Spark in a nutshell
Apache Sparkとは?
JVM上で動作するOSSの並列分散処理系
大量のデータセットを
(数100GBs, TBs, PBs...)
- 7. 7© 2020 NTT DATA Corporation
Apache Spark in a nutshell
Apache Sparkとは?
JVM上で動作するOSSの並列分散処理系
大量のデータセットを
(数100GBs, TBs, PBs...)
複数台のサーバで構成された
クラスタを用いて
- 8. 8© 2020 NTT DATA Corporation
Apache Spark in a nutshell
Apache Sparkとは?
JVM上で動作するOSSの並列分散処理系
大量のデータセットを
(数100GBs, TBs, PBs...)
複数台のサーバで構成された
クラスタを用いて
現実的な時間で処理する
(数十分, 数時間のオーダー)
- 9. 9© 2020 NTT DATA Corporation
Apache Spark in a nutshell
Apache Sparkとは?
JVM上で動作するOSSの並列分散処理系
並列分散処理に関する面倒な制御をSparkが肩代わりしてくれる。
エラーハンドリング
処理の分割やスケジューリング
etc
大量のデータセットを
(数100GBs, TBs, PBs...)
複数台のサーバで構成された
クラスタを用いて
現実的な時間で処理する
(数十分, 数時間のオーダー)
- 10. 10© 2020 NTT DATA Corporation
データ処理ロジックの実装もシンプルに
プログラミングインターフェイスの観点からも、分散処理の複雑さを隠蔽
SQLライクなクエリやAPIを用いて、テーブルを操作するように分散処理を記述できる
whereselect groupBy avg
val df = spark.read.json("/path/to/dataset")
val result = df.select("col1", "col2").where("col3 > 0")
.groupBy("col1").avg("col2")
- 11. 11© 2020 NTT DATA Corporation
Sparkの動作環境
Sparkを動かすには、複数のサーバで構成されたクラスタが必要
利用するサーバは、IAサーバなどコモディティなものでよい
YARNやKubernetes、Mesosといった既存のクラスタマネージャで管理されたクラス
タ上で動作する
Sparkに同梱されているStandalone Clusterと呼ばれるクラスタマネージャを利用
することもできる
- 12. 12© 2020 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
- 13. 13© 2020 NTT DATA Corporation
Sparkのソフトウェアスタックとプログラミング言語
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
- 14. 14© 2020 NTT DATA Corporation
Sparkのソフトウェアスタックとプログラミング言語
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
- 15. 15© 2020 NTT DATA Corporation
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
Sparkのソフトウェアスタックとプログラミング言語
- 16. 16© 2020 NTT DATA Corporation
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
Sparkのソフトウェアスタックとプログラミング言語
- 17. 17© 2020 NTT DATA Corporation
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
Sparkのソフトウェアスタックとプログラミング言語
- 18. 18© 2020 NTT DATA Corporation
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
Sparkのソフトウェアスタックとプログラミング言語
- 19. 19© 2020 NTT DATA Corporation
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
SQL
Sparkのソフトウェアスタックとプログラミング言語
- 21. 21© 2020 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
- 22. 22© 2020 NTT DATA Corporation
クエリから最適化データフローを生成する
クエリエンジン
SQL DataFrameの操作
• クエリのパース
• 実行プランの生成
• 意味解析
• 最適化
• RDD(Sparkの最もプリミティブなデータ表現)レベルで表現されたデータフロー
• 加工の仕方や順序などはクエリエンジンによって最適化済み
RDD
ロード 保存
RDD
加工 加工
RDD ・・・
- 23. 23© 2020 NTT DATA Corporation
クエリエンジンによる最適化
RDDベースの処理を人手で記述する場合、プログラマが最適なデータフローを考える必要
があった
Spark SQLではクエリエンジンが実行プランに対して、様々な最適化を適用する
最適化の一例
データフローの効率化
• 処理の順序の入れ替え
• 適切なJoinアルゴリズムの選択
I/O量の削減
• 不要なカラムの読み込みを避ける (カラムプルーニング)
• 不要なパーティションの読み込みを避ける (パーティションプルーニング)
• フィルタリングをデータソース側に移譲する (フィルタプシュダウン)
etc
- 24. 24© 2020 NTT DATA Corporation
実行プランに対して適用される最適化の例
論理プラン
クエリの内容から生成される
最初の実行プラン
Filter
Join
dimension
table
fact table
- 25. 25© 2020 NTT DATA Corporation
実行プランに対して適用される最適化の例
ジョインの前にフィルタできると判
断されたら、順序を入れ替える
(ジョインの負荷が下がる)。
論理プラン 最適化済み論理プラン
クエリの内容から生成される
最初の実行プラン
Filter
Join
dimension
table
fact table
Filter
Join
dimension
table
fact table
- 26. 26© 2020 NTT DATA Corporation
実行プランに対して適用される最適化の例
Filter
Join
dimension
table
fact table
Filter
Join
dimension
table
Broadcast Hash
Join
Scan Scan
+
Filter
• ジョインなどは具体的なア
ルゴリズムが選択される
• データソースの機能を利
用して、フィルタをプッシュ
ダウンできる場合もある
ジョインの前にフィルタできると判
断されたら、順序を入れ替える
(ジョインの負荷が下がる)。
fact table
論理プラン 最適化済み論理プラン 物理プラン
クエリの内容から生成される
最初の実行プラン
- 27. 27© 2020 NTT DATA Corporation
Spark SQLをベースとするコンポーネントも増えてきた
他のコンポーネントも、Spark SQLをベースとしたものになってきた
MLlib(spark.mlパッケージ)
Structured Streaming
Spark Core
(実行エンジンおよび汎用的なデータ処理ライブラリ)
Spark
Streaming
(ストリーム処理)
Structured
Streaming
(ストリーム処理)GraphX
(グラフ処理)
MLlib
(機械学習)
Spark SQL
(クエリ処理)
- 29. 29© 2020 NTT DATA Corporation
クラスタで分散処理が行われる全体像
ワーカノード
・・・
ワーカノード上で動作するExecutorプロセスが「タスク」を処理することで、クラスタ全体で
分散処理が行われる
アプリ開発者が記述した処理内容をタスクに分解するのはスケジューラの役割
ワーカノード
Driver
(スケジューラ)
クラスタ
- 30. 30© 2020 NTT DATA Corporation
Executor
クラスタで分散処理が行われる全体像
ワーカノード
Executor
・・・
ワーカノード上で動作するExecutorプロセスが「タスク」を処理することで、クラスタ全体で
分散処理が行われる
アプリ開発者が記述した処理内容をタスクに分解するのはスケジューラの役割
ワーカノード
Driver
(スケジューラ)
Executorにタスクを割り当てる
クラスタ
- 31. 31© 2020 NTT DATA Corporation
Executor
クラスタで分散処理が行われる全体像
ワーカノード
Executor
タスク タスク
・・・
ワーカノード上で動作するExecutorプロセスが「タスク」を処理することで、クラスタ全体で
分散処理が行われる
アプリ開発者が記述した処理内容をタスクに分解するのはスケジューラの役割
ワーカノード
Driver
(スケジューラ)
複数のExecutor / スロットで、
ワーカノード単体でも並列処理
スロット スロット
Executorにタスクを割り当てる
クラスタ
- 32. 32© 2020 NTT DATA Corporation
RDDレベルの一連のデータフローは「ジョブ」と呼ばれる処理単位として扱われる
ジョブの中からひとまとまりの処理として扱える範囲を切り出し、「ステージ」と呼ばれる処理
単位を生成する(「ひとまとまりの処理」がどのように定義されるかは後述)
処理内容からタスクが生成されるまでの流れ
RDD
加工 加工加工
ステージ
RDD RDD ・・・RDD
ロード 保存
ジョブ
- 33. 33© 2020 NTT DATA Corporation
処理内容からタスクが生成されるまでの流れ
各ステージが処理するデータを分割したものをパーティションと呼ぶ
ステージ
パーティション
- 34. 34© 2020 NTT DATA Corporation
処理内容からタスクが生成されるまでの流れ
中間データ
各ステージが処理するデータを分割したものをパーティションと呼ぶ
ステージ
パーティション
最終的な処理結果
- 35. 35© 2020 NTT DATA Corporation
処理内容からタスクが生成されるまでの流れ
タスク
タスク
タスク
タスク
タスク
タスク
タスク
タスク
タスク
タスク
タスク
中間データ
各ステージが処理するデータを分割したものをパーティションと呼ぶ
各パーティションはタスクで手分けして処理される
ステージ
パーティション
最終的な処理結果
- 36. 36© 2020 NTT DATA Corporation
パーティションの作られ方
タスク
タスク
タスク
タスク
タスク
タスク
タスク
タスク
タスク
タスク
タスク
• データソースの種類によって
パーティション数が決まる
• 例えばHDFSの場合は各タスクに
ブロックサイズ程度のデータが
割り当たるように分割される
• 中間データを処理するステージでは、
APIに渡すパラメータや設定で
パーティション数が決まる
• Spark SQLではデフォルトで
200パーティション
- 37. 37© 2020 NTT DATA Corporation
シャッフル
集約処理やジョインなど、特定のキーを持つレコードをまとめて処理する必要がある場合は、
レコードの配置換えが必要。この配置換えを「シャッフル」と呼ぶ
シャッフルはExecutor間の多対多のネットワーク通信で実現される
したがってシャッフルが必要な処理までは「ひとまとまりの処理」を行うタスクとして単一
のExecutor上で処理可能
タスク
タスク
タスク
タスク
タスク
タスク
タスク
タスク
タスク
タスク
タスク
シャッフル
- 39. 39© 2020 NTT DATA Corporation
Apache Spark 3.0
2020年6月に、Apache Spark 3.0がリリースされた
およそ4年ぶりのメジャーバージョンリリース(9月には3.0.1がリリースされた)
- 40. 40© 2020 NTT DATA Corporation
Apache Spark 3.0
2020年6月に、Apache Spark 3.0がリリースされた
およそ4年ぶりのメジャーバージョンリリース(9月には3.0.1がリリースされた)
データ分析を支えるアップデート
Accelerator Aware Scheduling
Pythonの型推論機能を利用したPandas UDF APIのリデザイン
新たに32個のビルトイン関数がSpark SQLに追加された
- 41. 41© 2020 NTT DATA Corporation
Apache Spark 3.0
2020年6月に、Apache Spark 3.0がリリースされた
およそ4年ぶりのメジャーバージョンリリース(9月には3.0.1がリリースされた)
データ分析を支えるアップデート
Accelerator Aware Scheduling
Pythonの型推論機能を利用したPandas UDF APIのリデザイン
新たに32個のビルトイン関数がSpark SQLに追加された
Spark SQLはより賢くなった
Adaptive Query Execution (AQE)
Dynamic Partition Pruning
- 42. 42© 2020 NTT DATA Corporation
Apache Spark 3.0
2020年6月に、Apache Spark 3.0がリリースされた
およそ4年ぶりのメジャーバージョンリリース(9月には3.0.1がリリースされた)
データ分析を支えるアップデート
Accelerator Aware Scheduling
Pythonの型推論機能を利用したPandas UDF APIのリデザイン
新たに32個のビルトイン関数がSpark SQLに追加された
Spark SQLはより賢くなった
Adaptive Query Execution (AQE)
Dynamic Partition Pruning
Sparkを拡張する仕組みも導入された
プラグイン
ユーザ定義メトリクス
ほかにもまだまだ
- 43. 43© 2020 NTT DATA Corporation
その他にも注目のアップデートが盛り沢山
このほか主要なアップデートはリリースノートで要チェック
https://spark.apache.org/releases/spark-release-3-0-0.html
https://spark.apache.org/releases/spark-release-3-0-1.html
- 44. © 2020 NTT DATA Corporation
Apache Sparkコミュニティに飛び込もう
- 45. 45© 2020 NTT DATA Corporation
いちユーザの枠を超えてApache Sparkと関わる
いちユーザとしてSparkを利用するだけではなく、Sparkコミュニティに参加することで得られ
るメリットがある
開発に関わるもよし、情報収集の場として活用するもよし
開発に関わることで、自分たちが使うものをよりよく育てることにつながる
日本人の感覚(品質や細かい部分の作りこみ)をSparkの改善に活かしてほしい
• 安定性、運用のしやすさや、いざという時のトラブルシュートのしやすさなど
コミュニティに向かって声を上げないと伝わらない
• 必要なものは必要だと伝えることが大事
コミュニティと関わることで得られる情報がある
開発動向がわかる
不具合などの情報を得られる
使っていて困ったことを質問できる
- 46. 46© 2020 NTT DATA Corporation
開発者としての参加の仕方もいろいろ
Sparkの開発に参加する方法はパッチ投稿だけじゃない!
JIRAへのIssue登録(バグ報告 / 機能追加提案 / 改善提案)
• 自分たちでパッチを書かなくても、登録するだけでもよい
• 声を上げることが大事(ただし機能追加や改善提案の場合は必然性もセットで)
JIRAのメンテナンス
パッチのレビュー
メーリングリスト上での議論への参加
• ユーザ視点からの意見はSparkの改善にとって重要
もちろん、パッチの投稿も歓迎!
バグ修正
機能追加
ドキュメントの修正 / 充実化
- 47. 47© 2020 NTT DATA Corporation
そのパッチ、コミュニティに還元してください!
秘蔵のパッチを適用し続けたSpark(だけではなくOSS全般)を運用し続けるメリットはあま
りない
Sparkのメインストリームから乖離する
• それ、全部自分たちで保守し続けるんですか?
• 秘蔵パッチを当てたバイナリでトラブルが起こっても、コミュニティの人たちは面
倒見てくれない・・・
• マージコンフリクトだらけでバージョンアップが困難になる
• いつのまにかバージョンアップ不能なほどつぎはぎだらけに・・・
パッチの品質
• 場当たり的なパッチ (当面の問題は解決しているが、別の部分に悪影響をもた
らしているかも・・・?)
• コミッタを含む、コミュニティの人たちからレビューを受けたほうが良い
パッチがマージされるとリリースノートにクレジットされる
- 48. 48© 2020 NTT DATA Corporation
メーリングリストの活用
情報収集/交換の手段としてメーリングリストが活用できる
Sparkのメーリングリストは2種類
user@spark.apache.org
• ユーザ向け
• ユーザ同士の情報交換などに利用できる
• トラブル発生時の質問、Spark関係の宣伝などもこちら
dev@spark.apache.org
• 開発者向け(コミッタ以外の開発者も)
• リリースや各種決めごとの投票に関する情報などが流れる
• 開発者が留意すべきメンテナンス方針や開発方針がアナウンスされる
• パッチを投稿する人は購読したほうが良い
• あとはCIインフラのダウンに関するアナウンスなど・・・
- 49. 49© 2020 NTT DATA Corporation
そうは言っても参加のハードルが高いのでは?
でも、パッチを投稿しようにもコードとか書けないし・・・。
ドキュメントの修正やブラッシュアップのパッチならコードが書けなくても大丈夫
パッチを投稿する以外にも貢献の仕方がある!
やりとりは英語なんでしょ?
そのとおり・・・。でも大丈夫。意外と通じる!
マサカリとか飛んでくるんじゃないかと・・・
コードレビューでおびただしい指摘を受けることもあるが、紳士的にコードやアプローチ
の良し悪しについての指摘に閉じている
間違えても大丈夫
手順やお作法がありそれに則って進めるべきだが、間違えていたら教えてくれる
- 50. © 2020 NTT DATA Corporation
Issue登録やパッチを投稿をしてみよう
- 51. 51© 2020 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に記載されているが、以降
のスライドで簡単な手順を紹介する
- 52. 52© 2020 NTT DATA Corporation
Issue登録 (1/4)
SparkのJIRAにアクセスする
https://issues.apache.org/jira/browse/SPARK
あらかじめログインしておく(事前にユーザ登録が必要)
ページ右上のLog inリンクからログイン/ユーザ登録が可能
ページ上部のCreateボタンを押してバグ報告のフォームを開く
ログインするまでCreateボタンは表示されないので注意
- 53. 53© 2020 NTT DATA Corporation
Issue登録 (2/4)
項目がいろいろあるが、以下の項目を埋めればOK(ほとんどプルダウンメニュー)
① Project
「Spark」になっていること
② Issue Type
バグ/新機能/改善などの分類
③ Summary
一目で内容が分かるタイトル
• Add 〜 (〜機能を追加しよう)
• Fix 〜 (〜を修正しよう)
• 〜 doesn't work (〜が動かない)
- 54. 54© 2020 NTT DATA Corporation
Issue登録 (3/4)
④ Priority
重要度(Blocker / Critical / Major / Minor / Trivial)
• ユーザやリリースへの影響によって選ぶ
• 内容に対して重要度がマッチしないと判断されたら単に修正されるだけなので、
開発に携わりながら感覚を掴んでいけばOK
⑤ Component/s
報告の対象コンポーネント
⑥ Affect Version/s
影響を受けるSparkのバージョン
- 55. 55© 2020 NTT DATA Corporation
Issue登録 (4/4)
⑦ Description
詳しい説明
• 〜という操作をしたら〜という例外が送出された + サンプルコードなど
• 〜という効果が得られるので〜の機能を追加しよう
⑧ Environment
バグをレポートする場合などは、OSやJVMなど環境情報も記入するのがよい
- 56. 56© 2020 NTT DATA Corporation
GitHubでプルリクエストの投稿手順
細かい手順は割愛するが、大体以下の手順でプルリクエストを投げる
① SparkのGitリポジトリを自分のGitHubアカウントにフォークする(最初の1回でOK)
② フォークしたリポジトリを手元の環境にクローン(最初の1回でOK)
③ トピックブランチを作る(パッチ投稿するたびに実施)
• プルリクエストを投稿しようとしているブランチをもとに、新しいブランチを作る
• 次期最新リリース向けのパッチの場合はmasterブランチをベースにする
• 3.0系向けにパッチを投稿しようとしている場合はbranch-3.0をベースにする
④ 修正してコミット
⑤ フォークしたリポジトリにPushするとGitHubからプルリクエストが投稿できる
- 57. 57© 2020 NTT DATA Corporation
GitHubでプルリクエストを投稿してからマージまでの流れ
テストを通す
投稿されたプルリクエストに対して裏で単体テストが走る。
新規の参加者はプルリクエストを投げても自動的にテストが走らない。コミッタが
Jenkinsに命令してテストを走行してくれるのを待つ
• GitHubの機能でレビュアがサジェストされるので、お願いしてみてみるのも手
マージ件数が多くなると、コミッタがJenkinsを使役する権利を付与してくれる
• やりとりの中で「add to whitelist」と言われたら権限が付与されたことになる
• テストが自動的に走行するようになる
• 明示的にJenkinsにテストを依頼することができる(Jenkins, retest this
please.)
指摘事項に対応する
修正したコードをコミット&Push
裏で走行しているテストが通り、コミッタがマージしてもよいと判断したら晴れてマージ
- 58. 58© 2020 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.0][MLlib] 〜
- 59. 59© 2020 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の画像を貼り付ける
基本的にはテストコードも含めるべきだが、手動での動作確認が許容される場合もある
この場合は実際に確認に使用したコードスニペットや、確認した手順/環境、何を確
認したかなどを記述するのが良い
- 60. © 2020 NTT DATA Corporation
コミュニケーションの仕方や
コミュニティでのふるまい方
- 61. 61© 2020 NTT DATA Corporation
英語でのコミュニケーション
メーリングリストやJIRA/GitHub上での議論は英語だが、意外と簡単な英語でも通じ
る!
私も英語は苦手ですが、なんとか(?)やれています・・・。
語順と時制が合っていれば大体通じる
時制の間違いも、特に混乱をきたさない場合は大体空気を読んでくれる
複雑なことを説明する際無理に長い文章にせず、箇条書きに
すると伝わりやすい
他人が使っているフレーズをまねるのもよし
GitHubや上での議論やメーリングリストでのやりとり
もし自分の理解が怪しい時には、素直に確認すればOK
You mean 〜 right? (〜ってこと?)
とはいえ、英語上達の努力を怠ってはいけない・・・
- 62. 62© 2020 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
- 63. 63© 2020 NTT DATA Corporation
コミュニティでやらないほうがよいこと
JIRA / GitHubに質問を投稿する(意外とある)
「そういうのはuser@spark.apache.orgに投稿しようね」とたしなめられる
いきなり巨大なパッチを投稿する
レビューする人も大変
分割できるものは分割したり、大きな機能は事前にMLで議論するのが良い
実効的な影響のない変更を加えるパッチを投稿する(意外とある)
例えば変数名のタイポや無駄なimport文の除去など・・・
何かの修正のついでに一緒に直したりするのがよい
ユーザの目に触れるものなので、ドキュメントのタイポ修正は歓迎!
他人を罵倒する
粗悪なコードを憎んで人を憎まず。客観的に、コードのどの部分がどうよくないのか、ど
う修正した方が良いのか指摘するとOK
Sparkコミュニティではあまり見たことない
- 65. 65© 2020 NTT DATA Corporation
Data + AI Summit (2020年11月開催より前はSpark + AI Summit)
Sparkコミュニティ最大のイベント
2013年から始まるイベント。当時の名称はSpark Summit
世界中の開発者やユーザや開発者が一堂に会して、ユースケースや最新動向などが発表
される
ここ数年はアメリカ西海岸とヨーロッパの年2回の開催(2020年6月開催からはオンライン
での実施)
直近開催されたのは11/17 - 11/19のData + AI Summit Europe
F2Fで開発者と議論やコネクションづくりができる機会でもある
主要な開発者は大体参加している
メールでアポを取るのが望ましいが、その辺うろうろしていたら立ち話も
できるはず
割と大きめの機能追加などを考えているのであれば、F2Fだと話が早かったり
2020年からはオンライン開催になったが、コミュニケーションがとりやすいプラットフォー
ムが活用されており一方通行にならないようにイベントが運営されている
- 66. 66© 2020 NTT DATA Corporation
日本でもイベントが開催されている
Spark Meetup Tokyo(不定期開催)
年2回くらいのペースで実施(大体Spark + AI Summitの後)
https://spark-meetup-tokyo.connpass.com
次回の開催は未定だが、決まったら@raspberry1123のアカウントで呟く予定
Hadoopソースコードリーディング(不定期開催)
誰かがオーなシップを握っているわけではなく、実施したい人が日本Hadoopユーザ会の
メーリングリストに告知する形で行われるのが通例
Hadoopと言いつつ、実態はOSS分散処理基盤のMeetup
イベント名に反してソースコードリーディングに限らないので、ハードルは高くない
1週間くらい前にTwitterやメーリングリストで開催が告知される
Hadoop / Spark Conference Japan(数年に1回くらいのペース)
これまでもPatrickやRaynold、XiaoといったSparkコミュニティのキーパーソンによる基
調講演が行われた
次回の開催は未定だが、決まったら@raspberry1123のアカウントで呟く予定
- 68. 68© 2020 NTT DATA Corporation
まとめ
Sparkの基本
Sparkは大量のデータを現実的な時間で処理するためのOSS並列分散処理系
巨大なデータセットをテーブルのようなデータ構造に抽象化して処理を記述できる
様々な用途に利用できるコンポーネントが同梱されている
昨今はSpark SQLがSparkの中心的なコンポーネント
• シンプルに処理が記述できる
• 最適化を施してくれる
Apache Sparkコミュニティへの参加
開発に関われたり、いち早く最新動向が得られるのはOSSの利点
直接開発に参加する以外にも、様々な参加の仕方がある
• バグレポートやメーリングリストでの議論への参加も立派なコントリビューション
情報交換の場として、国内外で様々なイベントが開催されている
• 開発者や他のユーザと直接議論しやすい場でもある
- 69. © 2020 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。