Overview
在高层次上,每个 Spark 应用程序都由一个驱动程序组成,该驱动程序运行用户的主函数并在集群上执行各种并行操作。 Spark 提供的主要抽象是弹性分布式数据集(RDD) ,它是跨集群节点分区的元素的集合,可以并行操作。 Rdds 的创建方法是从 Hadoop 文件系统(或任何其他 Hadoop 支持的文件系统)中的一个文件或者驱动程序中现有的 Scala 集合开始,然后转换它。 用户还可能要求 Spark 在内存中持久化 RDD,以便在并行操作中有效地重用它。 最后,rdd 自动从节点故障中恢复。
Spark 中的第二个抽象是可以在并行操作中使用的共享变量。默认情况下,当 Spark 将一个函数作为一组任务并行运行在不同的节点上时,它将该函数中使用的每个变量的副本发送到每个任务。有时,变量需要跨任务共享,或者在任务和驱动程序之间共享。Spark 支持两种类型的共享变量: 广播变量(可用于在所有节点的内存中缓存值)和累加器(只“添加”到其中的变量,如计数器和求和)。
本指南以 Spark 支持的每种语言展示了这些特性中的每一个。如果您启动 Spark 的交互式 shell —— Scala shell 的 bin/Spark-shell 或 Python shell 的 bin/pyspark,那么最简单的跟踪方法是。
Linking with Spark
Spark3.1.1是构建和发布的,默认使用 Scala 2.12。(Spark 也可以构建为与其他版本的 Scala 一起使用。)要用 Scala 编写应用程序,你需要使用一个兼容的 Scala 版本(例如2.12.X)。
要编写 Spark 应用程序,需要在 Spark 上添加 Maven 依赖项。通过 Maven Central 可以在以下网址找到 Spark:
groupId = org.apache.spark
artifactId = spark-core_2.12
version = 3.1.1
此外,如果您希望访问 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 对象,其中包含有关应用程序的信息。
每个 JVM 只能有一个 SparkContext 是活动的。在创建一个新的SparkContext之前,必须停止()活动的SparkContext。
val conf = new SparkConf().setAppName(appName).setMaster(master)
new SparkContext(conf)
appName 参数是应用程序要显示在集群 UI 上的名称。Master 是一个 Spark, Mesos or YARN cluster URL,,或者一个在本地模式下运行的特殊“local” 字符串。实际上,在集群上运行时,您不希望在程序中硬编码主程序,而是使用 spark-submit 启动应用程序并在那里接收它。但是,对于本地测试和单元测试,您可以通过“ local”来运行 Spark in-process。
Using the Shell
在 Spark shell 中,已经在名为 sc 的变量中为您创建了一个特殊的支持解释器的 SparkContext。制作你自己的 SparkContext 不会起作用。您可以使用 -- master 参数设置上下文连接到哪个主参数,还可以通过向 -- jar 参数传递一个以逗号分隔的列表将 jar 添加到类路径。还可以通过向 -- Packages 参数提供一个用逗号分隔的 Maven 坐标列表,将依赖项(例如 Spark Packages)添加到 shell 会话中。任何可能存在依赖项的额外存储库(例如 Sonatype)都可以传递给 -- 存储库参数。例如,要在四个核心上运行 bin/spark-shell,使用:
$ ./bin/spark-shell --master local[4]
或者,也可以将 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。