2016-03-07 75 views
0

我已經寫了下面的代碼創建/寫入文件到hdfs通過PHP。用下面的API參考https://github.com/Yujiro3/WebHDFS錯誤:無法找到datanode建議檢查羣集健康

但代碼提供了以下錯誤而無法上傳文件中所需的目錄:

{"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"); 
?> 

什麼修正應我做?

回答

0

看來你的hdfs datanode是無法訪問,並且與你的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; 
} 

確保您的配置與默認值一致,除非您要覆蓋它們。 祝你好運。