单独的应用程序(翻译自Learning.Spark.Lightning-Fast.Big.Data.Analysis)

在这次对Spark粗略的讲解过程中,我们还没有讲如何在单独的应用程序中使用Spark。撇开交互式运行来说,我们能在Java,Scala或这Python程序中连接Spark。与在shell中连接Spark相比,唯一的区别是,在程序中,你需要自己初始化SparkContext 。

连接Spark的过程因语言而异。在Java和Scala中,你在你的应用程序的Maven依赖中添加对spark-core 的依赖就可以了。到写这本书的时候,Spark的最新版是1.2.0,它对应的Maven坐标是:

groupId=org.apache.spark

artifactId=spark-core_2.10

version=1.2.0

Maven是流行的针对基于Java(原文:Java-based)语言的包管理工具,它让你能使用公共仓库中的包。你可以通过Maven构建你的项目,也可以通过其它能与Maven仓库对话的工作构建项目,包括Scala的sbt工具和Gradle。流行的集成开发环境(比如eclipse)都允许你直接往项目中添加Maven依赖。

在Python中,你只需要把应用程序写成Python脚本,但是你必须用Spark自带的bin/spark-submit脚本运行它们。bin/spark-submit脚本包含了Python中需要的Spark依赖。脚本为Spark的Python API设置环境变量到函数中。运行你的脚本,像例2-6一样。

例2-6.  运行Python脚本

bin/spark-submit my_script.py

(注意,在Windows中,你必须用反斜线代替正斜线)

初始化SparkContext

一旦你的应用程序连接到Spark,你需要在你的应用程序中导入Spark包并创建一个SparkContext对象。你需要先创建一个SparkConf对象去配置你的应用程序,然后用这个SparkConf对象创建SparkContext对象。例2-7到例2-9展示了各个Spark支持的语言创建SparkContext对象的过程。

例2-7.  在Python中初始化Spark

from pyspark import SparkConf, SparkContext

conf = SparkConf().setMaster(“local”).setAppName(“My App”)

sc = SparkContext(conf = conf)

例2-8. 在Scala中初始化Spark

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

import org.apache.spark.SparkContext._

val conf = new SparkConf().setMaster(“local”).setAppName(“My App”)

val sc = new SparkContext(conf)

例2-9. 在Java中初始化Spark

import org.apache.spark.SparkConf;

import org.apache.spark.api.java.JavaSparkContext;

SparkConf conf = new SparkConf().setMaster(“local”).

这些例子展示了初始化SparkContext对象的简单方法,我们只设置了两个参数:

1.集群URL(在这些例子中是“local”),它告诉Spark如何连接到集群,local是一个特殊的值,它使Spark运行在本地机器的一个线程上,而不会连接到集群。

2.应用程序名字(在这些例子中是“My App”),当你连接到集群上时,这个名字将在集群管理器的UI上标识你的应用程序。

除了这两个参数之外,还存在其它一些参数,可以用它们来配置你的应用程序的执行方式,或者添加传递到集群中去执行的代码,但是,这些在这本书之后的章节中才会讲到。

在你初始化你的SparkContext对象之后,你可以使用我们之前展示的所有方法去创建RDD(例如,从一个文件)或操作这些RDD。

最后,为了关闭Spark,你可以调用你的SparkContext对象上的stop()方法,或者简单地推出程序(用System.exit(0)或者sys.exit())。

这次对Spark简单的讲解应该足够让你在你的电脑上运行一个单独的Spark应用程序了。对于更多高级配置,第七章将会讲怎样连接你的程序到集群上,包括打包你的程序让它的代码被自动传送到工作节点上。目前,请参考官方Spark文档Quick Start Guide。

构建单独的应用程序

如果我们没有一个word count例子,这个大数据书籍的介绍章节将是不完整的。在单台机器上,实现统计单词是简单的,但是在分布式框架中,它是一个通常的例子,因为它涉及到从大量工作节点上读取数据和合并数据。我们将看看如果通过sbt和Maven构建和打包一个word  count程序。我们的所有示例都可以一起构建,但是为了说明一个拥有最少量以来的简单构建,在learning-spark-examples/mini-complete-example目录下,我们有一个更小的项目,正如你在例2-10(Java)和2-11(Scala)中看到的。

例2-10. Word count Java程序 —   现在不要担心细节

//  创建一个SparkConf

SparkConf conf = new SparkConf().setAppName(“wordCount”);

JavaSparkContext sc = new JavaSparkContext(conf);

//  加载我们的数据

JavaRDD<String> input = sc.textFile(inputFile);

//  分割行为单词集

JavaRDD<String> words = input.flatMap(

new FlatMapFunction<String, String>() {

public Iterable<String> call(String x) {

return Arrays.asList(x.split(” “));

}});

//   转化为单词:次数对,统计单词

JavaPairRDD<String, Integer> counts = words.mapToPair(

new PairFunction<String, String, Integer>(){

public Tuple2<String, Integer> call(String x){

return new Tuple2(x, 1);

}}).reduceByKey(new Function2<Integer, Integer, Integer>(){

public Integer call(Integer x, Integer y){ return x + y;}});

//  把单词计数保存会文本

counts.saveAsTextFile(outputFile);

例2-11. Word count Scala程序 —
现在不要担心细节

// 创建一个SparkConf

val conf = new SparkConf().setAppName(“wordCount”)

val sc = new SparkContext(conf)

// 加载我们的数据.

val input = sc.textFile(inputFile)

// 分割行为单词集

val words = input.flatMap(line => line.split(” “))

// 转化为单词:次数对,统计单词

val counts = words.map(word => (word, 1)).reduceByKey{case (x, y) => x + y}

// 把单词计数保存会文本

counts.saveAsTextFile(outputFile)

我们能用sbt(例2-12)或者Maven(例2-13)用非常简单的构建文件构建这些应用程序。我们已经标记Spark Core依赖已经是被提供了的,所以,之后,当我们使用一个assembly JAR的时候,我们不会包含spark-core jar,因为spark-core jar已经在工作节点的类路径下了。

例2-12. sbt构建文件

name := “learning-spark-mini-example”

version := “0.0.1”

scalaVersion := “2.10.4”

// additional libraries

libraryDependencies ++= Seq(

“org.apache.spark” %% “spark-core” % “1.2.0” % “provided”

)

例2-13. Maven构建文件

小提示

spark-core包被标记为provided,以防它跟着我们的应用程序被打包进assembly JAR中。第七章会讲更多相关细节。

一旦我们的构建文件定义好了,我们能很容易地打包我们的应用程序,然后用bin/spark-submit脚本运行它们。spark-submit需要设置一些Spark需要用到的环境变量。在mini-complete-example目录下,我们能构建Java(例2-14)和Scala(例2-15)程序。

例2-14. Scala  构建和运行

sbt clean package

$SPARK_HOME/bin/spark-submit \

—class com.oreilly.learningsparkexamples.mini.scala.WordCount \

./target/…(as above) \

./README.md ./wordcounts

例2-15. Maven 构建和运行

mvn clean && mvn compile && mvn package

$SPARK_HOME/bin/spark-submit \

—class com.oreilly.learningsparkexamples.mini.java.WordCount \

./target/learning-spark-mini-example-0.0.1.jar \

./README.md ./wordcounts

关于连接应用程序到集群的更详细的示例,请参考Spark官方文档Quick Start

Guide。第七章会将打包应用程序的更多细节。

时间: 2024-12-22 15:58:19

单独的应用程序(翻译自Learning.Spark.Lightning-Fast.Big.Data.Analysis)的相关文章

Spark的Python和Scala shell介绍(翻译自Learning.Spark.Lightning-Fast.Big.Data.Analysis)

Spark提供了交互式shell,交互式shell让我们能够点对点(原文:ad hoc)数据分析.如果你已经使用过R,Python,或者Scala中的shell,或者操作系统shell(例如bash),又或者Windows的命令提示符界面,你将会对Spark的shell感到熟悉. 但实际上Spark shell与其它大部分shell都不一样,其它大部分shell让你通过单个机器上的磁盘或者内存操作数据,Spark shell让你可以操作分布在很多机器上的磁盘或者内存里的数据,而Spark负责在集

Spark核心概念介绍(翻译自Learning.Spark.Lightning-Fast.Big.Data.Analysis)

既然你已经在shell里运行了你的第一个Spark代码片段,是时候来学习在shell里面编程的更多细节了. 从上层看,每一个Spark程序都是由一个驱动程序组成,这个驱动程序在集群上发布各种各样的平行操作.驱动程序包含你的应用程序的main函数,定义在集群上的分布式数据集,并且将一些操作作用在这些数据集上.在之前的例子中,驱动程序是Spark shell本身,你只需要在里面输入你想要运行的操作就行了. 驱动程序通过一个SparkContext 对象访问Spark,一个SparkContext 对

Learning Spark: Lightning-Fast Big Data Analysis 中文翻译

Learning Spark: Lightning-Fast Big Data Analysis 中文翻译行为纯属个人对于Spark的兴趣,仅供学习. 如果我的翻译行为侵犯您的版权,请您告知,我将停止对此书的开源翻译. Translation the book of Learning Spark: Lightning-Fast Big Data Analysis is only for spark developer educational purposes. If I violated you

【原】Learning Spark (Python版) 学习笔记(四)----Spark Sreaming与MLlib机器学习

本来这篇是准备5.15更的,但是上周一直在忙签证和工作的事,没时间就推迟了,现在终于有时间来写写Learning Spark最后一部分内容了. 第10-11 章主要讲的是Spark Streaming 和MLlib方面的内容.我们知道Spark在离线处理数据上的性能很好,那么它在实时数据上的表现怎么样呢?在实际生产中,我们经常需要即使处理收到的数据,比如实时机器学习模型的应用,自动异常的检测,实时追踪页面访问统计的应用等.Spark Streaming可以很好的解决上述类似的问题. 了解Spar

线性回归的Spark实现 [Linear Regression / Machine Learning / Spark]

1- 问题提出 2- 线性回归 3- 理论推导 4- Python/Spark实现 1 # -*- coding: utf-8 -*- 2 from pyspark import SparkContext 3 4 5 theta = [0, 0] 6 alpha = 0.001 7 8 sc = SparkContext('local') 9 10 def func_theta_x(x): 11 return sum([i * j for i, j in zip(theta, x)]) 12 1

专业代写Fortran程序,Fortran程序翻译,Fortran编程一对一远程视频教学

提供专业的Fortran程序代写服务(多年的数值计算经验) QQ:2545088544,或者手机:1339零78伍489 我们团队均毕业于理工类学校,有多年的数值计算经验,现从事数值计算相关的研究工作. 精通Fortran 77/90编程,提供专业的Fortran程序代写:Fortran和其他编程语言(Matlab.C/C++.Python.VB等)之间的翻译转换:Fortran程序开发一对一教学等服务. 目前已经完成过的任务有(包括在猪八戒网接到的任务): (1)磁感应强度的数值计算模拟. (

关于learning Spark翻译

??在网上找了很久中文版,感觉都是需要支付一定金币才能下载,索性自己翻译算了.因为对Spark有一定了解,而且书籍前面写道,对Spark了解可以直接从第三章阅读,就直接从第三章开始翻译了,应该没有什么影响. tips:驱动程序就是写SparkRDD的main方法或者shell.(以后会慢慢补充tips) 第三章--第一部分(RDD Basic到Passing Functions to Spark) 原文地址:https://www.cnblogs.com/krcys/p/8459653.html

Learning Spark中文版--第四章--使用键值对(2)

Actions Available on Pair RDDs (键值对RDD可用的action) ??和transformation(转换)一样,键值对RDD也可以使用基础RDD上的action(开工),并且键值对RDD有一些利用键值对数据特性的的action,如下表: 表4-3 键值对RDD上的action 函数名 描述 例子 结果 countByKey() 计算每个键元素的总数 rdd.countByKey() {(1,1),(3,2)} collectAsMap() 结果收集成一个map便

读learning spark lighting

chapter 1 introduction to the analysis with spark the conponents of Sparks spark core(contains the basic  functionality of sparks. spark Core  is also the  home to the APIs that defines the RDDs), spark sql(structured data ) is the package  for worki