现在,许多Spark应用程序已成为遗留应用程序,很难在本地进行增强,测试和运行。
Spark具有很好的测试支持,但仍有许多Spark应用程序不可测试。
当您尝试运行一些旧的Spark应用程序时,我将分享一个常见错误。
Exception in thread "main" org.apache.spark.SparkException: A master URL must be set in your configurationat org.apache.spark.SparkContext.<init>(SparkContext.scala:376)at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2509)at org.apache.spark.sql.SparkSession$Builder$anonfun$6.apply(SparkSession.scala:909)at org.apache.spark.sql.SparkSession$Builder$anonfun$6.apply(SparkSession.scala:901)at scala.Option.getOrElse(Option.scala:121)
当您看到这样的错误时,您有两种选择:
–忘了它不能在本地运行,并继续在这种挫败中工作
–修复它以在本地运行,并向您的团队展示《 童子军规则》的示例
我将展示一个非常简单的模式,它将使您免于受挫。
def main(args: Array[String]): Unit = {val localRun = SparkContextBuilder.isLocalSparkval sparkSession = SparkContextBuilder.newSparkSession(localRun, "Happy Local Spark")val numbers = sparkSession.sparkContext.parallelize(Range.apply(1, 1000))val total = numbers.sum()println(s"Total Value ${total}")}
这段代码使用isLocalSpark函数来决定如何处理本地模式。 您可以使用任何技术来做出该决定,例如env参数或命令行参数或其他任何东西。
一旦知道它在本地运行,就可以基于它创建spark上下文。
现在,此代码可以在本地运行,也可以通过Spark-Submit运行。
快乐的火花测试。
此博客中使用的代码可在@runlocal repo中获得
翻译自: https://www.javacodegeeks.com/2019/01/spark-run-local-design-pattern.html