第2回 ``learning spark'' 読書会 第2章 ``downloading spark and getting started

17
2 “Learning Spark” 読書会 Chap. 2: “Downloading Spark and Getting Started” (2) – Spark を導入し、使ってみよう (2) – @data sciesotist 2015/3/29

Upload: sciesotist-data

Post on 21-Jul-2015

491 views

Category:

Data & Analytics


0 download

TRANSCRIPT

Page 1: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

第 2回 “Learning Spark” 読書会

Chap. 2: “Downloading Sparkand Getting Started” (2)

– Sparkを導入し、使ってみよう (2) –

@data sciesotist

2015/3/29

Page 2: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

1 “Introduction to Core Spark Concepts” (1)

• 2章の後半では、Sparkのコアとなるコンセプトについて概要を見ていく

• Sparkアプリケーションはクラスタに接続するドライバプログラムを内包する

• ドライバプログラムはmain関数を含み、その中でRDDsが作成され、処理される

• ドライバプログラムはSparkContextオブジェクトを介してSparkにアクセスする

1

Page 3: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

参考: ドライバプログラムとSparkContextオブジェクトの関係

http://spark.apache.org/docs/latest/cluster-overview.html

2

Page 4: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

2 “Introduction to Core Spark Concepts” (2)

>>> sc

<pyspark.context.SparkContext

object at 0x0000000009F9EA20>

• SparkContextオブジェクトからRDDsを作成できる (sc.textFile() など)

• RDDsに対して何らかの処理を実行できる(count() など)

3

Page 5: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

3 “Introduction to Core Spark Concepts” (3)

• 処理を実行する際にドライバプログラムはexecutorsと呼ばれる複数のノードを制御する

• 例えばcount()処理を実行すると、各ノードにそれぞれ異なる範囲のデータが割り当てられ、カウントが行われる

4

Page 6: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

参考: フィルタ処理のサンプルプログラム

>>> 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

Page 7: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

4 “Standalone Applications”• スタンドアロンアプリケーションではアプリケーション内でSparkContextオブジェクトを生成する必要がある

• アプリケーションとSparkの関連付けが必要

■ ScalaとJavaではMavenを用いてspark-coreアーティファクトと関連付ける

■ Pythonではspark-submitコマンドからスクリプトを実行する

6

Page 8: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

参考: Mavenについて

• Java系言語用プロジェクト管理ツール

• pom.xmlの<dependency>タグにプロジェクトで使用したいJARライブラリを指定する

• sbtやGradleなどのビルドツールと組み合わせる7

Page 9: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

参考: 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

Page 10: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

参考: sbtについて

• Scala (などの)言語用ビルドツール

• xx.sbtファイルにパッケージの情報を記述する

9

Page 11: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

参考: 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

Page 12: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

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

Page 13: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

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

Page 14: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

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

Page 15: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

8 “Initializing a SparkContext” (4)

• 初期化に最低限必要なパラメータは2つ

• クラスタのURL: localとすると、1台のコンピュータの1スレッドで実行される

• アプリケーション名: クラスタマネージャのUIに表示される

• SparkのシャットダウンはSparkContextオブジェクトで .stop()メソッドを実行する

• 普通にアプリケーションを終了してもよい14

Page 16: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

9 “Building Standalone Applications”

• やっぱワードカウントがないとね!• sbtとMavenを使ったサンプルを紹介する

• 適当なディレクトリ下にプログラムを作成する• 本のコードはGitHub上に公開されている

• ダウンロード: https://github.com/databricks/learning-spark

15

Page 17: 第2回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started

10 2章のまとめ• 2章では、Sparkのダウンロードからローカルマシンでの実行までの全体像を取り上げた

• 実行方法として、インタラクティブ処理、スタンドアロンアプリケーションの作成を紹介した

• Sparkのコアコンセプトをまとめると:

■ ドライバプログラムがSparkContextオブジェクトとRDDsを作成する

■ それらはクラスタで並列実行される

• 3章ではRDDsについてより詳しく見ていく16