原创

Mysql表数据导入Hbase

一、问题: 目前数据库一个表数据非常大,达到几千万行,需要导入Hbase进行处理 二、实现思路 2.1用shell导入,基于sqoop sqoop思义sql to hadoop。sqoop特性:支持多种导入方式,包括指定列导入,指定格式导入,支持增量导入(有更新才导入)等等。如下的导入都是指定一个列族,rowkey即为mysql表中的第一列id名称,
./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.
详见sqoop的安装与使用 遇到问题: 对于数据量100来万时可以导入,但是数据量特别大时会程序会挂掉,分析原因是mysql读取瓶颈,控制作业大小(##复制过程使用map作业),也有可能,磁盘空间写满 2.2基于Hbase的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 正在执行
正文到此结束
Loading...