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在我的标准分发上绑定端口50070和8020 ,DataNode绑定端口50010,50020,50075和43758 。 运行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
如果未列出所有这些进程,请检查相应的日志以查找错误。
更新:
-
请在此处阅读本教程
-
如果问题仍然存在,则可能是由于权限问题。
更新II:
- 创建目录并更改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
- 在
hdfs-site.xml
添加以下属性:
dfs.datanode.data.dir
,其值为/usr/local/hdfs/datanode
dfs.namenode.data.dir
,其值为/usr/local/hdfs/namenode
- 停止并启动hadoop进程。
当我从java代码上传文件到hdfs时,我得到了这个错误,问题是我使用hadoop 1 jar连接到hadoop 2安装,不确定你的情况下是什么问题,但如果你配置了hadoop 1 eariler那么一定要弄乱它
- Hadoop构建在Windows中失败:native.sln缺少zconf.h?
- java.lang.IllegalArgumentException:错误的FS:,期望:hdfs:// localhost:9000
- PIG – 找到接口org.apache.hadoop.mapreduce.JobContext,但是类是预期的
- 如何在hadoop hdfs中列出目录及其子目录中的所有文件
- HDFS:使用Java / Scala API移动多个文件
- 不推荐使用HTable(config,tablename)类型。 有什么用呢?
- java中的java.sql.SQLException:org.apache.thrift.transport.TTransportException?
- 如何将Hadoop Path对象转换为Java File对象
- 如何告诉MapReduce使用多少映射器?