HBASE迁移数据几种方式

来源:互联网 发布:网络安全工程师 前景 编辑:程序博客网 时间:2024/06/05 04:43

一.数据导入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_classpathexport HBASE_HOME=/opt/modules/hbase-0.98-6-hadoop2export HADOOP_HOME=/opt/modules/hadoop-2.5.0export 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:addresscom: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-hadoop2export HADOOP_HOME=/opt/modules/hadoop-2.5.0export 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
原创粉丝点击