Hadoop2.7.1和Hbase0.98添加LZO压缩

29 篇文章 0 订阅
[size=medium]
1,执行命令安装一些依赖组件
yum install -y hadoop-lzo lzo lzo-devel hadoop-lzo-native lzop
2, 下载lzo的源码包并解压

wget [url]http://www.oberhumer.com/opensource/lzo/download/lzo-2.09.tar.gz[/url]
tar -zxvf lzo-2.09.tar.gz

3,在当前目录新建一个lzo目录,存储编译后的lzo文件
进入lzo-2.09目录
依次执行命令:
export CFLAGS=-64m
./configure --enable-shared --prefix=/home/search/lzo
make && make install

4,下载twitter的hadoop-lzo源码进行编译:

git clone [url]https://github.com/twitter/hadoop-lzo.git[/url]

进入hadoop-lzo目录,修改pom中hadoop的版本为2.7.1
然后依次执行如下命令,配置环境变量:
export CFLAGS=-64m
export CXXFLAGS=-64m
export C_INCLUDE_PATH=/home/search/lzo/include
export LIBRARY_PATH=/home/search/lzo/lib
然后执行mvn clean test构建
mvn clean test
确认success后,即可执行:
mvn clean package -Dmaven.test.skip=true
进行打包构建,构建成功后,

拷贝编译文件 cp -a hadoop-lzo/target/native/Linux-amd64-64/lib/* 到hadoop/lib/native/ 和 hbase/lib/ 下面

拷贝lzo的jar包cp -a hadoop-lzo/target/hadoop-lzo-0.4.20-SNAPSHOT.jar 到hadoop/share/hadoop/common/lib下面和hbase/lib下面

//测试hbase是否支持snappy
hbase org.apache.hadoop.hbase.util.CompressionTest /user/webmaster/word/in/tt2 snappy
//测试hbase是否支持lzo
hbase org.apache.hadoop.hbase.util.CompressionTest /user/webmaster/word/in/tt2 lzo

//压缩lzop,解压缩lzop -d
//执行一个MR任务,给lzo相关数据,建索引,
bin/hadoop jar share/hadoop/common/lib/hadoop-lzo-0.4.20-SNAPSHOT.jar com.hadoop.compression.lzo.DistributedLzoIndexer /user/webmaster/rand

//执行一个单机任务,给lzo相关数据,建索引
bin/hadoop jar share/hadoop/common/lib/hadoop-lzo-0.4.20-SNAPSHOT.jar
com.hadoop.compression.lzo.LzoIndexer /user/webmaster/rand

经过测试同样的数据:

不设置任何压缩的hbase表,所占存储空间最大
经过snappy压缩的表,存储空间明显变小
经过lzo压缩的表,存储空间最小

遇到的问题:

一个hbase中,如果同时有两种压缩表,一个是lzo压缩的表,一个是snappy压缩的表,那么在使用java client去scan数据时,可能会有regionserver会挂掉,经过查看log,发现hbase中并无明显异常,但是同节点的hadoop的datanode的log中会抛出了如下异常:

[/size]


java.io.IOException: Premature EOF from inputStream
at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:201)
at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)
at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)
at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)
at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:472)
at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:849)
at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:804)
at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:137)
at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:74)
at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:251)
at java.lang.Thread.run(Thread.java:745)

[size=medium]
经过查资料,发现说的都是hbase的客户端租约超时,或者是linux的句柄数太少,等等,经过验证,发现跟这些处理方法没关系,删除了一个snappy压缩的表,继续测试,这下能正常运行了, 至于具体的原理,还没搞清楚,可能与hbase的hfile的底层存储有关系,一个region下面不能同时存储在两种压缩数据结构,这个坑得记住。
[/size]
[b][color=green][size=large]
最后欢迎大家扫码关注微信公众号:我是攻城师(woshigcs),我们一起学习,进步和交流!(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!
[/size][/color][/b]
[img]http://dl2.iteye.com/upload/attachment/0104/9948/3214000f-5633-3c17-a3d7-83ebda9aebff.jpg[/img]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值