【问题标题】:spark-shell declining offers from mesos masterspark-shell 拒绝 mesos master 的报价
【发布时间】:2017-05-21 19:14:09
【问题描述】:

我一直在尝试在 mesos 上学习 spark,但 spark-shell 一直无视这些提议。这是我的设置:

所有组件都在同一个子网中

  • EC2 实例上的 1 个 mesos 主节点 (t2.micro)

    命令:mesos-master --work_dir=/tmp/abc --hostname=<public IP>

  • 2 个 mesos 代理(每个具有 4 核、16 GB 内存和 30 GB 磁盘空间)

    命令:mesos-slave --master="<private IP of master>:5050" --hostname="<private IP of slave>" --work_dir=/tmp/abc

  • ec2 实例 (t2.micro) 上的 1 个 spark-shell(客户端) 在启动 spark-shell 之前,我已经在这个实例上设置了以下环境变量

    export MESOS_NATIVE_JAVA_LIBRARY=/usr/lib/libmesos.so
    export SPARK_EXECUTOR_URI=local://home/ubuntu/spark-2.1.1-bin-hadoop2.7.tgz
    

    然后我按如下方式启动 spark-shell

    ./bin/spark-shell --master mesos://172.31.1.93:5050 
    

    (主服务器的私有 IP)

    我已确保将spark-2.1.1-bin-hadoop2.7.tgz 放置在 /home/ubuntu 在两个代理上,在启动 spark shell 之前。

一旦 spark-shell 启动,我会运行最简单的程序

val f = sc.textFile ("/tmp/ok.txt");
f.count()

.. 我在 spark-shell 上不断收到以下日志

 (0 + 0) / 2]17/05/21 15:13:34 WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources
17/05/21 15:13:49 WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources
17/05/21 15:14:04 WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

主端日志:(这些日志我什至在 spark-shell 中执行任何操作之前就看到了,即使在我在 spark-shell 中运行上述代码之后它们也会继续出现)

I0521 15:14:12.949108 10166 master.cpp:6992] Sending 2 offers to framework 64c1ef67-9e4f-4236-bb86-80d7aaab540f-0000 (Spark shell) at scheduler-7a375e65-7a0d-4267-befa-e69937404d5f@172.31.1.203:45596
I0521 15:14:12.955731 10164 master.cpp:4731] Processing DECLINE call for offers: [ 64c1ef67-9e4f-4236-bb86-80d7aaab540f-O34 ] for framework 64c1ef67-9e4f-4236-bb86-80d7aaab540f-0000 (Spark shell) at scheduler-7a375e65-7a0d-4267-befa-e69937404d5f@172.31.1.203:45596
I0521 15:14:12.956130 10167 master.cpp:4731] Processing DECLINE call for offers: [ 64c1ef67-9e4f-4236-bb86-80d7aaab540f-O35 ] for framework 64c1ef67-9e4f-4236-bb86-80d7aaab540f-0000 (Spark shell) at scheduler-7a375e65-7a0d-4267-befa-e69937404d5f@172.31.1.203:45596

我在 Ubuntu 16.04 上使用 Mesos 1.2.0 和 spark 2.1.1。我已经通过编写一个基于 node.js 的小型 http 客户端进行了验证,并且来自主人的报价似乎很好。这里可能出了什么问题?

【问题讨论】:

  • 你见过this吗?您可以发布被拒绝的工人信息和优惠吗?这可能是与IP有关的问题。您能否确认提供的 IP 与配置匹配?优惠包含您用来连接的相同主 IP?
  • 它基本上无法处理以“local”开头的执行程序uri。我将其更改为“http”,它继续进行,但由于其他原因而失败。以下是日志:pastebin.ca/3815427
  • 好的,问题解决了。代理内部的执行器尝试绑定到在 ec2 中运行时必然会失败的公共 IP。将 mesos-agent 的主机名参数设置为私有 Ip,它就可以工作了。
  • 酷,将其添加为答案并接受。你可以设置LIBPROCES_IP来达到类似的效果。
  • 发布答案,谢谢!

标签: apache-spark mesos mesosphere


【解决方案1】:

好的,这里有两个问题。

  1. SPARK_EXECUTOR_URIlocal,因此将其更改为 httplocal 我猜是用于hadoop(在这里更正我以防万一)。

  2. 将 URI 更改为 local 后,作为 spark executor 的一部分运行的 netty blockmanager 服务由 mesos-executor 启动(作为任务,粗略模式),由 Mesos Containerizer 启动,由mesos-agent,过去尝试绑定公共 IP 失败,因为我已将主机名作为公共 IP 传递给 mesos-agent,这在 EC2 中必然会失败。事实上,我一开始是通过私有 IP,但不记得为什么我将主机名更改为公共 IP。可能是为了检查我猜的沙箱日志。 Mesos 主机将其重定向到 mesos-agent 的私有 IP,阻止我查看 stderr 日志。 (我位于 EC2 VPC 之外)。请注意,上面的问题是将私有 IP 传递给代理,这是正确的。原来,上面的问题是针对第一个问题贴出来的。

【讨论】:

    猜你喜欢
    • 2018-02-11
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多