Тег сообщения протокола Hadoop имел недопустимый тип провода

Я настроил кластер hadoop 2.6, используя два узла по 8 ядер каждый в Ubuntu 12.04. sbin/start-dfs.sh и sbin/start-yarn.sh оба преуспевают. И я вижу следующее после jps на главном узле.

22437 DataNode
22988 ResourceManager
24668 Jps
22748 SecondaryNameNode
23244 NodeManager

Результат jps на ведомом узле:

19693 DataNode
19966 NodeManager

Затем я запускаю пример PI.

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar pi 30 100

Что дает мне журнал ошибок

java.io.IOException: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Protocol message tag had invalid wire type.; Host Details : local host is: "Master-R5-Node/xxx.ww.y.zz"; destination host is: "Master-R5-Node":54310; 
    at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:772)
    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.$Proxy9.getFileInfo(Unknown Source)
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo(ClientNamenodeProtocolTranslatorPB.java:752)

Проблема, похоже, связана с файловой системой HDFS, поскольку попытка выполнить команду bin/hdfs dfs -mkdir /user не удалась с аналогичным исключением.

java.io.IOException: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Protocol message tag had invalid wire type.; Host Details : local host is: "Master-R5-Node/xxx.ww.y.zz"; destination host is: "Master-R5-Node":54310;

где xxx.ww.y.zz — ip-адрес Master-R5-Node

Я проверил и выполнил все рекомендации ConnectionRefused для Apache и на этом сайте.

Несмотря на недельные усилия, я не могу это исправить.

Спасибо.


person Reda    schedule 06.08.2015    source источник


Ответы (1)


Есть так много причин, которые могут привести к проблеме, с которой я столкнулся. Но в конце концов я исправил это, используя некоторые из следующих вещей.

  1. Убедитесь, что у вас есть необходимые права доступа к файлам /hadoop и hdfs temporary. (вы должны выяснить, где это для вашего конкретного случая)
  2. удалите номер порта из fs.defaultFS в $HADOOP_CONF_DIR/core-site.xml. Это должно выглядеть так:
`<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://my.master.ip.address/</value>
<description>NameNode URI</description>
</property>
</configuration>`
  1. Добавьте следующие два свойства в `$HADOOP_CONF_DIR/hdfs-site.xml.
 <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>

Вуаля! Теперь вы должны быть готовы к работе!

person Reda    schedule 12.08.2015