hbase导入数据总结:

59 篇文章 0 订阅
8 篇文章 0 订阅
目前有两种方式导入:
1.使用sqoop工具导入。
2.通过写hbase java api导入。

总结:hbase的入库性能还行,查询效率高。
      目前咱们的数据量很难遇到极端场景。

1.使用sqoop 把cpp数据导入hbase
sqoop思义sql to hadoop。sqoop特性:支持多种导入方式,包括指定列导入,指定格式导入,支持增量导入(有更新才导入)等等。
如下的导入都是指定一个列族,rowkey即为mysql表中的第一列id名称,

104 CPP库导入hbase中,每张表的使用时间,和导入条数请看下面的日志:

导入***表
./sqoop import --driver com.mysql.jdbc.Driver --connect "jdbc:mysql://172.10.23.104:3306/cpp" --table ***表 --username root --password root --hbase-table ***表 --column-family document --hbase-row-key MSGID --hbase-create-table --hbase-bulkload -m 8
14/07/31 16:46:46 INFO mapreduce.ImportJobBase: Transferred 6.8395 MB in 83.6469 seconds (83.7284 KB/sec)
14/07/31 16:46:46 INFO mapreduce.ImportJobBase: Retrieved 13648 records.

遇到问题: 对于数据量100来万时可以导入,但是数据量特别大时会程序会挂掉,目前还没有研究出sqoop应对大数据量如何配置参数。如CMSDOCUMENT表,104cpp库有30g左右,所以决定使用第二种方式导入,灵活性高。

2.通过hbase java api导入:
这里简单描述下,建立工程,定义一个配置文件,配置文件描述了mysql的配置信息,以及hbase的配置信息,主要部分是通过多线程,多任务并行导入数据, 根据要导入的范围以及每次导入的条数计算出任务数,然后并行启动n个线程轮训去执行任务,执行完毕后继续下次执行,这样对于咱们之后的任何表的数据导入都没有问题。START_NUM,END_NUM 定义了导入的范围,THREAD_NUM定义了线程个数,IMPORT_NUM定义了每次导入的条数。

配置文件部分:
#HBASE CONFIGURE
HBASE_ZOOKEEPER_QUORUM=XAYQ-Test3,XAYQ-Test4,XAYQ-Test5
HBASE_ZOOKEEPER_PROPERTY_CLIENT_PORT=2181
HBASE_MASTER=XAYQ-Test2:60020
HBASE_ROOTDIR=hdfs://XAYQ-Test2:9000/hbase/
DFS_NAME_DIR=/hadoop/dfs/name
DFS_DATA_DIR=/hadoop/dfs/data
FS_DEFAULT_NAME=hdfs://172.22.14.5:9000
HBASE_TABLE_NAME=CMSDOCUMENT4
HBASE_TABLE_FAMILY=document

#SOLR CONFIGURE
SOLR_SERVER=http://172.22.14.5:8080/solr

#MYSQL CONFIGURE
USERNAME=root
PASSWORD=root
JDBC_URL=jdbc:mysql://172.10.23.104:3306/cpp
JDBC_DRIVER=com.mysql.jdbc.Driver
TABLE_NAME=CMSDOCUMENT

#import data range ; example [0-10000]
START_NUM=0
END_NUM=1000000

#THREAD CLIENT
THREAD_NUM=10

#every time import data number
IMPORT_NUM=5000



运行后打印的日志:
工作队列添加了一个任务,任务号为: 130
工作队列添加了一个任务,任务号为: 197
工作队列添加了一个任务,任务号为: 198
工作队列添加了一个任务,任务号为: 199

线程运行开始:worker 3 ; 任务号:0 正在执行
线程运行开始:worker 2 ; 任务号:2 正在执行
线程运行开始:worker 1 ; 任务号:3 正在执行
线程运行开始:worker 7 ; 任务号:1 正在执行
线程运行开始:worker 6 ; 任务号:5 正在执行
handle is run;SELECT * from CMSDOCUMENT limit 25000,5000
线程运行开始:worker 0 ; 任务号:4 正在执行
handle is run;SELECT * from CMSDOCUMENT limit 5000,5000
handle is run;SELECT * from CMSDOCUMENT limit 15000,5000
handle is run;SELECT * from CMSDOCUMENT limit 10000,5000
线程运行开始:worker 8 ; 任务号:8 正在执行
handle is run;SELECT * from CMSDOCUMENT limit 40000,5000
线程运行开始:worker 5 ; 任务号:7 正在执行
handle is run;SELECT * from CMSDOCUMENT limit 0,5000
线程运行开始:worker 4 ; 任务号:6 正在执行
handle is run;SELECT * from CMSDOCUMENT limit 35000,5000
线程运行开始:worker 9 ; 任务号:9 正在执行
handle is run;SELECT * from CMSDOCUMENT limit 20000,5000
handle is run;SELECT * from CMSDOCUMENT limit 45000,5000
handle is run;SELECT * from CMSDOCUMENT limit 30000,5000

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值