我想用lzo压缩Map输出,但我不能运行它!我使用的hadoop版本是 0.20.2 . 我设置:
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?
7fyelxc51#
lzo的许可证(gpl)与hadoop(apache)的许可证不兼容,因此不能与之捆绑。需要在集群上单独安装lzo。以下步骤在cloudera的demo vm(centos 6.2,x64)上进行了测试,该vm安装了cdh4.2.0和cm-free版的完整堆栈,但它们应该可以在任何基于red-hat的linux上运行。安装包括以下步骤:安装lzosudo 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本机libssudo 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 . 如果使用分区,则可以按分区进行。
sudo yum install lzo-devel
sudo yum install ant ant-nodeps ant-junit java-devel
git clone https://github.com/twitter/hadoop-lzo.git
ant compile-native tar
sudo cp build/hadoop-lzo*.jar /usr/lib/hadoop/lib/
cp /usr/lib/hadoop/lib/native/Linux-amd64-64/libgplcompression.* /usr/lib/hadoop/lib/native/
rsync /usr/lib/hadoop/lib/
com.hadoop.compression.lzo.LzopCodec
mapred.child.env="JAVA_LIBRARY_PATH=/usr/lib/hadoop/lib/native/Linux-amd64-64/"
HADOOP_CLASSPATH=/usr/lib/hadoop/lib/*
TextInputFormat
.lzo
com.hadoop.compression.lzo.DistributedLzoIndexer
.index
LzoTextInputFormat
1条答案
按热度按时间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
安装antsudo yum install ant ant-nodeps ant-junit java-devel
下载源代码git clone https://github.com/twitter/hadoop-lzo.git
编译hadoop lzoant 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本机libssudo 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
. 如果使用分区,则可以按分区进行。