Hadoop伪分布式操作错误:协议消息标记具有无效的线路类型

我正在建立一个Hadoop 2.6.0单节点集群。 我按照hadoop-common / SingleCluster文档进行操作 。 我在Ubuntu 14.04上工作。 到目前为止,我已成功运行独立操作。

我在尝试执行伪分布式操作时遇到错误。 我设法启动NameNode守护进程和DataNode守护进程。 jps oputut:

 martakarass@marta-komputer:/usr/local/hadoop$ jps 4963 SecondaryNameNode 4785 DataNode 8400 Jps martakarass@marta-komputer:/usr/local/hadoop$ 

但是当我尝试执行MapReduce作业所需的HDFS目录时,我收到以下错误:

 martakarass@marta-komputer:/usr/local/hadoop$ bin/hdfs dfs -mkdir /user 15/05/01 20:36:00 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable mkdir: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Protocol message tag had invalid wire type.; Host Details : local host is: "marta-komputer/127.0.0.1"; destination host is: "localhost":9000; martakarass@marta-komputer:/usr/local/hadoop$ 

(我相信我可以忽略WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...警告。)


说到Hadoop配置文件,我只更改了文档中提到的文件。 我有:

etc / hadoop / core-site.xml

   fs.defaultFS hdfs://localhost:9000   

etc / hadoop / hdfs-site.xml

   dfs.replication 1   

我设法连接到localhost:

 martakarass@marta-komputer:~$ ssh localhost martakarass@localhost's password: Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-45-generic x86_64) * Documentation: https://help.ubuntu.com/ Last login: Fri May 1 20:28:58 2015 from localhost 

我格式化了文件系统:

 martakarass@marta-komputer:/usr/local/hadoop$ bin/hdfs namenode -format 15/05/01 20:30:21 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = marta-komputer/127.0.0.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 2.6.0 (...) 15/05/01 20:30:24 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at marta-komputer/127.0.0.1 ************************************************************/ 

/ etc / hosts

 127.0.0.1 localhost 127.0.0.1 marta-komputer # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 

etc / hostname

 marta-komputer 

这是我在Ubuntu面对完全相同的问题时所遵循的一系列步骤,但是对于2.7.1 ,步骤对于前一版和未来版本应该没有太大差异(我相信)。

1)我的/etc/hosts文件夹的格式:

  127.0.0.1 localhost  # 127.0.1.1    # Rest of file with no changes 

2) *.xml配置文件(显示标签内的内容):

  • 对于core-site.xml

       fs.defaultFS hdfs://localhost/    hadoop.tmp.dir "set/a/directory/on/your/machine/" A base for other temporary directories  
  • 对于hdfs-site.xml

       dfs.replication 1  
  • 对于yarn-site.xml

       yarn.recourcemanager.hostname localhost   yarn.nodemanager.aux-services mapreduce_shuffle  
  • 对于mapred-site.xml

       mapreduce.framework.name yarn  

3)validation$HADOOP_CONF_DIR

这是validation您确实使用此配置的好机会。 在.xml文件所在的文件夹中,查看脚本hadoop_env.sh内容,并确保$HADOOP_CONF_DIR指向正确的目录。

4)检查您的PORTS:

NameNode在我的标准分发上绑定端口500708020 ,DataNode绑定端口50010,50020,5007543758 。 运行sudo lsof -i以确定没有其他服务出于某种原因使用它们。

5)必要时格式化:

此时,如果您更改了值hadoop.tmp.dir ,则应该使用hdfs namenode -format重新格式化NameNode。 如果没有删除您正在使用的tmp目录中已存在的临时文件(默认为/tmp/ ):

6)启动节点和纱线:

/sbin/使用start-dfs.sh脚本和带有start-yarn.sh yarn启动名称和数据节点,并评估jps的输出:

  ./start-dfs.sh ./start-yarn.sh 

此时,如果NameNode,DataNode,NodeManager和ResourceManager都在运行,您应该设置为go!

如果其中任何一个尚未启动,请共享日志输出以供我们重新评估。

/etc/hosts删除127.0.0.1 localhost并更改您的core-site.xml ,如下所示:

   fs.defaultFS hdfs://marta-komputer:9000   

并且您可以忽略WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...警告

/ etc / hosts中进行以下更改:

1.变更:

 127.0.0.1 localhost 

 127.0.0.1 localhost marta-komputer 

2.删除:

 127.0.0.1 marta-komputer 

3.添加:

 your-system-ip marta-komputer 

要查找系统IP,请在终端中键入

 ifconfig 

(在此处找到您的IP地址)或输入:

 ifdata -pa eth0 

您的最终/ etc / hosts文件应如下所示:

 127.0.0.1 localhost marta-komputer your-system-ip marta-komputer # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 

更改hdfs-site.xml

1.变更:

 hdfs://localhost:9000 

 hdfs://marta-komputer:9000 

现在,停止并启动hadoop进程。

您的jps命令应列出以下进程:

 Namenode Datanode TaskTracker SecondaryNameNode 

如果未列出所有这些进程,请检查相应的日志以查找错误。

更新:

  1. 请在此处阅读本教程

  2. 如果问题仍然存在,则可能是由于权限问题。

更新II:

  1. 创建目录并更改namenode和datanode的权限:

sudo mkdir -p /usr/local/hdfs/namenode

sudo mkdir -p /usr/local/hdfs/datanode

sudo chown -R hduser:hadoop /usr/local/hdfs/namenode

sudo chown -R hduser:hadoop /usr/local/hdfs/datanode

  1. hdfs-site.xml添加以下属性:

dfs.datanode.data.dir ,其值为/usr/local/hdfs/datanode

dfs.namenode.data.dir ,其值为/usr/local/hdfs/namenode

  1. 停止并启动hadoop进程。

当我从java代码上传文件到hdfs时,我得到了这个错误,问题是我使用hadoop 1 jar连接到hadoop 2安装,不确定你的情况下是什么问题,但如果你配置了hadoop 1 eariler那么一定要弄乱它