从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吗?