Я получаю доступ к HDFS, используя бережливость.
Это ожидаемый (и правильный) контент на HDFS.
[hadoop@hdp-namenode-01 ~]$ hadoop fs -ls / Found 3 items drwxr-xr-x - hadoop supergroup 0 2012-04-26 14:07 /home drwxr-xr-x - hadoop supergroup 0 2012-04-26 14:21 /tmp drwxr-xr-x - hadoop supergroup 0 2012-04-26 14:20 /user
Затем я запускаю HDFSThriftServer.
[hadoop@hdp-namenode-01 ~]$ jps 17290 JobTracker 16980 NameNode 27289 Jps 17190 SecondaryNameNode 17511 RunJar 25270 HadoopThriftServer
Попробуйте получить доступ к контенту через бережливость в PHP.
$transport = new TSocket(HDFS_HOST, HDFS_PORT);
$transport->setRecvTimeout(60000);
$transport->setSendTimeout(60000);
$protocol =new TBinaryProtocol($transport);
$client = new ThriftHadoopFileSystemClient($protocol);
logv("connect hdfs");
$transport->open();
logv("testing existent of `%s'", $remote_uri);
$remote_path = new Pathname(array('pathname' => $remote_uri));
$remote_file = null;
try {
$remote_file = $client->listStatus($remote_path);
} catch(Exception $e) { }
if (!$remote_file)
loge("could not open `%s'", $remote_uri);
В то время как $remote_uri
является абсолютным путем. Для $remote_uri === '/non/existent'
или '/user'
и т. д. listStatus всегда терпит неудачу. Но если я изменю его на '/tmp'
, я обнаружу, что он перечисляет содержимое '/tmp'
локальной файловой системы экономного сервера.
Таким образом, возвращаемый контент представляет собой локальную ФС на сервере сбережений, а не HDFS! Что здесь не так?
HadoopThriftServer
работает в каком-то локальном режиме, при этом файловая система по умолчанию является локальной, а не DFS. Я не знаком с этим продуктом, поэтому не знаю, как вы это исправите. - person Chris White   schedule 26.04.2012