1. 程式人生 > >本地開發Spark,執行JavaSparkPi例子報錯:A master URL must be set in your configuration

本地開發Spark,執行JavaSparkPi例子報錯:A master URL must be set in your configuration

錯誤資訊:

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

這裡寫圖片描述

解決方法二:

通過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程序中。