Hadoop中的数据复制错误

Hadoop中的数据复制错误,hadoop,replication,Hadoop,Replication,我通过以下方式在我的机器上实现Hadoop单节点群集,并遇到数据复制错误: 以下是完整的错误消息: 当我执行时: bin/stop-all.sh 它表示datanode尚未启动,因此无法停止。不过,jps的输出表示数据节点存在 我尝试格式化namenode,更改所有者权限,但似乎不起作用。希望我没有错过任何其他相关信息 提前谢谢。看看你的namenode(可能),看看它说你有多少数据节点 如果为0,则说明datanode未运行或未配置为连接到namenode 如果是1,请检查DFS中有多少可用

我通过以下方式在我的机器上实现Hadoop单节点群集,并遇到数据复制错误:

以下是完整的错误消息:

当我执行时:

bin/stop-all.sh
它表示datanode尚未启动,因此无法停止。不过,jps的输出表示数据节点存在

我尝试格式化namenode更改所有者权限,但似乎不起作用。希望我没有错过任何其他相关信息

提前谢谢。

看看你的namenode(可能),看看它说你有多少数据节点

如果为0,则说明datanode未运行或未配置为连接到namenode


如果是1,请检查DFS中有多少可用空间。可能是数据节点没有任何可以写入数据的位置(data dir不存在,或者没有写入权限)。

对我有效的解决方案是逐个运行namenode和datanode,而不是使用
bin/start all.sh
一起运行。使用这种方法所发生的情况是,如果在网络上设置datanodes时遇到一些问题,那么错误是显而易见的,而且stackoverflow上的许多帖子表明namenode需要一些时间启动,因此,在启动datanodes之前,应该给它一些时间启动。此外,在本例中,我遇到了namenode和datanodes的不同id的问题,为此我必须使用与namenode相同的id更改datanode的id

分步程序将是:

  • 启动namenode
    bin/hadoop namenode
    。检查错误(如果有)
  • 启动datanodes
    bin/hadoop datanode
    。检查错误(如果有)
  • 现在使用“bin/start mapred.sh”启动任务跟踪器和作业跟踪器

  • 虽然已经解决了,我还是为未来的读者添加了这个。Cody关于检查namenode和datanode的开始的建议很有用,进一步的调查使我删除了hadoop store/dfs目录。这样做为我解决了这个错误。

    我也遇到了同样的问题,我查看了datanode日志,发现一条警告说dfs.data.dir的权限不正确。。。所以我改变了它们,一切都正常了,这有点奇怪

    具体来说,我的“dfs.data.dir”被设置为“/home/hadoop/hd_tmp”,我得到的错误是:

    ...
    ...
    WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid directory in dfs.data.dir: Incorrect permission for /home/hadoop/hd_tmp/dfs/data, expected: rwxr-xr-x, while actual: rwxrwxr-x
    ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: All directories in dfs.data.dir are invalid.
    ...
    ...
    
    所以我只是执行了这些命令:

    • 我用“bin/stop all.sh”阻止了所有的恶魔
    • 使用“chmod-R 755/home/hadoop/hd_tmp”更改目录的权限
    • 我用“bin/hadoop namenode-format”再次为namenode指定了格式
    • 我重新启动了恶魔“bin/start all.sh”
    • 瞧,数据节点已经启动并运行了!(我用命令“jsp”检查了它,其中显示了一个名为DataNode的进程)

    然后一切正常。

    我遇到了同样的问题。当我查看localhost:50070时,在集群摘要下,除了“DFS已使用%100”之外,所有属性都显示为0。通常,出现这种情况是因为HADOOP_INSTALL/conf和hosts文件下的三个*-site.xml文件中存在一些错误


    在我的例子中,原因是无法解析主机名。我只需将“IP地址主机名”添加到/etc/hosts

    就解决了这个问题。在我的例子中,我错误地为
    dfs.name.dir
    dfs.data.dir
    设置了一个目标。正确的格式是

     <property>
     <name>dfs.name.dir</name>
     <value>/path/to/name</value>
     </property>
    
     <property>
     <name>dfs.data.dir</name>
     <value>/path/to/data</value>
     </property>
    
    
    dfs.name.dir
    /路径/到/名称
    dfs.data.dir
    /路径/到/数据
    
    我删除了hdfs-site.xml中的额外属性,然后这个问题就消失了。Hadoop需要改进错误消息。我尝试了上述每一种解决方案,但都没有奏效。

    在我的情况下,我不得不删除:

    /tmp/hadoop-
    文件夹和格式,并开始使用
    sbin/start dfs.sh


    sbin/start warn.sh

    谢谢,我找到了解决方案。这是因为datanode和namenode需要时间来启动,我没有执行
    bin/start all.sh
    ,而是执行
    bin/hadoop namenode
    bin/hadoop datanode
    ,然后执行
    bin/start mapred.sh
    。你是认真的吗?将“127.0.0.1主机名”添加到/etc/hosts可能会导致连接被拒绝错误。我不知道当时为什么写127.0.0.1。我的/etc/hosts中现在没有这样的条目。我想我是要写“主机名”而犯了一个错误。很抱歉那些被这条评论误导的人。
     <property>
     <name>dfs.name.dir</name>
     <value>/path/to/name</value>
     </property>
    
     <property>
     <name>dfs.data.dir</name>
     <value>/path/to/data</value>
     </property>