如何组织 Apache Spark 项目

Posted

技术标签:

【中文标题】如何组织 Apache Spark 项目【英文标题】:How to organize a Apache Spark Project 【发布时间】:2017-09-22 13:42:23 【问题描述】:

我是 Spark 的新手,我想了解如何最好地设置项目。我将使用 maven 进行构建,包括测试。

我编写了我的第一个 Spark 应用程序,但要在开发期间启动它,我必须在本地模式下运行:

 SparkSession spark = SparkSession.builder()
                                  .appName("RDDTest")
                                  .master("local")
                                  .getOrCreate();

但是,如果我想将它提交到集群,它仍会以我不想要的本地模式运行。

所以我必须在部署之前更改代码,构建 jar 并将其提交到集群。显然这不是最好的方法。

我想知道最佳做法是什么?您是否以某种方式将主 URL 外部化?

【问题讨论】:

当你提交到集群时,它也运行在客户端模式。 【参考方案1】:

通常您只想从测试用例以本地模式运行 spark。所以你的主要工作不应该关联蚂蚁本地模式。

另外,spark 接受的所有参数都应该来自命令行。例如,应用名称、主控等应仅从命令行获取,而不是硬编码。

尝试将数据框操作保留在小函数中,以便可以独立测试它们。

【讨论】:

【参考方案2】:

您需要使用spark-submit 脚本。 你可以在这里找到更多文档https://spark.apache.org/docs/latest/submitting-applications.html

【讨论】:

【参考方案3】:

我将拥有将 SparkContext 作为参数的所有方法(甚至可能是隐式参数)。接下来,我将使用 Maven 配置文件为 SparkContext(测试/产品)定义参数,或者使用程序参数。

一种简单的替代方法就是以编程方式为您的(产品)主方法(集群模式)定义一个 SparkContext,并为您的测试定义一个单独的 SparkContext(本地模式)

【讨论】:

以上是关于如何组织 Apache Spark 项目的主要内容,如果未能解决你的问题,请参考以下文章

如何将项目上传至Azkaban上运行

在 Apache Spark 中使用 join 时,数据集大小的组织是不是重要?

如何配置hive,使hive能使用spark引擎

如何选择Apache Spark和Apache Flink

如何解决 Spark 中的“aggregateByKey 不是 org.apache.spark.sql.Dataset 的成员”?

apache spark中的sortbykey