无法在Docker上运行Apache Spark。
当我尝试从我的驱动程序与spark master进行通信时,我收到下一个错误:
15/04/03 13:08:28 WARN TaskSchedulerImpl:初始工作尚未接受 任何资源;检查您的群集UI以确保工作人员 已注册且资源充足
答案 0 :(得分:6)
此错误听起来像工作人员尚未向主人注册。
可以在主人的火花网凳http://<masterip>:8080
您也可以简单地使用不同的泊坞窗图像,或将泊坞窗图像与工作图像进行比较,看看有什么不同。
我已将spark master和spark worker停靠。
如果您的Linux机器位于NAT路由器(如家庭防火墙)后面,它将私有192.168.1。*网络中的地址分配给计算机,则此脚本将下载spark 1.3.1 master和worker to在分别具有地址192.168.1.10和.11的docker容器中运行。如果您的LAN上已经使用了192.168.1.10和192.168.1.11,则可能需要调整地址。
pipework是用于将LAN桥接到容器而不是使用内部docker桥的实用程序。
Spark要求所有机器能够相互通信。据我所知,火花不是等级的,我已经看到工人试图互相打开港口。因此,在shell脚本中,我公开了所有端口,如果机器被防火墙,则可以,例如在家庭NAT路由器后面。
./运行搬运工火花
#!/bin/bash
sudo -v
MASTER=$(docker run --name="master" -h master --add-host master:192.168.1.10 --add-host spark1:192.168.1.11 --add-host spark2:192.168.1.12 --add-host spark3:192.168.1.13 --add-host spark4:192.168.1.14 --expose=1-65535 --env SPARK_MASTER_IP=192.168.1.10 -d drpaulbrewer/spark-master:latest)
sudo pipework eth0 $MASTER 192.168.1.10/24@192.168.1.1
SPARK1=$(docker run --name="spark1" -h spark1 --add-host home:192.168.1.8 --add-host master:192.168.1.10 --add-host spark1:192.168.1.11 --add-host spark2:192.168.1.12 --add-host spark3:192.168.1.13 --add-host spark4:192.168.1.14 --expose=1-65535 --env mem=10G --env master=spark://192.168.1.10:7077 -v /data:/data -v /tmp:/tmp -d drpaulbrewer/spark-worker:latest)
sudo pipework eth0 $SPARK1 192.168.1.11/24@192.168.1.1
运行此脚本后,我可以在192.168.1.10:8080看到主Web报告,或者转到我的LAN上具有spark分布的另一台机器,然后运行./spark-shell --master spark://192.168.1.10:7077
,它将显示一个交互式scala外壳
答案 1 :(得分:4)
其次是docker案例的更常见原因。你应该检查一下
如果不处理所有3个问题,火花集群部分(主人,工人,司机)都无法沟通。您可以在http://sometechshit.blogspot.ru/2015/04/running-spark-standalone-cluster-in.html上仔细阅读每个问题,或使用容器准备好来自https://registry.hub.docker.com/u/epahomov/docker-spark/
的火花如果资源出现问题,请尝试使用https://spark.apache.org/docs/latest/configuration.html中的标记分配更少的资源(执行程序数,内存数,内核数)。检查您在spark master UI页面上有多少资源,默认情况下为http://localhost:8080。