我正在学习Spark并希望运行由两台物理机器组成的最简单的集群。我已完成所有基本设置,似乎没问题。自动启动脚本的输出如下所示:
getEntityManager().createNativeQuery("LOCK TABLE schemaname.tablename").executeUpdate();
所以这里没有错误,似乎主节点正在运行以及两个Worker节点。但是,当我在192.168.?????:8080打开WebGUI时,它只列出一个工作人员 - 本地工作人员。我的问题类似于此处描述的问题:Spark Clusters: worker info doesn't show on web UI但我的/ etc / hosts文件中没有任何内容。它包含的全部是:
[username@localhost sbin]$ ./start-all.sh
starting org.apache.spark.deploy.master.Master, logging to /home/username/spark-1.6.0-bin-hadoop2.6/logs/spark-username-org.apache.spark.deploy.master.Master-1-localhost.out
localhost: starting org.apache.spark.deploy.worker.Worker, logging to /home/sername/spark-1.6.0-bin-hadoop2.6/logs/spark-username-org.apache.spark.deploy.worker.Worker-1-localhost.out
username@192.168.???.??: starting org.apache.spark.deploy.worker.Worker, logging to /home/username/spark-1.6.0-bin-hadoop2.6/logs/spark-username-org.apache.spark.deploy.worker.Worker-1-localhost.localdomain.out
我错过了什么? 两台机器都在运行Fedora Workstation x86_64。
答案 0 :(得分:5)
基本上问题的根源是主主机名解析为e.Values
。它在两个控制台输出中都可见:
localhost
其中最后一部分对应于主机名。您可以在主日志中看到相同的行为:
starting org.apache.spark.deploy.master.Master, logging to
/home/.../spark-username-org.apache.spark.deploy.master.Master-1-localhost.out
和远程工作人员日志:
16/02/17 11:13:54 WARN Utils: Your hostname, localhost resolves to a loopback address: 127.0.0.1; using 192.168.128.224 instead (on interface eno1)
这意味着远程工作人员试图访问16/02/17 11:13:58 WARN Worker: Failed to connect to master localhost:7077
java.io.IOException: Failed to connect to localhost/127.0.0.1:7077
at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:216)
at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:167)
at org.apache.spark.rpc.netty.NettyRpcEnv.createClient(NettyRpcEnv.scala:200)
at org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:187)
at org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:183)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused: localhost/127.0.0.1:7077
上的主人并且显然失败了。即使工人能够连接到主人,我也不会出于同样的原因反向工作。
解决此问题的一些方法:
答案 1 :(得分:4)
解决方法是像这样启动你的主人
SPARK_MASTER_IP=YOUR_SPARK_MASTER_IP ${SPARK_HOME}/sbin/start-master.sh
然后,您将能够像这样连接您的奴隶
${SPARK_HOME}/sbin/start-slave.sh spark://**YOUR_SPARK_MASTER_IP**:PORT
然后你去!
答案 2 :(得分:0)
通过在$ SPARK_HOME / conf / spark-env.sh中提供SPARK_MASTER_IP,我遇到了类似问题。 spark-env.sh实际上设置了一个环境变量SPARK_MASTER_IP,它指向要与Master绑定的IP。然后start-master.sh读取此变量并将Master绑定到它。现在SPARK_MASTER_IP在Master正在运行的框外可见。