【HBase-Mysql】Mysql数据迁移至HBase

1)准备工作

如果使用Sqoop方式导入需要修改sqoop-env.sh中的相关配置

1.1.修改sqoop-env.sh中的配置文件

cd /export/servers/sqoop-1.4.6-cdh5.14.0/conf
vim sqoop-env.sh

#需要修改的内容
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0

#set the path to where bin/hbase is available
export HBASE_HOME=/export/servers/hbase-1.2.0-cdh5.14.0

#Set the path to where bin/hive is available
export HIVE_HOME=/export/servers/hive-1.1.0-cdh5.14.0

1.2.在MySQL中添加测试数据

#创建表
 CREATE DATABASE  IF NOT EXISTS library;
USE library;
CREATE TABLE book(
    id INT(4) PRIMARY KEY NOT NULL AUTO_INCREMENT, 
    NAME VARCHAR(255) NOT NULL, 
    price VARCHAR(255) NOT NULL
);
#插入数据
INSERT INTO book (NAME, price) VALUES('Lie Sporting', '30');  
INSERT INTO book (NAME, price) VALUES('Pride & Prejudice', '70');  
INSERT INTO book (NAME, price) VALUES('Fall of Giants', '50'); 

2)MySQL数据导入到hbase中

2.1.方式一

2.1.1.使用sqoop直接进行导入

#根据Mysql表结构在HBase中创建表
bin/sqoop import \
--connect jdbc:mysql://10.70.71.52:3306/library \
--username root \
--password 123456 \
--table book \
--columns "id,name,price" \
--column-family "info" \ #HBase列簇
--hbase-create-table \
--hbase-row-key "id" \
--hbase-table "hbase_book" \ #HBase表名
--num-mappers 1  \
--split-by id
#导入数据到HBase
sqoop import \
-D sqoop.hbase.add.row.key=true \
--connect jdbc:mysql://10.70.71.52:3306/library \
--username root \
--password 123456 \
--table book \
--hbase-create-table \
--hbase-table books \
--column-family info \
--hbase-row-key id

注意

此时如果失败了,提示NotFoundClass HBaseClient之类的错误,应该就是版本不兼容的问题,那么此时就可以使用另一种方式了,耐心向下看。

2.2.方式二

2.2.1.先将数据导入到hive中,然后通过importtsv进行导入

2.2.1.1.put方式导入

注意

下面的脚本中,有使用put的方式进行导数据到hbase中的方式,还有bulkload的方式,注意区分。

(1)在hive中根据MySQL的表结构创建表

sqoop create-hive-table \
--connect jdbc:mysql://5gcsp-bigdata-svr1:3306/library \
--table book \
--username root \
--password 123456 \
--hive-table sqooptohive.book

(2)先将数据导入到hive中

sqoop import \
--connect jdbc:mysql://5gcsp-bigdata-svr1:3306/library \
--username root \
--password 123456 \
--table book \
--hive-table sqooptohive.book \
--hive-import \
-m1

(3)使用put的方式直接导数据到hbase中

#进入HBase控制台
hbase shell
#创建对应表
create 'book','info'
#执行put方式写入到HBase中
HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.4
HBASE_HOME=/export/servers/hbase-1.6.0
HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`:${HBASE_HOME}/conf
${HADOOP_HOME}/bin/yarn jar ${HBASE_HOME}/lib/hbase-server-1.6.0.jar \
importtsv \
-Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:price \
book \
/user/hive/warehouse/sqooptohive.db/book
2.2.1.2.bulkload方式导入

使用bulkload方式,先在指定目录中生成HFile文件,然后将HFile文件移动到HBase相关目录下。

注意:

-Dimporttsv.bulk.output,这个路径不能存在,否则会报错。

(1)生成HFile文件

HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.4
HBASE_HOME=/export/servers/hbase-1.6.0
HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`:${HBASE_HOME}/conf
${HADOOP_HOME}/bin/yarn jar ${HBASE_HOME}/lib/hbase-server-1.6.0.jar \
importtsv \
-Dimporttsv.bulk.output=hdfs://5gcsp-bigdata-svr1:8020/datas/output_hfile/tbl_logs \
-Dimporttsv.columns=HBASE_ROW_KEY,info:id,info:name,info:price \
book \
/user/hive/warehouse/sqooptohive.db/book

(2)将HFILE文件加载到HBase表中

HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`:${HBASE_HOME}/conf
${HADOOP_HOME}/bin/yarn jar ${HBASE_HOME}/lib/hbase-server-1.6.0.jar \
completebulkload \
hdfs://5gcsp-bigdata-svr1:8020/datas/output_hfile/tbl_logs \
book

注意:

如果此时命令执行成功,但是通过hbase shell查看对应的表中的数据的时发现表中并没有数据,那么可能是因为MySQL的数据同步到Hive的时候,Hive的分割符号不是\t,而是默认的分隔符导致的。

此时小伙伴们可能会提出疑问了,直接先在Hive中建表,指定好分隔符为\t,然后用sqoop导入不就行了吗?确实可以这样,但是可能会出现版本不兼容问题。

如果版本无冲突的情况下大家可以这样操作,如果版本有冲突那么可以参考下面办法

2.2.2.将Mysql数据导入HDFS中,使用HBase的importtsv直接导入数据

可以通过sqoop直接将数据导入到HDFS中,并指定分隔符为\t,然后再利用HBase中的importtsv进行导入数据到HBase

(1)将MySQL中的数据导入到HDFS中,并用指定分割符号\t分割

sqoop import \
--connect jdbc:mysql://5gcsp-bigdata-svr1:3306/test \
--username root \
--password 123456 \
--delete-target-dir \
--table emp \
--target-dir /test/input \
--m 1 \
--fields-terminated-by '\t'

(2)利用HBase中的importtsv将HDFS中的数据导入到HBase中

  • 使用put的方式进行导数据到hbase中
hbase shell
create 'book','info'

HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.4
HBASE_HOME=/export/servers/hbase-1.6.0
HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`:${HBASE_HOME}/conf
${HADOOP_HOME}/bin/yarn jar ${HBASE_HOME}/lib/hbase-server-1.6.0.jar \
importtsv \
-Dimporttsv.columns=HBASE_ROW_KEY,info:id,info:NAME,info:price \
book \
/test/input/book.tsv
  • 或者使用bulkload方式,先在指定目录中生成HFile文件

    注意-Dimporttsv.bulk.output,这个路径不能存在。

HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.4
HBASE_HOME=/export/servers/hbase-1.6.0
HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`:${HBASE_HOME}/conf
${HADOOP_HOME}/bin/yarn jar ${HBASE_HOME}/lib/hbase-server-1.6.0.jar \
importtsv \
-Dimporttsv.bulk.output=hdfs://5gcsp-bigdata-svr1:8020/datas/output_hfile/tbl_logs \
-Dimporttsv.columns=HBASE_ROW_KEY,info:id,info:name,info:price \
book \
/test/input/book.tsv

#将HFILE文件加载到HBase表中
HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`:${HBASE_HOME}/conf
${HADOOP_HOME}/bin/yarn jar ${HBASE_HOME}/lib/hbase-server-1.6.0.jar \
completebulkload \
hdfs://5gcsp-bigdata-svr1:8020/datas/output_hfile/tbl_logs \
book

最后用hbase shell查看hbase中的表,发现数据成功导入,搞定。

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
hbase-client-project-2.4.16.jar是一个用于连接HBase数据库的Java客户端项目。HBase是一个分布式、面向列的NoSQL数据库,它可以存储大规模数据,并提供高可靠性和高性能的数据访问。而hbase-client-project-2.4.16.jar则是用来连接HBase数据库的Java客户端库。通过这个库,开发人员可以在Java应用方便地访问HBase数据库,进行数据的读取、写入和管理操作。 hbase-client-project-2.4.16.jar库提供了丰富的API,使得开发人员可以编写简洁、高效的代码来操作HBase数据库。通过这个库,可以轻松地建立与HBase集群的连接,创建、删除表格,进行数据的增删改查等操作。此外,hbase-client-project-2.4.16.jar也提供了一些高级特性,比如支持过滤器、批量操作、数据版本控制等功能,让开发人员能够更加灵活地利用HBase数据库进行数据处理。 除此之外,hbase-client-project-2.4.16.jar还支持与HBase的安全认证和权限控制,可以保障数据访问的安全性。开发人员可以使用这个库来编写安全的Java应用,确保对HBase数据库的数据进行合法、受控的访问。 总之,hbase-client-project-2.4.16.jar是一个强大、灵活的Java客户端库,为开发人员提供了便捷的方式来连接、操作HBase数据库。无论是小规模的应用还是大规模的数据处理需求,它都能够满足开发人员的要求,帮助他们更有效地利用HBase数据库。 (字数: 258)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值