如何组织 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 项目的主要内容,如果未能解决你的问题,请参考以下文章
在 Apache Spark 中使用 join 时,数据集大小的组织是不是重要?
如何解决 Spark 中的“aggregateByKey 不是 org.apache.spark.sql.Dataset 的成员”?