前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hadoop2.7.1和Hbase0.98添加LZO压缩

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

作者头像
我是攻城师
发布2018-05-14 14:18:59
1.4K0
发布2018-05-14 14:18:59
举报
文章被收录于专栏:我是攻城师

1,执行命令安装一些依赖组件 yum install -y hadoop-lzo lzo lzo-devel hadoop-lzo-native lzop 2, 下载lzo的源码包并解压 wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.09.tar.gz 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 https://github.com/twitter/hadoop-lzo.git 进入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中会抛出了如下异常:

Java代码

代码语言:javascript
复制
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)  

经过查资料,发现说的都是hbase的客户端租约超时,或者是linux的句柄数太少,等等,经过验证,发现跟这些处理方法没关系,删除了一个snappy压缩的表,继续测试,这下能正常运行了, 至于具体的原理,还没搞清楚,可能与hbase的hfile的底层存储有关系,一个region下面不能同时存储在两种压缩数据结构,这个坑得记住。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是攻城师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档