1

倹約を使用して HDFS にアクセスしています。

  1. これは、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
    
  2. そして、HDFShriftServer を起動します

    [hadoop@hdp-namenode-01 ~]$ jps
    17290 JobTracker
    16980 NameNode
    27289 Jps
    17190 SecondaryNameNode
    17511 RunJar
    25270 HadoopThriftServer
    
  3. 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);

While$remote_uriは絶対パスです。$remote_uri === '/non/existent'またはなどの場合'/user'、listStatus は常に失敗します。しかし、それを に変更すると、thrift サーバーのローカル FS の'/tmp'内容がリストされていることがわかります。'/tmp'

したがって、返されるコンテンツは、HDFS ではなく、thrift サーバー上のローカル FS です! ここで何が問題なのですか?

4

0 に答える 0