Сервер бережливости HDFS возвращает содержимое локальной ФС, а не HDFS

Я получаю доступ к 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. Затем я запускаю HDFSThriftServer.

    [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);

В то время как $remote_uri является абсолютным путем. Для $remote_uri === '/non/existent' или '/user' и т. д. listStatus всегда терпит неудачу. Но если я изменю его на '/tmp', я обнаружу, что он перечисляет содержимое '/tmp' локальной файловой системы экономного сервера.

Таким образом, возвращаемый контент представляет собой локальную ФС на сервере сбережений, а не HDFS! Что здесь не так?


person tewilove    schedule 26.04.2012    source источник
comment
Я предполагаю, что HadoopThriftServer работает в каком-то локальном режиме, при этом файловая система по умолчанию является локальной, а не DFS. Я не знаком с этим продуктом, поэтому не знаю, как вы это исправите.   -  person Chris White    schedule 26.04.2012
comment
Нет возможности настроить резервный сервер HDFS, кроме порта, который он прослушивает.   -  person tewilove    schedule 27.04.2012
comment
Покопайтесь некоторое время в HadoopThriftServer и обнаружите, что объект FileSystem создается с пустым объектом Configuration, тогда fs.default.name по умолчанию имеет значение file:///, а не настроенную HDFS.   -  person tewilove    schedule 27.04.2012
comment
Хорошо, наконец я добавляю ${HADOOP_HOME}/conf в путь к классам, и проблема решена.   -  person tewilove    schedule 27.04.2012