2013-06-03 48 views
1

我发现有人说话libhdfs不支持读/写gzip文件在2010年左右是否libhdfs C/C++ API支持的读/写压缩文件

我下载了最新的Hadoop-2.0.4和读取HDFS。 H。也没有压缩参数。

现在我想知道它是否支持读取压缩文件?

如果不是,我如何为libhdfs打补丁并使其工作?

在此先感谢。

问候 海地

回答

0

正如我所知道的,libhdfs只使用JNI访问HDFS。如果您熟悉HDFS Java API,libhdfs只是org.apache.hadoop.fs.FSDataInputStream的包装。所以它现在不能直接读取压缩文件。

我猜你想通过C/C++访问HDFS中的文件。如果是这样,您可以使用libhdfs来读取原始文件,并使用zip/unzip C/C++库来解压缩内容。压缩文件格式相同。例如,如果文件被lzo压缩,则可以使用lzo库对其进行解压缩。

但是,如果文件是序列文件,那么您可能需要使用JNI来访问它们,因为它们是Hadoop特殊文件。我见过Impala做过类似的工作。但它不是开箱即用的。

0

感谢您的回复。使用libhdfs读取原始文件,然后使用zlib来扩充内容。这可以工作。该文件使用gzip。我使用了这些代码。

z_stream gzip_stream; 

gzip_stream.zalloc = (alloc_func)0; 
gzip_stream.zfree = (free_func)0; 
gzip_stream.opaque = (voidpf)0; 

gzip_stream.next_in = buf; 
gzip_stream.avail_in = readlen; 
gzip_stream.next_out = buf1; 
gzip_stream.avail_out = 4096 * 4096; 

ret = inflateInit2(&gzip_stream, 16 + MAX_WBITS); 
if (ret != Z_OK) { 
    printf("deflate init error\n"); 
} 
ret = inflate(&gzip_stream, Z_NO_FLUSH); 
ret = inflateEnd(&gzip_stream); 
printf("the buf \n%s\n", buf1); 

return buf; 
相关问题