Spark官方文档-Spark编程指南(第一节)

Spark官方文档-Spark编程指南(第一节)

概述

总的来说,每个Spark应用都包括一个在集群上运行用户的main函数和各种并行操作的驱动程序。Spark提供的主要抽象是一个弹性分布式数据集(RDD),RDD就是一个可以并行操作的分布在集群上各个节点的元素集合。RDDs可以通过位于Hadoop文件系统上的文件(或者任何其他Hadoop支持的文件系统),或者已经存在于驱动程序中的的Scala集合来创建并且变换。用户可能还会要求Spark将RDD持久化在内存中,这样就可以在并行操作之间高效地重复利用这个RDD。最后,RDDs可以从节点失败中自动恢复。

Spark中的第二个抽象是可以在并行操作中使用的共享变量。默认得,当Spark把一个函数当作一个任务集合在不同的节点上并行运行时,它会为函数中用到的每个变量发送一份拷贝到各个任务。有时,一个变量需要在任务之间共享,或者在任务和驱动程序之间共享。Spark支持两种类型的共享变量:广播变量(broadcast variables),它可以用来在所有节点的内存中缓存一个值;累加器(accumulators),它是只能做加法的变量,例如计数器和算术器。

这份指南用Spark支持的各种语言展示了所有这些特征。使用Spark的交互shell是最容易跟随这份指南学习下来的——或者使用Scala shell:bin/spark-shell或者使用Python shell:bin/pyspark。

与Spark建立连接

Spark 2.2.0默认是基于Scala 2.11构建和分发的。(Spark同样可以基于Scala的其他版本构建。)为了用Scala编写应用,你需要使用一个兼容的Scala版本(例如2.11.X)。

为了编写Spark应用,你需要在Spark上增加一个Maven依赖。如下Maven Central配置对Spark是可用的:

groupId = org.apache.spark
artifactId = spark-core_2.11
version = 2.2.0

另外,如果你想要访问HDFS集群,需要为你的版本的HDFS在hadoop-client上增加一个依赖。

groupId = org.apache.hadoop
artifactId = hadoop-client
version = <your-hdfs-version>

最后,你需要将一些Spark类引入到你的程序。增加如下行:

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf

(在Spark 1.3.0之前,你需要显示引入org.apache.spark.SparkContext._,这样才能够进行基本的隐式转换。)

初始化Spark

一个Spark程序首先必须要做的是创建一个SparkContext对象,这个对象告诉Spark如何访问一个集群。为了创建一个SparkContext,你首先需要构建一个包含了关于你的应用的信息的SparkConf对象。

只有一个SparkContext可以激活一个JVM。你必须在创建一个新的SparkContext之前stop()掉这个激活的SparkContext。

val conf = new SparkConf().setAppName(appName).setMaster(master)
new SparkContext(conf)

参数appName是在集群UI上展示的你的应用的名字。master是一个Spark,Mesos或者YARN集群的URL,或者是表示以本地模式运行的一个特定的字符串”local”。在实践中,当运行在集群上时,你是不会想在程序中硬编码master的,而是通过spark-submit启动应用并指定master的。然而,对于本地测试和单元测试,你可以通过传递”local”来在进程内运行Spark。

使用shell

在Spark shell中,一个特殊的SparkContext已经为你创建好了,变量名是sc。如果再创建你自己的SparkContext就不起作用了。你可以使用参数--master来设置context连接到哪个master,还可以通过给参数--jars传递逗号分隔的列表来给classpath增加JARs。你还可以通过给参数--packages提供逗号分隔的Maven坐标来给你的shell会话增加依赖(例如Spark包)。任何可能存在依赖的附加库(例如Sonatype)都可以被传递给参数--repositories。例如,为了在4个核上运行bin/spark-shell,就用:

$ ./bin/spark-shell --master local[4]

或者,为了给classpath增加code.jar,使用:

$ ./bin/spark-shell --master local[4] --jars code.jar

使用Maven坐标包含一个依赖:

$ ./bin/spark-shell --master local[4] --packages "org.example:example:0.1"

为了得到一个完整的选项列表,执行spark-shell --help。在后面的场景,spark-shell会调用更多通用的spark-submit脚本

下一篇:Spark编程指南(Spark Programming Guide)-第二节

参考资料

本文译自Spark Programming Guide

发表评论

电子邮件地址不会被公开。 必填项已用*标注