2017-01-22 124 views
3

在EMR客户端模式以及集群模式下,在纱线上Spark spark java自定义接收器问题。Spark Streaming JavaCustomReceiver

以下是问题所在。

当我们在EMR集群(纱线)上运行SparkCustomReader的JavaCustomReceiver时,它会随机地绑定一个执行程序的侦听器。因此,我们所要做的就是将所有传入流量转移到随机选择的IP。

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

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

FYI

我们已经尝试过接收器的超类的preferredLocation,但我们并没有运气一样。

任何帮助,这是高度赞赏。

回答

1

我正在用Flume解决同样的问题。即使我通过FlumeUtils.createStream我的首选位置主机名,它也会尝试每个节点运行,并且除了确切的节点之外,它们都会失败。如果我通过0.0.0.0作为主机,那么它的行为就像你描述的那样。它选择一个随机节点来启动接收器。

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

解决方案:

  1. 确保您覆盖preferredLocation
  2. 确保您使用确切的节点引用作为首选的位置由Spark+Flume Integration指示=>“请注意, 主机名应该是一样的资源 管理器在集群中使用的一个(Mesos,YARN或Spark Standalone),以便 资源分配可以匹配名称并在 正确的机器上启动接收器。“。

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

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

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

我希望它能帮助。

+0

我试过这个,但它无法帮助。暂时我只通过在本地模式下运行来解决问题,现在放弃了Cluter模式的想法。对于可伸缩性,我仍然需要解决问题中列出的问题。不管怎么说,多谢拉。 – desaiankitb