用于压缩和解压缩 bzip2 中的 hdfs 数据的 Pig 脚本
Posted
技术标签:
【中文标题】用于压缩和解压缩 bzip2 中的 hdfs 数据的 Pig 脚本【英文标题】:Pig script to compress and decompress the hdfs data in bzip2 【发布时间】:2016-06-11 14:15:33 【问题描述】:如何使用 pig 将 hdfs 数据压缩到 bzip2,以便在解压缩时它应该提供与最初相同的 dir 结构。我是 pig 的新手。
我尝试使用 bzip2 进行压缩,但由于生成了许多映射器,它生成了许多文件,因此在相同的 dir 结构中恢复为纯文本文件(初始形式)变得很困难。
就像在 unix 中一样,如果我们使用 tarball 压缩 bzip2,然后在解压缩 bzip2.tar 后,会得到与最初完全相同的数据和文件夹结构。
例如压缩:- tar -cjf compress_folder.tar.bz2 compress_folder/
解压:- tar -jtvf compress_folder.tar.bz2
将给出完全相同的目录。
【问题讨论】:
【参考方案1】:方法一:
您可以尝试运行一个 reducer 以在 hdfs
上仅存储 1 个文件。但妥协将是这里的表现。
set default_parallel 1;
要压缩数据,请在 pig 脚本中设置这些参数,如果没有尝试这种方式:-
set output.compression.enabled true;
SET mapred.output.compression.codec 'org.apache.hadoop.io.compress.BZip2Codec';
只需在存储文件时使用JsonStorage
STORE file INTO '/user/hduser/data/usercount' USING JsonStorage();
最终你也想读取数据,使用 TextLoader
data = LOAD '/user/hduser/data/usercount/' USING TextLoader;
方法2:
filecrush: file merge utility available at @Mr. github
【讨论】:
以上是关于用于压缩和解压缩 bzip2 中的 hdfs 数据的 Pig 脚本的主要内容,如果未能解决你的问题,请参考以下文章