【问题标题】:Spark streaming JavaCustomReceiver火花流 JavaCustomReceiver
【发布时间】:2017-01-24 14:07:40
【问题描述】:

在 EMR 客户端模式和集群模式下,纱线中的 Spark 流式 Java 自定义接收器问题。

以下是问题。

当我们在 EMR 集群(纱线)上运行 spark 流的 JavaCustomReceiver 时,它会随机将侦听器绑定到执行器之一。所以我们所要做的就是,将所有传入的流量转移到它随机选择的那个 ip。

当执行器失败时,情况会变得更糟。重新启动后,它尝试在另一个执行器上绑定侦听器,再次随机选择。我们必须再次将传入流量转移到新选择的节点。

我的问题是: 1. 我们不能在我们选择的特定执行者上绑定监听器吗? (修复 ip 以便侦听器绑定) 如果不... 2. 无论如何我们可以通过程序知道它在哪个执行器上重新启动了侦听器? (因为它选择随机节点来启动该接收器) 最重要的是。 3. 驱动运行的节点可以不绑定监听吗? (在客户端模式下运行时)

仅供参考

我们已经尝试过 Receiver 超类的 preferredLocation,但我们没有同样的运气。

对此的任何帮助都非常感谢。

【问题讨论】:

    标签: apache-spark spark-streaming hadoop-yarn


    【解决方案1】:

    我在使用 Flume 时遇到了同样的问题。即使我通过 FlumeUtils.createStream 我的首选位置主机名,它也会尝试运行每个节点,但除了确切节点之外的所有节点都失败了。如果我将 0.0.0.0 作为主机传递,那么它的行为与您描述的一样。它选择一个随机节点来启动接收器。

    问题: 资源管理器无法决定运行接收器的首选工作节点。

    解决方案:

    1. 确保覆盖首选位置
    2. 确保使用确切的节点引用作为首选位置,如 Spark+Flume Integration => “请注意 主机名应与资源使用的主机名相同 集群中的管理器(Mesos、YARN 或 Spark Standalone),以便 资源分配可以匹配名称并启动接收器 正确的机器。”。

      对于我的 FQDN,主机名不起作用。 IP 是解决方案。

    3. 确保您传递的 IP 属于 Spark Worker 节点(数据节点)。如果您传递非数据节点机器的 IP 地址,它也会失败。

      我还计划在驱动程序作为客户端运行但 spark 将接收器推送到工作节点的节点上运行。如果您的客户端节点是工作节点,那么这将不是问题。如果不是 - 就像我的情况,客户端是一个女王(名称)节点 - 那么你应该选择一个很酷的工作节点来运行接收器:)

    希望对你有帮助。

    【讨论】:

    • 我试过这个,但没有帮助。暂时我只在本地模式下运行解决了这个问题,暂时放弃了集群模式的想法。对于可扩展性,我仍然需要解决问题中列出的问题。无论如何,谢谢。
    • 在我的情况下,切换到 IP 也是解决问题的方法,即使使用的主机名与 yarn node -list 中报告的完全相同,并且日志显示该名称已正确解析为相同的 IP .它必须是它的 IP 才能工作,
    猜你喜欢
    • 1970-01-01
    • 2017-04-27
    • 2019-04-02
    • 2016-02-07
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    相关资源
    最近更新 更多