4

从 hdfs 的 thrift IDL 中,我看到以下也是唯一要编写的定义(版本:Hadoop-0.20):

// write a string to the open handle for the file
bool write(1:ThriftHandle handle, string data) throws (1:ThriftIOException ouch),

数据是字符串类型,在尝试写入任何压缩文件时都不起作用。但无论如何,我继续尝试使用上面的 API 来编写我的tar.gz文件:

    pathName = ttypes.Pathname(os.path.join("/tmp", "data.tar.gz"))
    fd = open("data.tar.gz", "rb")
    thirftHandle = self.__client.create(pathName)
    b = fd.read(1)
    while b:
        self.__client.write(thirftHandle, b)
        b = fd.read(1)

    self.__client.close(thirftHandle)

该脚本运行良好,该文件是在 HDFS 中创建的,但是当我尝试使用以下命令检索它时:

hadoop dfs -get /tmp/data.tar.gz .

尝试解压缩时,它已按预期损坏。

有没有办法通过thrift将二进制数据写入hdfs?

4

0 回答 0