【问题标题】:How to run Spark on Docker?如何在 Docker 上运行 Spark?
【发布时间】:2016-11-25 07:34:41
【问题描述】:

无法在 Docker 上运行 Apache Spark。

当我尝试从我的驱动程序与 spark master 通信时,我收到下一个错误:

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

【问题讨论】:

  • 当我尝试在 Docker 中运行 Spark Job Server 时遇到了同样的问题。这里的问题是,Spark 使用随机端口在 master、worker 和 driver 之间进行通信。 Docker 在设计上是一个封闭的系统,您需要通过 EXPOSE 公开特定的端口。当 Spark 无法通信时,就会出现这个错误。

标签: apache-spark docker


【解决方案1】:

这个错误听起来像是工人没有向主人注册。

这个可以在大师的spark网凳http://<masterip>:8080查看

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

我已经将spark masterspark worker docker化了。

如果您有一台位于 NAT 路由器后面的 Linux 机器,例如家庭防火墙,它将私有 192.168.1.* 网络中的地址分配给机器,此脚本将下载 spark 1.3.1 主服务器和工作程序到在地址分别为 192.168.1.10 和 .11 的单独 docker 容器中运行。如果您的 LAN 上已使用 192.168.1.10 和 192.168.1.11,您可能需要调整地址。

pipework 是一个用于将 LAN 桥接到容器而不是使用内部 docker 桥的实用程序。

Spark 要求所有机器能够相互通信。据我所知,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 看到主 Web 报告,或者转到我的 LAN 上具有 spark 分发的另一台机器,然后运行 ​​./spark-shell --master spark://192.168.1.10:7077,它将打开一个交互式 scala shell。

【讨论】:

    【解决方案2】:

    第二个是 docker case 更常见的原因。你应该检查一下,你

    • 公开所有必要的端口
    • 设置正确的 spark.broadcast.factory
    • 处理 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 2015-02-01
      • 2019-07-22
      相关资源
      最近更新 更多