第2回 ``learning spark'' 読書会 第2章 ``downloading spark and getting started
TRANSCRIPT
第 2回 “Learning Spark” 読書会
Chap. 2: “Downloading Sparkand Getting Started” (2)
– Sparkを導入し、使ってみよう (2) –
@data sciesotist
2015/3/29
1 “Introduction to Core Spark Concepts” (1)
• 2章の後半では、Sparkのコアとなるコンセプトについて概要を見ていく
• Sparkアプリケーションはクラスタに接続するドライバプログラムを内包する
• ドライバプログラムはmain関数を含み、その中でRDDsが作成され、処理される
• ドライバプログラムはSparkContextオブジェクトを介してSparkにアクセスする
1
参考: ドライバプログラムとSparkContextオブジェクトの関係
http://spark.apache.org/docs/latest/cluster-overview.html
2
2 “Introduction to Core Spark Concepts” (2)
>>> sc
<pyspark.context.SparkContext
object at 0x0000000009F9EA20>
• SparkContextオブジェクトからRDDsを作成できる (sc.textFile() など)
• RDDsに対して何らかの処理を実行できる(count() など)
3
3 “Introduction to Core Spark Concepts” (3)
• 処理を実行する際にドライバプログラムはexecutorsと呼ばれる複数のノードを制御する
• 例えばcount()処理を実行すると、各ノードにそれぞれ異なる範囲のデータが割り当てられ、カウントが行われる
4
参考: フィルタ処理のサンプルプログラム
>>> lines = sc.textFile("README.md")>>> pythonLines = lines.filter(lambda line:
"Python" in line)>>> pythonLines.first()u’high-level APIs in Scala, Java, and Python...’
scala> val lines = sc.textFile("README.md")scala> val pythonLines = lines.filter(line =>
line.contains("Python"))scala> pythonLines.first()res1: String = high-level APIs in Scala,...
5
4 “Standalone Applications”• スタンドアロンアプリケーションではアプリケーション内でSparkContextオブジェクトを生成する必要がある
• アプリケーションとSparkの関連付けが必要
■ ScalaとJavaではMavenを用いてspark-coreアーティファクトと関連付ける
■ Pythonではspark-submitコマンドからスクリプトを実行する
6
参考: Mavenについて
• Java系言語用プロジェクト管理ツール
• pom.xmlの<dependency>タグにプロジェクトで使用したいJARライブラリを指定する
• sbtやGradleなどのビルドツールと組み合わせる7
参考: Spark 1.3.0におけるMavenの設定
• pom.xmlに以下のように記述する<project>
<groupId>edu.berkeley</groupId>
<artifactId>spark-example</artifactId>
<modelVersion>4.0.0</modelVersion>
<name>Spark example project</name>
<packaging>jar</packaging>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
</project>
8
参考: sbtについて
• Scala (などの)言語用ビルドツール
• xx.sbtファイルにパッケージの情報を記述する
9
参考: Spark 1.3.0におけるsbtの設定
• xx.sbtに以下のように記述する• 間に空行が必要
name := "example"
version := "0.0.1"
scalaVersion := "2.10.4"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.3.0" % "provided"
)
10
5 “Initializing a SparkContext” (1)
• SparkContextオブジェクトを作成するには、パッケージをインポートする必要がある
• はじめにSparkConfオブジェクトを作成する
# Pythonの例from pyspark import SparkConf,SparkContext
conf = SparkConf().setMaster("local").setAppName("My App") # 実際は1行で
sc = SparkContext(conf = conf)
11
6 “Initializing a SparkContext” (2)
# Scalaの例import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
val conf = new SparkConf() # 実際は1行で.setMaster("local").setAppName("My App")
val sc = new SparkContext(conf)
12
7 “Initializing a SparkContext” (3)
# Javaの例import org.apache.spark.SparkConf;
import org.apache.spark.api.java
.JavaSparkContext;
SparkConf conf = new SparkConf()
.setMaster("local").setAppName("My App");
JavaSparkContext sc =
new JavaSparkContext(conf);
13
8 “Initializing a SparkContext” (4)
• 初期化に最低限必要なパラメータは2つ
• クラスタのURL: localとすると、1台のコンピュータの1スレッドで実行される
• アプリケーション名: クラスタマネージャのUIに表示される
• SparkのシャットダウンはSparkContextオブジェクトで .stop()メソッドを実行する
• 普通にアプリケーションを終了してもよい14
9 “Building Standalone Applications”
• やっぱワードカウントがないとね!• sbtとMavenを使ったサンプルを紹介する
• 適当なディレクトリ下にプログラムを作成する• 本のコードはGitHub上に公開されている
• ダウンロード: https://github.com/databricks/learning-spark
15
10 2章のまとめ• 2章では、Sparkのダウンロードからローカルマシンでの実行までの全体像を取り上げた
• 実行方法として、インタラクティブ処理、スタンドアロンアプリケーションの作成を紹介した
• Sparkのコアコンセプトをまとめると:
■ ドライバプログラムがSparkContextオブジェクトとRDDsを作成する
■ それらはクラスタで並列実行される
• 3章ではRDDsについてより詳しく見ていく16