【发布时间】:2015-07-31 10:07:23
【问题描述】:
我在 OS X 上安装了 Spark 和 Hadoop。我成功完成了一个示例,其中 Hadoop 在本地运行,文件存储在 HDFS 中,然后我运行 spark
spark-shell --master yarn-client
并且在 shell 中使用 HDFS。但是,我遇到了问题,试图让 Spark 在没有 HDFS 的情况下运行,只是在我的机器上本地运行。我查看了this answer,但是当Spark documentation 说时,它感觉不正确地处理环境变量
在一台机器上本地运行很容易——你只需要拥有 java 安装在系统 PATH 或 JAVA_HOME 环境变量上 指向 Java 安装。
如果我运行基本的SparkPi 示例,我会得到正确的输出。
如果我再次尝试运行示例 Java 应用程序 they provide,我会得到输出,但这次出现与 port 9000 相关的 connection denied 错误,听起来像它正在尝试连接到 Hadoop,但我不知道为什么,因为我没有指定
$SPARK_HOME/bin/spark-submit --class "SimpleApp" --master local[4] ~/study/scala/sampleJavaApp/target/simple-project-1.0.jar
Exception in thread "main" java.net.ConnectException: Call From 37-2-37-10.tssg.org/10.37.2.37 to localhost:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
...
...
...
org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:604)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:699)
at org.apache.hadoop.ipc.Client$Connection.access(Client.java:367)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1462)
at org.apache.hadoop.ipc.Client.call(Client.java:1381)
... 51 more
15/07/31 11:05:06 INFO spark.SparkContext: Invoking stop() from shutdown hook
15/07/31 11:05:06 INFO handler.ContextHandler: stopped o.s.j.s.ServletContextHandler{/metrics/json,null}
...
...
...
15/07/31 11:05:06 INFO ui.SparkUI: Stopped Spark web UI at http://10.37.2.37:4040
15/07/31 11:05:06 INFO scheduler.DAGScheduler: Stopping DAGScheduler
15/07/31 11:05:06 INFO spark.MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped!
15/07/31 11:05:06 INFO util.Utils: path = /private/var/folders/cg/vkq1ghks37lbflpdg0grq7f80000gn/T/spark-c6ba18f5-17a5-4da9-864c-509ec855cadf/blockmgr-b66cc31e-7371-472f-9886-4cd33d5ba4b1, already present as root for deletion.
15/07/31 11:05:06 INFO storage.MemoryStore: MemoryStore cleared
15/07/31 11:05:06 INFO storage.BlockManager: BlockManager stopped
15/07/31 11:05:06 INFO storage.BlockManagerMaster: BlockManagerMaster stopped
15/07/31 11:05:06 INFO scheduler.OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped!
15/07/31 11:05:06 INFO spark.SparkContext: Successfully stopped SparkContext
15/07/31 11:05:06 INFO util.Utils: Shutdown hook called
15/07/31 11:05:06 INFO util.Utils: Deleting directory /private/var/folders/cg/vkq1ghks37lbflpdg0grq7f80000gn/T/spark-c6ba18f5-17a5-4da9-864c-509ec855cadf
任何关于我哪里出错的指针/解释将不胜感激!
更新
似乎我设置了环境变量HADOOP_CONF_DIR 的事实导致了一些问题。在该目录下,我有core-site.xml,其中包含以下内容
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
如果我更改值,例如<value>hdfs://localhost:9100</value> 然后当我尝试运行 spark 作业时,连接被拒绝错误指的是这个更改的端口
Exception in thread "main" java.net.ConnectException: Call From 37-2-37-10.tssg.org/10.37.2.37 to localhost:9100 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
因此,尽管指示它在本地运行,但出于某种原因,它仍在尝试连接到 HDFS。如果我删除 HADOOP_CONF_DIR 环境变量,则工作正常。
【问题讨论】:
-
您是否也在工作中设置主配置?
-
我不确定您的意思(这可能表明它为什么不起作用!)。我只是运行命令
$SPARK_HOME/bin/spark-submit --class "SimpleApp" --master local[4] ~/study/scala/sampleJavaApp/target/simple-project-1.0.jar -
如何在 Java 项目中设置 SparkContext?
-
我正在使用确切的官方 Spark Java 示例here
-
你的 core-site.xml 在哪里
标签: hadoop apache-spark