O servidor thrift do HDFS retorna o conteúdo do FS local, não do HDFS
Estou acessando o HDFS usando o thrift.
Este é o conteúdo esperado (e correto) no 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
E então eu inicio um HDFSThriftServer
[hadoop@hdp-namenode-01 ~]$ jps
17290 JobTracker
16980 NameNode
27289 Jps
17190 SecondaryNameNode
17511 RunJar
25270 HadoopThriftServer
Tente acessar o conteúdo através do thrift no 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);
Enquanto$remote_uri
é um caminho absoluto. Para$remote_uri === '/non/existent'
ou'/user'
, etc., listStatus sempre falha. Mas se eu mudar para'/tmp'
, Acho que lista o conteúdo de'/tmp'
do FS local do servidor de thrift.
Assim, o conteúdo retornado é FS local no servidor thrift em vez de HDFS! O que há de errado aqui?