一.数据导入HBase中常见方式
数据的来源:
(1)日志
(2)RDBMS
导入的方式:
.使用hbase的api put api(kettle,sqoop)
.使用HBase的API中的Put是最直接的方法,用法也很容易学习。但针对大部分情况,它并非都是最高效的方式。当需要将海量数据在规定时间内载入HBase中时,效率问题体现得尤为明显。待处理的数据量一般都是巨大的,这也许是为何我们选择了HBase而不是其他数据库的原因。在项目开始之前,你就该思考如何将所有能够很好的将数据转移进HBase,否则之后可能面临严重的性能问题。
.使用hbase内置的importtsv或者自定义mr
importtsv是tsv文件直接加载内容到hbase一个内置工具.它运行一个mapReduce job将数据文件直接写到HBase表中,或者写入一个Hbase自带格式数据文件.importtsv将数据直接加载到HBase数据表中.
. bulk load方式快速加载数据量大的数据(非常常用)
Hbase支持bulk load的入库方式,它是利用hbase数据信息按照特定的格式存储在hdfs上,在hdfs上生成持久化的HFile数据格式文件,然后上传到合适的位置.配合mapreduce完成高效便捷,而且不占有region的资源,在大数据写入时能够极大的提高写入的效率,降低了对Hbase节点的写入压力。
1.介绍Hbase自带importtsv工具默认直接加载到Hbase数据库,我们也可先生成Hfile的文件,importtsv源码参考habse-server-0.98.6-hadoop2.jar的org.apache.hadoop.hbase.mapreduce:ImportTsv类
2.通过hbase-importtsv导入数据
准备数据
select *from company
into outfile '/usr/local/datas/company.tsv'
fields terminated by '\t' optionally enclosed by '"'
escaped by '"'
lines terminated by '\r\n'
load data infile '/usr/local/datas/company.tsv'
into table company
fields terminated by '\t' optionally enclosed by '"' escaped by '"'
lines terminated by '\r\n';
创建hbases表
create namespace 'com'
create 'com.company',{NAME=>'info',VERSIONS=>'1'}
运行hbase自带的importtsv-mr任务向hbase导入数据
#设置环境变量hadoop_classpath
export HBASE_HOME=/opt/modules/hbase-0.98-6-hadoop2
export
HADOOP_HOME=/opt/modules/hadoop-2.5.0
export
HADOOP_CLASSPATH=${HBSE_HOME}/bin/hbase mapredcp
##将数据上传至hdfs上
hadoop-2.5.0/bin/hdfs -put /usr/local/datas/company.tsv /user/beifeng/input/company.tsv
##运行hbase自带的importtsv-mr任务向hbase导入数据
hadoop-2.5.0/bin/yarn jar hbase-0.98.6-hadoop2/lib/hbase-server-0.98.6-hadoop2.jar importtsv \
-Dimporttsv-clumns=HBASE_ROW_KEY,\
info:id,info:deptno,info:name,info:company_id,info:status,info:address
com:company \
/user/beifeng/input/company.tsv
#在hbase shell客户端验证是否成功
count 'com:company'
bulk load 方式快速加载大量数据
# step 0 在hdfs /user/beifeng/input/建立目录准备导入数据
hadoop-2.5.O/bin/hdfs dfs -mkdir -p /user/beifeng/input/tsv
#step 1.将数据上传至hdfs目录上
hadoop-2.5.0/bin/hdfs dfs -put /usr/local/datas/company.tsv /user/beifeng/input/tsv
#step 3 设置hbase_classpath的环境变量
export HBASE_HOME=/opt/modules/hbase-0.98-6-hadoop2
export HADOOP_HOME=/opt/modules/hadoop-2.5.0
export
HADOOP_CLASSPATH=${HBASE_HOME}/bin/hbase mapredcp
# 2. 使用importtsv工具生成HFile文件(注意:字段个数需要对应,不然不能生成hfile文件)
$ hadoop-2.5.0/bin/yarn jar hbase-0.98.6-hadoop2/lib/hbase-server-0.98.6-hadoop2.jar importtsv \
-Dimporttsv.columns=HBASE_ROW_KEY,\
info:id,info:city,info:email,info:name,info:num,info:priority,info:state,info:total_num,info:webAddress \
-Dimporttsv.bulk.output=/user/ubuntu/hbase/hfileoutput \
test:company3 \
/user/ubuntu/datas/company3
# 3. 如果使用importtsv工具生成HFile数据文件,还需要使用hbase自带的MR工具completebulkload来将生成的hfile文件移动到hbase regions对应的hdfs路径,以完成hbase数据的加载。
$ hadoop-2.5.0/bin/yarn jar hbase-0.98.6-hadoop2/lib/hbase-server-0.98.6-hadoop2.jar completebulkload \
/user/ubuntu/hbase/hfileoutput \
test:company3
# 4. 在hbase shell客户端验证导入是否成功
count 'test:company'
55480 row(s) in 2.1610 seconds