SparkConf 和 sparkContext 的目的

Posted

技术标签:

【中文标题】SparkConf 和 sparkContext 的目的【英文标题】:Purpose of SparkConf and sparkContext 【发布时间】:2020-05-02 10:34:26 【问题描述】:

sparkContext 和 sparkConf 的用途是什么?寻找详细的区别。

超过以下定义:

Spark Context 是任何 Spark 应用程序的入口点,用于访问所有 Spark 功能,并且需要具有所有集群配置和参数的 sparkConf 来创建 Spark Context 对象。

【问题讨论】:

【参考方案1】:

任何 Spark 驱动程序应用程序的第一步都是创建一个 SparkContext。 SparkContext 允许您的 Spark 驱动程序应用程序通过资源管理器访问集群。资源管理器可以是 YARN,也可以是 Spark 的集群管理器。为了创建 SparkContext,您应该首先创建一个 SparkConf。 SparkConf 存储您的 Spark 驱动程序应用程序将传递给 SparkContext 的配置参数。其中一些参数定义了 Spark 驱动程序应用程序的属性,而另一些则被 Spark 用于在集群上分配资源。例如,在工作节点上运行的执行程序使用的数量、内存大小和内核。 setAppName() 为您的 Spark 驱动程序应用程序命名,以便您可以在 Spark 或 Yarn UI 中识别它。

SparkConf 被传递到 SparkContext 中,因此我们的驱动程序应用程序知道如何访问集群。

现在您的 Spark 驱动程序应用程序具有 SparkContext,它知道要使用哪个资源管理器,并可以向它请求集群上的资源。如果您使用 YARN,Hadoop 的资源管理器(headnode)和节点管理器(workernode)将为执行器分配一个容器。如果集群上的资源可用,则执行程序将根据您的配置参数分配内存和内核。如果您使用的是 Sparks 集群管理器,则会使用 SparkMaster(头节点)和 SparkSlave(工作节点)来分配执行器。

每个 Spark 驱动程序应用程序在集群上都有自己的执行程序,只要 Spark 驱动程序应用程序具有 SparkContext,它们就会保持运行。执行器运行用户代码、运行计算并可以为您的应用程序缓存数据。 SparkContext 将创建一个分为多个阶段的作业。这些阶段被分解为由 SparkContext 在执行程序上调度的任务。

【讨论】:

火花驱动程序在哪里存在..?它是否在 spark-submit shell 中的某个地方......?或者它在 spark 程序中的 sparkContext 之前被初始化..? spark-shellspark-submit 的推出意味着我们已经创建了一个驱动程序。驱动程序应用程序运行我们代码的 main() 函数,并且 sparkContext 也将自己附加到 spark 驱动程序应用程序。 请查看问题的答案,如果它解决了您的问题,请标记为答案。 What should I do when someone answers my question?

以上是关于SparkConf 和 sparkContext 的目的的主要内容,如果未能解决你的问题,请参考以下文章

SparkConf加载与SparkContext创建(源码阅读三)

使用 spark-shell 时使用 sparkConf.set(..) 自定义 SparkContext

使用spark-shell时,使用sparkConf.set(..)自定义SparkContext

SparkConf加载与SparkContext创建(源码)

SparkContextSparkConf和SparkSession的初始化

SparkContext的初始化过程分析(源码)