Я написал следующий код для создания / записи файла в hdfs через php. Использовал следующий 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
Попробуйте telnet к этому 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;
}
Убедитесь, что ваши конфигурации соответствуют значениям по умолчанию, если вы не собираетесь их переопределять.
Удачи.
Других решений пока нет …