我發現有人說話libhdfs不支持讀/寫gzip文件在2010年左右是否libhdfs C/C++ API支持的讀/寫壓縮文件
我下載了最新的Hadoop-2.0.4和讀取HDFS。 H。也沒有壓縮參數。
現在我想知道它是否支持讀取壓縮文件?
如果不是,我如何爲libhdfs打補丁並使其工作?
在此先感謝。
問候 海地
我發現有人說話libhdfs不支持讀/寫gzip文件在2010年左右是否libhdfs C/C++ API支持的讀/寫壓縮文件
我下載了最新的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壓縮,則可以使用lzo庫對其進行解壓縮。
但是,如果文件是序列文件,那麼您可能需要使用JNI來訪問它們,因爲它們是Hadoop特殊文件。我見過Impala做過類似的工作。但它不是開箱即用的。
感謝您的回覆。使用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;