Spark 提供了三个位置对系统进行配置:
Spark 作业调度
概述
Spark 有好几种计算资源调度的方式。首先,回忆一下 集群模式概述 中每个 Spark 应用(包含一个 SparkContext 实例)中运行了一些其独占的执行器(executor)进程。集群管理器提供了 Spark 应用之间的资源调度(scheduling across applications)。其次,在各个Spark 应用内部,各个线程可能并发地通过 action 算子提交多个 Spark 作业(job)。如果你的应用服务于网络请求,那这种情况是很常见的。在 Spark 应用内部(对应同一个 SparkContext)各个作业之间,Spark 默认 FIFO 调度,同时也可以支持公平调度(fair scheduler)。
Spark SQL
Spark SQL 概述 (DataFrames, Datasets 和 SQL)
Spark SQL 是一个用户结构化数据处理的 Spark 模块。不像基础的 Spark RDD API 一样,Spark SQL 提供的接口提供了 Spark 与构造数据和执行计算之间的更多信息。在内部,Spark SQL 使用这个额外的信息去执行额外的优化。有几种方式可以跟 Spark SQL 进行交互,包括 SQL 和 Dataset API。当使用相同执行引擎进行计算时,无论使用哪种 API / 语言,都可以快速的计算。这种统一意味着开发人员能够在基于提供最自然的方式来表达一个给定的 transformation API 之间实现轻松的来回切换不同的 。
该页面所有例子使用的示例数据都包含在 Spark 的发布中,并且可以使用 spark-shell,pyspark,或者 sparkR 来运行。
Spark 提交应用
在 Spark 的 bin 目录中的 spark-submit 脚本用于在集群上启动应用程序。它可以通过一个统一的接口使用所有 Spark 支持的 Cluster Manager,所以您不需要专门的为每个 Cluster Manager 来配置您的应用程序。
打包应用依赖
如果您的代码依赖了其它的项目,为了分发代码到 Spark 集群中您将需要将它们和您的应用程序一起打包。为此,创建一个包含您的代码以及依赖的 assembly jar(或 “uber” jar)。无论是 sbt 还是 Maven 都有 assembly 插件。在创建 assembly jar 时,列出 Spark 和 Hadoop 提供的依赖。它们不需要被打包,因为在运行时它们已经被 Cluster Manager 提供了。如果您有一个 assembled jar 您就可以调用 bin/spark-submit 脚本(如下所示)来传递您的 jar。
对于 Python 来说,您可以使用 spark-submit 的 –py-files 参数来添加 .py,.zip 和 .egg 文件以与您的应用程序一起分发。如果您依赖了多个 Python 文件我们推荐将它们打包成一个 .zip 或者 .egg 文件。
Spark Streaming
Spark Streaming 概述
Spark Streaming 是 Spark 核心 API 的扩展,它支持弹性的,高吞吐的,容错的实时数据流的处理。数据可以通过多种数据源获取,例如 Kafka,Flume,Kinesis 以及 TCP sockets,也可以通过高阶函数例如 map,reduce,join,window 等组成的复杂算法处理。最终,处理后的数据可以输出到文件系统,数据库以及实时仪表盘中。事实上,你还可以在数据流上使用 Spark 机器学习 以及 图形处理 算法 。