错误:找不到数据节点建议检查群集运行状况


Error:Failed to find datanode suggest to check cluster health

我编写了以下代码,用于通过php创建/写入文件到hdfs。使用以下 API 作为参考 https://github.com/Yujiro3/WebHDFS

但是代码给出以下错误,并且无法在所需目录中上传文件:

{"RemoteException":{"exception":"IOException","javaClassName":"java.io.IOException","message":"Failed to find datanode, suggest to check cluster health."}
HTTP/1.1 403 Forbidden
Cache-Control: no-cache
Expires: Mon, 07 Mar 2016 21:28:39 GMT
Date: Mon, 07 Mar 2016 21:28:39 GMT
Pragma: no-cache
Expires: Mon, 07 Mar 2016 21:28:39 GMT
Date: Mon, 07 Mar 2016 21:28:39 GMT
Pragma: no-cache
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(6.1.26)

这是我的代码:

<?php
require 'WebHDFS.php';
$hdfs = new WebHDFS ();
$hdfs -> put('/user/webuser/sample.txt', "sample ' n test ' n");
?>

我应该进行哪些更正?

似乎你的hdfs数据节点是无法访问的,与你的php无关。

从控制台尝试创建一个没有 PHP 的文件夹,如下所示:

hdfs dfs -mkdir hdfs:///demofolder

我猜这会失败,因为数据节点已关闭。

检查您的 hdfs-site.xml 文件以查看 dfs.datanode.data.dir 指向的位置,并确保该位置存在。然后在同一文件中查找 dfs.datanode.address。我的是 0.0.0.0:50010

尝试远程登录到该 IP 端口:

telnet 0.0.0.0 50010

您应该能够连接。如果不能,则需要启动数据节点。我能够通过运行来做到这一点:

/usr/hdp/2.1.2/hadoop-hdfs/bin/hdfs datanode

您的"hdfs"的位置可能与我的不同。假设您已经启动了尝试再次创建文件夹。如果这有效,请再次尝试您的 php。

我注意到的最后一件事是在WebHDFS中.php它具有hdfs的主机和端口的默认值。

public function __construct($host='localhost', $port='50070') {
    $this->_host = $host;
    $this->_port = $port;
}

确保您的配置与默认值一致,除非您要覆盖它们。祝你好运。