ConnectException: соединение отклонено при запуске mapreduce в Hadoop

Я настроил Hadoop (2.6.0) с режимом нескольких машин: 1 namenode + 3 datanode. Когда я использовал команду: start-all.sh, они (namenode, datanode, менеджер ресурсов, менеджер узлов) работали нормально. Я проверил это с помощью команды jps, и результаты для каждого узла были ниже:

ИмяУзел:

7300 диспетчер ресурсов

6942 ИмяУзел

7154 ВторичноеИмяУзел

Узлы данных:

3840 узел данных

3924 Менеджер узлов

Я также загрузил образец текстового файла на HDFS по адресу: /user/hadoop/data/sample.txt. Абсолютно никакой ошибки в тот момент.

Но когда я попытался запустить mapreduce с jar-файлом примера Hadoop:

jar hadoop hadoop-mapreduce-examples-2.6.0.jar количество слов /user/hadoop/data/sample.txt /user/hadoop/output

У меня есть эта ошибка:

15/04/08 03:31:26 INFO mapreduce.Job: Job job_1428478232474_0001 running    in uber mode : false
15/04/08 03:31:26 INFO mapreduce.Job:  map 0% reduce 0%
15/04/08 03:31:26 INFO mapreduce.Job: Job job_1428478232474_0001 failed with     state FAILED due to: Application application_1428478232474_0001 failed 2 times due to Error launching appattempt_1428478232474_0001_000002. Got exception: java.net.ConnectException: Call From hadoop/127.0.0.1 to localhost:53245 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:791)
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:731)
at org.apache.hadoop.ipc.Client.call(Client.java:1472)
at org.apache.hadoop.ipc.Client.call(Client.java:1399)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:232)
at com.sun.proxy.$Proxy31.startContainers(Unknown Source)
at org.apache.hadoop.yarn.api.impl.pb.client.ContainerManagementProtocolPBClientImpl.startContainers(ContainerManagementProtocolPBClientImpl.java:96)
at org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher.launch(AMLauncher.java:119)
at org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher.run(AMLauncher.java:254)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739)
at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:530)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:494)
at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:607)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:705)
at org.apache.hadoop.ipc.Client$Connection.access$2800(Client.java:368)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1521)
at org.apache.hadoop.ipc.Client.call(Client.java:1438)
    ... 9 more Failing the application.
15/04/08 03:31:26 INFO mapreduce.Job: Counters: 0

Что касается конфигурации, убедитесь, что namenode может подключаться по ssh к узлам данных и наоборот без запроса пароля. Я также отключил IP6 и изменил файл /etc/hosts:

127.0.0.1 локальный хауп

192.168.56.102 хауп-нн

192.168.56.103 хауп-dn1

192.168.56.104 хауп-дн2

192.168.56.105 хауп-dn3

Я не знаю, почему mapreduced не может работать, хотя namenode и datanodes работали нормально. Я почти застрял здесь, вы можете помочь мне найти причину ??

Спасибо

Изменить: здесь конфигурация в hdfs-site.xml (namenode):

<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///usr/local/hadoop/hadoop_stores/hdfs/namenode</value>
    <description>NameNode directory for namespace and transaction logs storage.</description>
</property>
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
<property>
    <name>dfs.permissions</name>
    <value>false</value>
</property>
<property>
    <name>dfs.datanode.use.datanode.hostname</name>
    <value>false</value>
</property>
<property>
    <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
    <value>false</value>
</property>
<property>
     <name>dfs.namenode.http-address</name>
     <value>hadoop-nn:50070</value>
     <description>Your NameNode hostname for http access.</description>
</property>
<property>
     <name>dfs.namenode.secondary.http-address</name>
     <value>hadoop-nn:50090</value>
     <description>Your Secondary NameNode hostname for http access.</description>
</property>

В узлах данных:

<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///usr/local/hadoop/hadoop_stores/hdfs/data/datanode</value>
    <description>DataNode directory</description>
</property>

<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
<property>
    <name>dfs.permissions</name>
    <value>false</value>
</property>
<property>
    <name>dfs.datanode.use.datanode.hostname</name>
    <value>false</value>
</property>
<property>
     <name>dfs.namenode.http-address</name>
     <value>hadoop-nn:50070</value>
     <description>Your NameNode hostname for http access.</description>
</property>
<property>
     <name>dfs.namenode.secondary.http-address</name>
     <value>hadoop-nn:50090</value>
     <description>Your Secondary NameNode hostname for http access.</description>

Вот результат с командой: hadoop fs -ls /user/hadoop/data

hadoop@hadoop:~/DATA$ hadoop fs -ls /user/hadoop/data 15/04/09 00:23:27 Найдено 2 элемента

-rw-r--r-- 3 супергруппа hadoop 29 09.04.2015 00:22 >/user/hadoop/data/sample.txt

-rw-r--r-- 3 супергруппа hadoop 27 09.04.2015 00:22 >/user/hadoop/data/sample1.txt

hadoop fs -ls /user/hadoop/output

ls: `/user/hadoop/output': Нет такого файла или каталога


person kate    schedule 08.04.2015    source источник
comment
Вы сначала отформатировали namenode? Также есть ли строка с 127.0.1.1 в вашем файле /etc/hosts?   -  person Rajesh N    schedule 08.04.2015
comment
да, я отформатировал namenode, и журнал не показывает ошибок. нам тоже нужно 127.0.1.1 в файле hosts после строки 127.0.0.1?   -  person kate    schedule 08.04.2015
comment
127.0.1.1 не нужен, так как в основном вызывает проблемы с подключением. Можешь опубликовать свой hdfs-site.xml?   -  person Rajesh N    schedule 08.04.2015
comment
да, в файле hosts нет строки 127.0.1.1. Я добавил соответствующее содержимое hdfs-site.xml. тебе нужно что-то еще? Я совсем запутался с этим Т_Т   -  person kate    schedule 09.04.2015
comment
Что дает эта команда: telnet hadoop-nn в namenode и datanodes? Можете ли вы сделать telnet 127.0.0.1 со своего namenode?   -  person Rajesh N    schedule 09.04.2015
comment
Упс, результат такой: telnet: невозможно подключиться к удаленному хосту: в соединении отказано. это также с 127.0.0.1   -  person kate    schedule 09.04.2015
comment
Но если соединение отказано, почему я могу загрузить файл в HDFS, его блоки доступны в 3-х датанодах.   -  person kate    schedule 09.04.2015
comment
Давайте продолжим обсуждение в чате.   -  person kate    schedule 09.04.2015
comment
telnet 127.0.0.1 должно работать. Я приду к этому позже. Опубликовать результаты для: hadoop fs -ls /user/hadoop/data и hadoop fs -ls /user/hadoop/output   -  person Rajesh N    schedule 09.04.2015
comment
Я обновил результат в вопросе. С помощью hadoop fs -ls /user/hadoop/output, конечно, из-за ошибки, поэтому у него нет выходной папки   -  person kate    schedule 09.04.2015
comment
Попробуйте следующий пример: hadoop.apache.org/docs/current/hadoop-mapreduce-client/   -  person Rajesh N    schedule 09.04.2015


Ответы (2)


Решение найдено!! см. этот пост- пряжа показывает идентификатор/имя узлов данных как локальный хост

Call From localhost.localdomain/127.0.0.1 to localhost.localdomain:56148 failed on connection exception: java.net.ConnectException: Connection refused;

И главный, и подчиненный серверы имели имена хостов localhost.localdomain в /etc/hostname.
Я изменил имена хостов подчиненных устройств на slave1 и slave2. Это сработало. Спасибо всем за ваше время.

@kate убедитесь, что etc/hostname в namenode и datanodes не установлен на localhost. Просто введите ~# имя хоста в терминале, чтобы увидеть. Вы можете установить новое имя хоста той же командой.

/etc/hosts моего мастера и рабочих или рабов выглядит так:

127.0.0.1    localhost localhost.localdomain localhost4 localhost4.localdomain4
#127.0.1.1    localhost
192.168.111.72  master
192.168.111.65  worker1
192.168.111.66  worker2

имя хоста worker1

hduser@worker1:/mnt/hdfs/datanode$ cat /etc/hostname 
worker1

и рабочий2

hduser@worker2:/usr/local/hadoop/logs$ cat /etc/hostname 
worker2

Кроме того, возможно, вы не хотите иметь имя хоста «hadoop» с петлевым интерфейсом. то есть

127.0.0.1 localhost hadoop 

Проверьте этот пункт (1) в https://wiki.apache.org/hadoop/ConnectionRefused. .

Спасибо.

person rajesh    schedule 28.05.2015
comment
Сэр, но не могли бы вы подробно рассказать о содержании вашего etc/hostname (slaves и master), которое заставило ваш подсчет слов работать, пожалуйста? до сих пор не понимаю. - person kate; 02.06.2015

ПРОБЛЕМА С БРАНДМАУЕРОМ:

java.net.ConnectException: в соединении отказано

Эта ошибка может быть связана с проблемами брандмауэра. Сделайте это в терминале:

sudo apt-get install iptables-persistent
sudo iptables -L
sudo iptables-save > /usr/iptables-backup/iptables.v4.rules

Прежде чем продолжить, проверьте, создан ли файл (поскольку он будет использоваться для восстановления брандмауэра, если что-то пойдет не так).

Теперь сбросьте правила iptable (т.е. остановите брандмауэр):

sudo iptables -F

Теперь попробуй,

sudo iptables -L

Эта команда не должна возвращать никаких правил. Теперь попробуйте запустить задание map/reduce.

Примечание. Если вы хотите восстановить предыдущее состояние iptables, введите это в терминале:

sudo iptables-restore < /usr/iptables-backup/iptables.v4.rules

person Rajesh N    schedule 09.04.2015
comment
Извините, но сначала я проверил правило списка: iptables --list У него всего 3 правила: Цепочка ВХОД (политика ПРИНЯТЬ) целевая защита выбор источника назначения Цепочка ВПЕРЕД (политика ПРИНЯТЬ) целевая защита выбор источника назначения Цепочка ВЫВОД (политика ПРИНЯТЬ) целевая защита выбор источника назначения. Но после того, как вы ответили на ваш ответ, в нем есть нечто большее: это должно быть подлым?? (Сначала нужно спросить, прежде чем применять это к другим узлам) - person kate; 09.04.2015
comment
Это означает, что ваш firewall is disabled. После того, как вы закончите это в системе namenode, попробуйте запустить задание подсчета слов. Если ошибка повторяется, попробуйте этот метод на всех узлах данных, а затем выполните задание подсчета слов. - person Rajesh N; 09.04.2015
comment
Я пробовал это на всех namenode и datanodes, но все равно эта ошибка. Когда я проверил порты с помощью: netstat -a|egrep 'Proto|LISTEN'; в нем перечислены все порты, которые прослушиваются. И обнаружил, что нет порта 53245 (тот, что был в журнале ошибок). А также в конфигурационном файле (hdfs,mapred,yarn,core-site) нет ни одной записи с этим портом. Интересно, откуда взялся этот порт 53245?? - person kate; 09.04.2015