如何在hadoopmapreduce中进行lzo压缩?

zujrkrfu  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(320)

我想用lzo压缩Map输出,但我不能运行它!我使用的hadoop版本是 0.20.2 . 我设置:

conf.set("mapred.compress.map.output", "true") 
conf.set("mapred.map.output.compression.codec",
"org.apache.hadoop.io.compress.LzoCodec");

当我在hadoop中运行jar文件时,它显示了一个无法写入Map输出的异常。
我必须安装lzo吗?我要怎么用lzo?

7fyelxc5

7fyelxc51#

lzo的许可证(gpl)与hadoop(apache)的许可证不兼容,因此不能与之捆绑。需要在集群上单独安装lzo。
以下步骤在cloudera的demo vm(centos 6.2,x64)上进行了测试,该vm安装了cdh4.2.0和cm-free版的完整堆栈,但它们应该可以在任何基于red-hat的linux上运行。
安装包括以下步骤:
安装lzo
sudo yum install lzop sudo yum install lzo-devel 安装ant sudo yum install ant ant-nodeps ant-junit java-devel 下载源代码 git clone https://github.com/twitter/hadoop-lzo.git 编译hadoop lzo ant compile-native tar 有关更多说明和故障排除,请参阅https://github.com/twitter/hadoop-lzo
将hapoop lzo jar复制到hadoop libs sudo cp build/hadoop-lzo*.jar /usr/lib/hadoop/lib/ 将本机代码移动到hadoop本机libs
sudo mv build/hadoop-lzo-0.4.17-SNAPSHOT/lib/native/Linux-amd64-64/ /usr/lib/hadoop/lib/native/ cp /usr/lib/hadoop/lib/native/Linux-amd64-64/libgplcompression.* /usr/lib/hadoop/lib/native/ 使用克隆的版本更正版本号
当使用真正的集群(而不是伪集群)时,您需要将这些集群重新同步到其余的机器上 rsync /usr/lib/hadoop/lib/ 向所有主机发送。
你可以先用-n来干这个
登录cloudera manager
从服务中选择:mapreduce1->配置
客户端->压缩
添加到压缩编解码器:
com.hadoop.compression.lzo.LzoCodec com.hadoop.compression.lzo.LzopCodec 搜索“阀”
添加到mapreduce服务配置安全阀
io.compression.codec.lzo.class=com.hadoop.compression.lzo.LzoCodec mapred.child.env="JAVA_LIBRARY_PATH=/usr/lib/hadoop/lib/native/Linux-amd64-64/" 添加到mapreduce服务环境安全阀 HADOOP_CLASSPATH=/usr/lib/hadoop/lib/* 就这样。
你的婚姻工作 TextInputFormat 应该与 .lzo 文件夹。但是,如果您选择索引lzo文件以使其可拆分(使用 com.hadoop.compression.lzo.DistributedLzoIndexer ),您将发现索引器写入 .index 每个旁边的文件 .lzo 文件。这是一个问题,因为你的 TextInputFormat 将这些解释为输入的一部分。在这种情况下,你需要改变你的先生的工作与工作 LzoTextInputFormat .
对于hive,只要不索引lzo文件,更改也是透明的。如果开始索引(利用更好的数据分发),则需要将输入格式更新为 LzoTextInputFormat . 如果使用分区,则可以按分区进行。

相关问题