在Eclipse中跑一个Spark的算Pi例子。报错如下:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Eclipse中跑一个Spark的算Pi例子。报错如下:相关的知识,希望对你有一定的参考价值。

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:394)
at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:61)
at org.apache.spark.examples.JavaSparkPi.main(JavaSparkPi.java:37)
15/10/28 22:01:15 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:394)
at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:61)
at org.apache.spark.examples.JavaSparkPi.main(JavaSparkPi.java:37)

我注意到了A master URL must be set in your configuration。于是我加上了setMaster:
SparkConf sparkConf = new SparkConf().setAppName("JavaSparkPi").setMaster("spark://master:7077"):
加了setMaster("spark://master:7077")以后报错还是这,没有变。所以我想问这是什么情况?为什么会出现Error initializing SparkContext? 多谢指教!

参考技术A 你的spark集群的主机的hosts列表中有master对应的ip吗,看看/etc/hosts中有没有一行,如果spark的主机也就是master是本地机器,就用.setMaster("spark://localhost:7077"):
好了;
建议还是用Idea来编spark程序追问

你说的很对。不过我早已经解决了。分给你吧~

本回答被提问者和网友采纳

Spark1.6 Idea下远程调试

使用的开发工具:scala2.10.4、Idea16、JDK8 

 

1.导入依赖的包和源码

在下载Spark中到的导入spark的相关依赖了包和其源码.zip,相关源码的下载地址:https://github.com/apache/spark/tree/v1.6.0  

地址最后面是对应的版本号,下载源码便于看注释

技术分享

 

2.使用官方求Pi的例子

[java] view plain copy
 
 技术分享技术分享
  1. import org.apache.spark.{SparkConf, SparkContext}  
  2.   
  3. object FirstDemo {  
  4.   def main(args: Array[String]) {  
  5.     val conf = new SparkConf().setAppName("Spark Pi")  
  6.     val spark = new SparkContext(conf)  
  7.     val slices = if (args.length > 0) args(0).toInt else 2  
  8.     val n = 100000 * slices  
  9.     val count = spark.parallelize(1 to n, slices).map { i =>  
  10.       val x = Math.random * 2 - 1  
  11.       val y = Math.random * 2 - 1  
  12.       if (x * x + y * y < 1) else 0  
  13.     }.reduce(_ + _)  
  14.     println("*****Pi is roughly " + 4.0 * count / n)  
  15.     spark.stop()  
  16.   }  
  17. }  

 

3.导出项目jar包

确认之后->build->build artifacts->rebuild

技术分享

 

4.启动集群

先修改配置文件,再启动集群可能会导致master无法正常启动,下次想取消远程调试,可以把配置文件再改回来

[plain] view plain copy
 
 技术分享技术分享
  1. [[email protected] sbin]# jps  
  2. 30212 SecondaryNameNode  
  3. 32437 -- main class information unavailable  
  4. 30028 NameNode  

所以请先启动集群

[plain] view plain copy
 
 技术分享技术分享
  1. [[email protected] sbin]# ./start-all.sh   
  2. starting org.apache.spark.deploy.master.Master, logging to /hadoop/spark-1.6.0-bin-hadoop2.6/logs/spark-root-org.apache.spark.deploy.master.Master-1-master.out  
  3. slave01: starting org.apache.spark.deploy.worker.Worker, logging to /hadoop/spark-1.6.0-bin-hadoop2.6/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave01.out  

 

5.修改配置文件spark-class

 spark-class在SPARK_HOME/bin下

[plain] view plain copy
 
 技术分享技术分享
  1. done < <("$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "[email protected]")  

修改成

[plain] view plain copy
 
 技术分享技术分享
  1. done < <("$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main $JAVA_OPTS "[email protected]")  

$JAVA_OPTS 为我们添加的参数,下面在命令行中为其声明(建议写到配置文件中)

[plain] view plain copy
 
 技术分享技术分享
  1. export JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"  


6.提交Spark,开启端口监听

上传之前生成的jar包到master节点,在命令行中执行

[plain] view plain copy
 
 技术分享技术分享
  1. spark-submit --master spark://master:7077 --class FirstDemo Spark02.jar   

出现如下结果,表示master正在监听5005端口

[plain] view plain copy
 
 技术分享技术分享
  1. [[email protected]ster ~]# spark-submit --master spark://master:7077 --class FirstDemo Spark02.jar   
  2. Listening for transport dt_socket at address: 5005  


7.Idea配置远程

技术分享

添加Remote组件,填写master的ip的监听端口

技术分享

 

8.启动调试

技术分享

 

JAVA_OPTS参数说明:

[plain] view plain copy
 
 技术分享技术分享
  1. -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005  
  2. 参数说明:  
  3. -Xdebug 启用调试特性  
  4. -Xrunjdwp 启用JDWP实现,包含若干子选项:  
  5. transport=dt_socket JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。  
  6. address=5005 JVM在5005端口上监听请求,这个设定为一个不冲突的端口即可。  
  7. server=y y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器。  
  8. suspend=y y表示启动的JVM会暂停等待,直到调试器连接上才继续执行。suspend=n,则JVM不会暂停等待。  

 

参考文章列表:

http://blog.csdn.net/lovehuangjiaju/article/details/49227919     Spark1.5远程调试

http://www.thebigdata.cn/QiTa/12370.html      调试参数

以上是关于在Eclipse中跑一个Spark的算Pi例子。报错如下:的主要内容,如果未能解决你的问题,请参考以下文章

Win7 Eclipse 搭建spark java1.8环境:WordCount helloworld例子

spark在eclipse下V2-02逐个运行spark-examples

如何使用 pi spark 在 oracle 数据库上执行选择查询?

Spark自带Pi程序运行

Spark面试题——Spark资源调优

Spark1.6 Idea下远程调试