本地运行的apachespark出现拒绝连接错误

y0u0uwnf  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(650)

我在OSX上安装了spark和hadoop。我成功地完成了一个示例,其中hadoop在本地运行,文件存储在hdfs中,我使用spark运行

spark-shell --master yarn-client

在壳牌内部与hdfs合作。我有问题,但是,试图让Spark运行没有hdfs,只是在本地我的机器上。我看了这个答案,但在spark文档中说,在环境变量上乱搞是不对的
在一台机器上本地运行很容易—您只需要在系统路径上安装java,或者在指向java安装的java\u home环境变量中安装java即可。
如果我运行基本的 SparkPi 我得到了正确的输出。
如果我再次尝试运行他们提供的示例java应用程序,我会得到输出,但是这次出现了与端口9000相关的连接拒绝错误,这听起来像是在尝试连接到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 set导致了一些问题。在那个目录下,我有 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 环境变量,工作正常。

kzmpq1sx

kzmpq1sx1#

我认为您之前为hadoop相关示例定义的环境变量仍然会干扰您的测试。
假设您使用的是官方的spark java示例:

public static void main(String[] args) {
    String logFile = "YOUR_SPARK_HOME/README.md"; // Should be some file on your system
    SparkConf conf = new SparkConf().setAppName("Simple Application");
    JavaSparkContext sc = new JavaSparkContext(conf);
    JavaRDD<String> logData = sc.textFile(logFile).cache();
...
}

我建议您明确地设置主控形状,否则会使用默认值。

SparkConf conf = new SparkConf().setMaster("local").setAppName("Simple Application")

有关详细信息,请查看sparkconf文档:

67up9zun

67up9zun2#

我也有同样的错误,hadoop\u conf\u dir被定义,所以我只是取消设置环境变量。

unset HADOOP_CONF_DIR
nhhxz33t

nhhxz33t3#

apachespark使用hadoop客户机库进行文件访问 sc.textFile . 这使得使用 hdfs:// 或者 s3n:// 例如路径。也可以使用本地路径作为 file:/home/robocode/foo.txt .
如果指定的文件名没有架构, fs.default.name 已使用。它默认为 file: ,但您显式地将其重写为 hdfs://localhost:9000 在你的 core-site.xml . 因此,如果不指定模式,它将尝试从hdfs读取。
最简单的解决方案是指定模式:

JavaRDD<String> logData = sc.textFile("file:/home/robocode/foo.txt").cache();

相关问题