Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
libhdfs是否为c/c++;api支持读/写压缩文件_Api_Hadoop_Hdfs - Fatal编程技术网

libhdfs是否为c/c++;api支持读/写压缩文件

libhdfs是否为c/c++;api支持读/写压缩文件,api,hadoop,hdfs,Api,Hadoop,Hdfs,我发现有人在2010年左右谈论libhdfs不支持读/写gzip文件 我下载了最新的hadoop-2.0.4并阅读了hdfs.h。也没有压缩参数 现在我想知道它现在是否支持读取压缩文件 如果没有,我如何为libhdfs制作补丁并使其工作 提前谢谢 致意 海地正如我所知,libhdfs仅使用JNI访问HDFS。如果您熟悉HDFS Java API,libhdfs只是org.apache.hadoop.fs.FSDataInputStream的包装器。所以它现在不能直接读取压缩文件 我猜您希望通过C

我发现有人在2010年左右谈论libhdfs不支持读/写gzip文件

我下载了最新的hadoop-2.0.4并阅读了hdfs.h。也没有压缩参数

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

如果没有,我如何为libhdfs制作补丁并使其工作

提前谢谢

致意
海地

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

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


但是如果文件是序列文件,那么您可能需要使用JNI来访问它们,因为它们是Hadoop特殊文件。我以前看过类似的工作。但是它不是现成的。

谢谢你的回复。使用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;