Der HDFS-Thrift-Server gibt den Inhalt des lokalen FS zurück, nicht HDFS

Ich greife mit Sparsamkeit auf HDFS zu.

Dies ist der erwartete (und richtige) Inhalt von 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>

Und dann starte ich einen HDFSThriftServer

<code>[hadoop@hdp-namenode-01 ~]$ jps
17290 JobTracker
16980 NameNode
27289 Jps
17190 SecondaryNameNode
17511 RunJar
25270 HadoopThriftServer
</code>

Versuchen Sie, in PHP durch Sparsamkeit auf Inhalte zuzugreifen.

<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>

Während$remote_uri ist ein absoluter Weg. Zum$remote_uri === '/non/existent' oder'/user'usw. listStatus schlägt immer fehl. Aber wenn ich es ändere'/tmp'Ich finde, dass es den Inhalt von auflistet'/tmp' des lokalen FS des Thrift-Servers.

Der zurückgegebene Inhalt ist also lokaler FS auf dem Thrift-Server anstelle von HDFS! Was ist hier los?

Antworten auf die Frage(0)

Ihre Antwort auf die Frage