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

时间:2015-05-01 18:38:47

标签: java hadoop

我正在设置Ubuntu 14.04单节点群集。我关注hadoop-common/SingleCluster documentation。我在martakarass@marta-komputer:/usr/local/hadoop$ jps 4963 SecondaryNameNode 4785 DataNode 8400 Jps martakarass@marta-komputer:/usr/local/hadoop$ 工作。到目前为止,我已成功运行独立操作。

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

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$ 

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

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...

(我相信此时我可以忽略Hadoop警告。)

对于<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> 配置文件,我只更改了文档中提到的文件。我有:

等/ hadoop的/芯-site.xml中

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

等/ hadoop的/ HDFS-site.xml中

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

我设法连接到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
************************************************************/

我格式化了文件系统:

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 /主机

marta-komputer

等/主机名

function encodePath(path) {
    var segments = path.split('/'),
        i = segments.length;

    while (i--) {
        segments[i] = encodeUriSegment(segments[i]);
    }

    return segments.join('/');
}

4 个答案:

答案 0 :(得分:2)

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

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

    127.0.0.1    localhost   <computer-name>
    # 127.0.1.1    <computer-name>
    <ip-address>    <computer-name>

    # Rest of file with no changes

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

  • core-site.xml

        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost/</value>
        </property>
        <!-- set value to a directory you want with an absolute path -->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>"set/a/directory/on/your/machine/"</value>
            <description>A base for other temporary directories</description>
        </property>
    
  • hdfs-site.xml

        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    
  • yarn-site.xml

        <property>
            <name>yarn.recourcemanager.hostname</name>
            <value>localhost</value>
        </property>
    
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
    
  • mapred-site.xml

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

3)验证$HADOOP_CONF_DIR

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

4)检查您的港口:

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 < / strong>并评估jps的输出:

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

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

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

答案 1 :(得分:1)

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

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://marta-komputer:9000</value>
    </property>
</configuration>

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

答案 2 :(得分:1)

/ 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. 按照本教程here

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

  3. 更新II:

    1. 创建目录并更改namenode和datanode的权限:
    2. 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
      2. 中添加这些属性

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

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

        1. 停止并启动hadoop进程。

答案 3 :(得分:0)

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