Hadoop на AWS выдает «java.net.ConnectException Connect отказался» - PullRequest
0 голосов
/ 31 августа 2018

Я настроил Hadoop на AWS несколько дней назад и провел тест на количество слов. Но задача не достигла прогресса за 40 минут. Любая задача, включая загруженную пряжу, тоже не работала. У меня есть 1 Наменод (Хозяин) и 2 Датанод (Рабы).

Я просматриваю файл журнала, сначала журнал менеджера ресурсов показывает, что:

WARN org.apache.hadoop.ipc.Client: Failed to connect to server: Slave2/172.31.25.60:38729:   And Failed to connect to server: Slave1/balabalablabla

Я также заметил эту ошибку в журнале:

java.net.ConnectException: Connection refused 

Затем я загружаю журнал Datanode, в котором была выполнена задача, после прочтения журнала я предполагаю, что Datanode2 завершил задачу, но в то время не может связаться с Namenode.

Вот файл журнала: yarn-ubuntu-resourcemanager-ambari.master.com: https://github.com/MasterMiror/Hadoop/blob/master/yarn-ubuntu-resourcemanager-ambari.master.com.log (14.6mb просто игнорировать другую часть журнала, я забыл почистить ее, прочитайте последнюю часть в порядке)

Журнал Datanode2 (на нем выполнялась задача wordcount): журнал mapreducetask (возможно, вы думаете, что в каждом каталоге должно быть 3 файла, но 3 файла имеют размер 0 Кб, поэтому они не были загружены на github)

Вот мой файл конфигурации

HDFS-site.xml:

<configuration>
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>Master:50090</value>
 </property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
    <name>dfs.namenode.name.dir</name>
    <value>/home/ubuntu/hadoopdata/namenode</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>/home/ubuntu/hadoopdata/datanode</value>
</property>
</configuration>

ядро-site.xml:

<configuration>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master/</value>
</property>
</configuration>
</configuration>

пряжи site.xml:

<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

</configuration>

mapred-site.xml:

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

1 Ответ

0 голосов
/ 01 сентября 2018

Это должно быть легко исправить. Когда процесс HADOOP может создать новый файл в HDFS, но файл имеет длину 0, это обычно означает, что процесс может общаться с NameNode (который создает файл), но когда протокол HDFS перенаправляет процесс на DataNode (который сохраняет данные) это не удается.

В AWS это обычно означает, что ваша группа безопасности блокирует связь Master <-> Slave и Slave <-> Slave. Создайте новую группу безопасности, включите все порты для всех протоколов с исходным CIDR, являющимся частной сетью VPC (что-то вроде 10.0.0.0/16), и назначьте эту группу безопасности каждому узлу в вашем кластере. Эта группа безопасности позволит каждому узлу общаться друг с другом. Убедитесь, что у вас нет каких-либо правил DENY в других группах безопасности, подключенных к тому же кластеру, которые блокировали бы связь узла <-> узла.

Настроить Hadoop в качестве небольшого кластера очень просто. Продолжайте, пока не добьетесь успеха. Этот процесс поможет вам понять, как все части сочетаются друг с другом, и, что важнее всего, вам будет намного удобнее с файлами конфигурации Hadoop. Однако я рекомендую сначала начать с кластера из одного узла, а затем создать реальный кластер.

...