如何在Docker上运行Spark?

无法在Docker上运行Apache Spark。

当我尝试从我的驱动程序通知火花主人时,我收到下一个错误:

15/04/03 13:08:28 WARN TaskSchedulerImpl:初始作业未接受任何资源; 检查您的集群用户界面,以确保工作人员已注册并拥有足够的资源

这个错误听起来像工作人员没有注册的主人。

这可以在主人的火花网站凳子http://<masterip>:8080

您也可以简单地使用不同的docker图像,或将docker图像与工作的docker图像进行比较,看看有什么不同。

我已经docker化了火花大师和火花工人 。

如果您的Linux机器位于NAT路由器之后(如家庭防火墙),它将私有192.168.1。*networking中的地址分配给机器,则该脚本将下载一个spark 1.3.1主机和一个worker以独立运行docker集装箱,地址分别为192.168.1.10和.11。 如果您的LAN上已经使用了192.168.1.10和192.168.1.11,则可能需要调整地址。

pipe道工程是将LAN连接到容器而不是使用内部泊坞桥的实用工具。

Spark需要所有的机器能够相互通信。 据我所知,火花不是等级的,我看到工人们试图互相打开端口。 所以在shell脚本中我公开了所有的端口,如果这些机器是被防火墙的话,比如在家里的NAT路由器的后面,这是可以的。

./run-docker-spark

 #!/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的主网页报告,或者到我的局域网上有火花分布的另一台机器运行./spark-shell --master spark://192.168.1.10:7077 ,它会带来一个交互式的scalashell。

其次是docker案例更常见的原因。 你应该检查一下,你

  • 公开所有必要的端口
  • 设置正确的spark.broadcast.factory
  • 处理docker别名

如果不处理所有3个问题,Spark集群部件(主,工,司机)将无法通信。 您可以仔细阅读http://sometechshit.blogspot.ru/2015/04/running-spark-standalone-cluster-in.html上的每个问题,或使用容器准备https&#xFF1A://registry.hub.docker中的spark&#x3002; COM / U / epahomov /泊坞窗火花/

如果资源出现问题,请尝试使用https://spark.apache.org/docs/latest/configuration.html中的标志分配更less的资源(执行程序,内存,核心数量)&#x3002; 检查Spark主UI页面上有多less资源,默认为http:// localhost:8080 。