Serwer oszczędzania HDFS zwraca zawartość lokalnego FS, a nie HDFS
Uzyskuję dostęp do HDFS za pomocą oszczędzania.
Jest to oczekiwana (i właściwa) treść na HDFS.
<code>[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 </code>
A potem uruchamiam HDFSThriftServer
<code>[hadoop@hdp-namenode-01 ~]$ jps 17290 JobTracker 16980 NameNode 27289 Jps 17190 SecondaryNameNode 17511 RunJar 25270 HadoopThriftServer </code>
Spróbuj uzyskać dostęp do treści poprzez oszczędność w PHP.
<code> $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); </code>
Podczas$remote_uri
jest ścieżką absolutną. Dla$remote_uri === '/non/existent'
lub'/user'
, itp., status list zawsze zawiedzie. Ale jeśli zmienię to na'/tmp'
, Uważam, że zawiera listę treści'/tmp'
lokalnego FS serwera oszczędnościowego.
Zwracana zawartość to lokalny FS na serwerze oszczędzania zamiast HDFS! Co tu jest nie tak?