用hadoop0.20版本做hbase的bulk load测试,发现importtsv的过程出现些问题,关于importtsv网上有很多资料,这里不待言表。
先大概表述出现的问题,
当使用两步的方式导入数据时,
第一步,生成hfile
hadoop jar hbase-version.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,c1,c2 -Dimporttsv.bulk.output=tmp hbase_table hdfs_file
这一步提醒两个地方,c1,c2列是需要指明列族和列名,例如:cf:1,cf:2,
-Dimporttsv.bulk.output=tmp, tmp生成后会在hdfs的/user/hadoop/tmp中
第二步,导入hbase表,这一步其实是mv的过程,即利用生成好的hfile移到hbase中
hadoop jar hbase-version.jar completebulkload /user/hadoop/tmp/cf hbase_table
这样数据是可以正常进入hbase的
当不需要生成临时文件,直接bulk load时,
hadoop jar hbase-version.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,c1,c2 hbase_table hdfs_file
值得注意的是,经过测试,在数据量较大时,两步处理方式比一步导入方式有效率和稳定性上的优势:
1. 两步导入时,由于是先生成文件,再复制文件进入HBase表,对于HBase读取的性能影响较小,不会出现较大的读取时间波动;
2. 两步导入时,时间上要节约三分之二,等于效率提高60%~70%,map的处理时间较短,只有一个reduce, 一步导入时,map处理时间较长,没有reduce. 由于hadoop集群在配置时,一般会有较多的最大map数设置,较少的最大reduce数设置,那么这种两步导入方式也在一定程度上提升了hadoop集群并发能力。
这时候开始报错,大概意思就是有一个ganglia31文件找不到,查了下资料,需要升级patch,需要1个hdfs patch和4个mapreduce patch,想着这样升级太麻烦,直接用了0.20的CDH2,想着这样就好了。
升级CDH2,升级过程不详细说明,基本跟安装过程一样。升级完成后,帮同事顺便解决一个问题,他想升级ganglia服务,正好少了ganglia31,但是发现importtsv还是有问题。具体如下,
升级完成后,没有ganglia31的问题了,但是出现Compression codec com.hadoop.compression.lzo.LzopCodec not found.
上网搜了搜,原来是缺少了lzo相应的包和native文件,因为lzo是GPL协议的,hbase不能自带lzo(见我一个同事文章hbase官方文档)
开始安装lzo,折腾了两天
因为hadoop是cloudera版的,所以lzo编码/解码器就不是用google官方的,注意这一点。
下载,网上搜索提供的那个地址url: wget https://download.github.com/kevinweil-hadoop-lzo-2ad6654.tar.gz 并不能下载到所需要的tar.gz包
无意中找到这个地址url https://github.com/kevinweil/hadoop-lzo/downloads,能下载到tar.gz文件。值得注意的是wget没法用,只能用浏览器打开下载到本地后,再上传到服务器。
文件名是kevinweil-hadoop-lzo-6bb1b7f.tar.gz,跟之前比后缀变了,如果tx们还是找不到tar.gz文件,可以发信给我,我发给你们。
解包编译一样,甚至更加简单了,分析原因,估计新版本直接包含了之前版本没有依赖包
tar -zxvf kevinweil-hadoop-lzo-6bb1b7f.tar.gz
cd kevinweil-hadoop-lzo-6bb1b7f
ant compile-native tar
编译成功
没有之前所需要的还要下载两个依赖包
wget http://packages.sw.be/lzo/lzo-devel-2.04-1.el5.rf.i386.rpm
wget http://packages.sw.be/lzo/lzo-2.04-1.el5.rf.i386.rpm
rpm -ivh lzo-2.04-1.el5.rf.i386.rpm
rpm -ivh lzo-devel-2.04-1.el5.rf.i386.rpm
编译成功后,将编码/解码器jar包以及native库拷贝到$HADOOP_HOME/lib下的相应位置
cp build/hadoop-lzo-0.4.15.jar $HADOOP_HOME/lib/
tar -cBf - -C build/native . | tar -xBvf - -C $HADOOP_HOME/lib/native
将hadoop-lzo-0.4.15.jar及native本地库的目录拷贝同步到各节点,hbase目录下是不需要拷贝的。
配置文件
core-site.xml
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCo
dec</value>
<description>A list of the compression codec classes that can be used for compression/decompression.</description>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
mapred-site.xml
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
<property>
<name>mapred.map.output.compression.codec</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
<property>
<name>mapred.child.env</name>
<value>JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native/Linux-amd64-64</value>
</property>
hadoop-env.sh
在HADOOP_CLASSPATH中加上hadoop-lzo-0.4.15.jar
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:${HADOOP_HOME}/lib/hadoop-lzo-0.4.15.jar
注意,还可能有问题,
重新运行importtsv,还是有问题,但错误不一样了,看来之前的安装lzo起了作用,但是还有问题。
ERROR lzo.GPLNativeCodeLoader: Could not load native gpl library
java.lang.UnsatisfiedLinkError: no gplcompression in java.library.path
ERROR lzo.LzoCodec: Cannot load native-lzo without native-hadoop
看样子是本地库安装有问题
经过检查发现lib/native/Linux-amd64-64目录下只有libgplcompression.la,而不见so文件,
将lib/native/Linux-amd64-64/lib目录中所有5个文件拷贝到lib/native/Linux-amd64-64目录
重新运行importtsv,直接导入hbase 表,问题解决,时间比两步走的时间缩短30%.
分享到:
相关推荐
tsv格式的数据库测试文件,hbase可以通过采用importtsv导入外部数据到hbase中
该工具是HBase提供的一个将HDFS数据转化为HBase数据库数据的一个工具。 其实现过程是,先将HDFS文件转复制并转化为HFile文件,然后将HFile移动并加载成为HBase的数据文件。
HBase常见热点问题及几种解决方案.docx
hbase安装lzo压缩包的编译文件master
使用spark读取hbase中的数据,并插入到mysql中
基于Django LayUI HBase的文献数据挖掘系统.zip
java操作Hbase之从Hbase中读取数据写入hdfs中源码,附带全部所需jar包,欢迎下载学习。
介绍HBase2.x之RIT问题解决
Python基于Django LayUI HBase的文献数据挖掘系统Python基于Django LayUI HBase的文献数据挖掘系统Python基于Django LayUI HBase的文献数据挖掘系统Python基于Django LayUI HBase的文献数据挖掘系统Python基于Django...
基于spark和hbase的电影数据可视化及推荐系统源码(课程设计).zip基于spark和hbase的电影数据可视化及推荐系统源码(课程设计).zip基于spark和hbase的电影数据可视化及推荐系统源码(课程设计).zip基于spark和hbase的...
hbase备份和数据恢复,hbase与hive的互导,hbase和hdfs互导。
hbase海量数据的全量导入方法,大数据导入。
基于hadoop的,java实现hive快速导数据到Hbase解决方案。
本文当是一个基于HBase的海量数据的实实时查询系统的原理分析。详细的介绍了大数据查询的原理。
介绍hbase和hadoop数据块损坏如何处理
3,结合工作实践及分析应用,培养解决实际问题的能力。 4,企业级方案设计,完全匹配工作场景。 适用人群 1、对大数据感兴趣的在校生及应届毕业生。 2、对目前职业有进一步提升要求,希望从事大数据行业高薪工作的...
Hbase笔记 —— 利用JavaAPI的方式操作Hbase数据库(往hbase的表中批量插入数据)
springboot搭建的hbase可视化界面 支持hbase的建表与删除 支持根据rowkey查询数据
该工具是HBase提供的一个将HDFS数据转化为HBase数据库数据的一个工具。 其实现过程是,先将HDFS文件转复制并转化为HFile文件,然后将HFile移动并加载成为HBase的数据文件。
HBASERegion数量增多问题描述及解决方案.docx