欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

本地开发Spark,运行JavaSparkPi例子报错:A master URL must be set in your configuration

程序员文章站 2022-03-19 21:37:29
...

错误信息:

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
18/08/21 18:39:27 INFO SparkContext: Running Spark version 1.6.0
18/08/21 18:39:28 ERROR SparkContext: Error initializing SparkContext.
org.apache.spark.SparkException: A master URL must be set in your configuration
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:401)
    at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:59)
    at code.demo.spark.JavaSparkPi.main(JavaSparkPi.java:38)
18/08/21 18:39:28 INFO SparkContext: Successfully stopped SparkContext
Exception in thread "main" org.apache.spark.SparkException: A master URL must be set in your configuration
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:401)
    at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:59)
    at code.demo.spark.JavaSparkPi.main(JavaSparkPi.java:38)

在本地搭建了Spark的开发环境,在运行Spark的JavaSparkPi.java例子的时候报了如上的错误。

错误原因:

没有指定虚拟机的运行参数,找不到运行的master,指定master参数有以下几种

local 本地单线程
local[K] 本地多线程(指定K个内核)
local[*] 本地多线程(指定所有可用内核)
spark://HOST:PORT 连接到指定的 Spark standalone cluster master,需要指定端口。
mesos://HOST:PORT 连接到指定的 Mesos 集群,需要指定端口。
yarn-client客户端模式 连接到 YARN 集群。需要配置 HADOOP_CONF_DIR。
yarn-cluster集群模式 连接到 YARN 集群。需要配置 HADOOP_CONF_DIR。

解决方法一:

配置虚拟机的运行参数。
Eclipse配置方法:
右键程序→Run As→Run Configurations…Arguments
在VM arguments中配置

-Dspark.master=local

本地开发Spark,运行JavaSparkPi例子报错:A master URL must be set in your configuration

解决方法二:

通过SparkConf的setMaster()方法来配置SparkConf的Master为“local”,如下:

SparkConf sparkConf = new SparkConf().setAppName("JavaPageRank").setMaster("local");
JavaSparkContext jsc = new JavaSparkContext(sparkConf);

官网的解释是:

The appName parameter is a name for your application to show on the cluster UI. master is a Spark, Mesos or YARN cluster URL, or a special “local” string to run in local mode. In practice, when running on a cluster, you will not want to hardcode master in the program, but rather launch the application with spark-submit and receive it there. However, for local testing and unit tests, you can pass “local” to run Spark in-process.
翻译:
appName参数是应用程序在集群UI上显示的名称。master参数是一个Spark、Mesos或YARN集群URL,或者是在本地模式下运行的特殊“local”字符串。实际上,在集群上运行时,您不希望在程序中硬编码master,而是使用spark-submit在那里启动应用程序并接收它。但是,对于本地测试单元测试,您可以通过“local”运行Spark进程中。