本地開發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程序中。