2017-01-22 9 views
3

Исправлена ​​ошибка, связанная с выпуском пользовательского ресивера в пряжке в режиме клиента EMR, а также в режиме кластера.Исправленная потоковая передача JavaCustomReceiver

Ниже приведена проблема.

Когда мы запускаем JavaCustomReceiver искрового потока на кластере EMR (пряжа), он случайным образом связывает слушателя с одним из исполнителей. Итак, все, что нам нужно сделать, - переадресовать весь входящий трафик на тот 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-адрес машины, отличной от datanode, она также терпит неудачу.

    Я также планировал запустить на узле, где драйвер работает как клиент, но искру нажимает приемник на рабочий узел. Если ваш клиентский узел является рабочим узлом, тогда это не проблема. Если это не -подобное мой случай, что клиент является королева (имя) node-, то вы должны выбрать прохладный узел уборщицы запустить приемник :)

Я надеюсь, что это помогает.

+0

Я пробовал это, но это не помогло. Временно я решил проблему, только запустив ее в локальном режиме, теперь отказался от идеи режима cluter. Для масштабируемости мне все еще нужно решить проблему, указанную в вопросе. В любом случае спасибо. – desaiankitb