Ошибка Apache Spark: не удалось подключиться к akka.tcp://sparkMaster@
Это наши первые шаги с использованием таких больших данных, как apache spark и hadoop.
У нас установлен Cloudera CDH 5.3. Из диспетчера Cloudera мы решили установить спарк. Spark очень хорошо работает и работает в одном из узлов кластера.
Со своей машины я сделал небольшое приложение, которое подключается для чтения текстового файла, хранящегося в Hadoop HDFS.
Я пытаюсь запустить приложение из Eclipse, и оно отображает эти сообщения
15/02/11 14:44:01 INFO client.AppClient$ClientActor: Connecting to master spark://10.62.82.21:7077...
15/02/11 14:44:02 WARN client.AppClient$ClientActor: Could not connect to akka.tcp://sparkMaster@10.62.82.21:7077: akka.remote.InvalidAssociation: Invalid address: akka.tcp://sparkMaster@10.62.82.21:7077
15/02/11 14:44:02 WARN Remoting: Tried to associate with unreachable remote address [akka.tcp://sparkMaster@10.62.82.21:7077]. Address is now gated for 5000 ms, all messages to this address will be delivered to dead letters. Reason: Connection refused: no further information: /10.62.82.21:7077
Приложение имеет один класс для создания контекста, используя следующую строку
JavaSparkContext sc = new JavaSparkContext(new SparkConf().setAppName("Spark Count").setMaster("spark://10.62.82.21:7077"));
где этот IP - IP-адрес искры, работающей на машине.
Затем я пытаюсь прочитать файл из HDFS, используя следующую строку
sc.textFile("hdfs://10.62.82.21/tmp/words.txt")
Когда я запускаю приложение, я получил
3 ответа
Проверьте ваши основные журналы Spark, вы должны увидеть что-то вроде:
15/02/11 13:37:14 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkMaster@mymaster:7077]
15/02/11 13:37:14 INFO Remoting: Remoting now listens on addresses: [akka.tcp://sparkMaster@mymaster:7077]
15/02/11 13:37:14 INFO Master: Starting Spark master at spark://mymaster:7077
Затем, когда вы подключаетесь к мастеру, убедитесь, что вы используете точно такое же имя хоста, которое указано в журналах выше (не используйте IP-адрес):
.setMaster("spark://mymaster:7077"));
Spark standalone немного требователен к этому имени хоста /IP.
При создании мастера Spark используется командная оболочка "sbin/start-master.sh". перейдите по адресу http://localhost:8080/ и проверьте строку "URL".
Я не вижу принятого ответа, просто для информации, я думал, что упомяну пару вещей.
Во-первых, в файле spark-env.sh в каталоге conf параметры SPARK_MASTER_IP и SPARK_LOCAL_IP могут быть именами хостов. Вы не хотите, чтобы они были, но они могут быть.
Как отмечалось в другом ответе, Spark может быть немного требователен к имени хоста и IP-адресу из-за этой исправленной ошибки / функции: см. Ошибку здесь. Проблема в том, что не ясно, если они "решены", просто говоря нам использовать IP вместо имени хоста?
Ну, у меня сейчас такая же проблема, и первое, что вы делаете, это проверяете основы.
Можете ли вы пропинговать окно, где работает мастер Spark? Можете ли вы пинговать работника от мастера? Что еще более важно, вы можете использовать ssh без пароля для рабочего из мастер-бокса? В соответствии с 1.5.2 документа вы должны быть в состоянии сделать это с закрытым ключом и иметь рабочий введен в файл conf/slaves. Я скопировал соответствующий пункт в конце.
Вы можете получить ситуацию, когда рабочий может связаться с мастером, но мастер не может вернуться к рабочему, поэтому похоже, что соединение не установлено. Проверьте оба направления.
Наконец, из всех комбинаций настроек, в ограниченном эксперименте, который я только что нашел, я нашел только одну, которая имела значение: на master в файле spark-env.sh установите для SPARK_MASTER_IP IP-адрес, а не имя хоста. Затем подключитесь от работника с помощью spark://192.168.0.10:7077 и вуаля! Кажется, здесь не нужны никакие другие параметры конфигурации.
Вот параграф из документации о файле ssh и slaves в conf:
Чтобы запустить автономный кластер Spark со сценариями запуска, необходимо создать файл conf/slaves в каталоге Spark, который должен содержать имена хостов всех компьютеров, на которых вы собираетесь запускать рабочие Spark, по одному на строку. Если conf/slaves не существует, по умолчанию в сценариях запуска используется один компьютер (localhost), что полезно для тестирования. Обратите внимание, что главный компьютер обращается к каждому из рабочих компьютеров через ssh. По умолчанию ssh запускается параллельно и требует установки без пароля (с использованием закрытого ключа) для настройки. Если у вас нет настройки без пароля, вы можете установить переменную среды SPARK_SSH_FOREGROUND и последовательно ввести пароль для каждого работника.
Как только вы это сделаете, использование IP-адреса должно работать в вашем коде. Дайте нам знать! Это может быть досадной проблемой, и было приятно узнать, что большинство параметров конфигурации не имеет значения.