使用StreamSets将MySQL中变化的数据实时的导入到HBase中

       在之前的博客中,小编介绍了如何在CDH中安装StreamSets,文章链接为:《CDH6.3.1中安装StreamSets3.16.0》。透过这个文章名称也能够看出来小编使用的CDH版本以及安装的StreamSets的版本了,这里就不多说了,本文主要介绍如何使用StreamSets实时的将MySQL中的数据导入到HBase中,主要从以下三个方面进行讲解:一、直接将数据实时的导入到HBase;二、选取部分字段进行实时导入;三、使用SQL查询的方式将MySQL中的数据实时的导入到HBase中。


 一、环境准备

1.1 修改MySQL配置文件 

       在进行数据导入之前需要提前将MySQL的Binlog日志功能打开,修改my.cnf文件,添加以下配置:

server-id  = 1739
log-bin = /usr/local/mysql/arch/mysql-bin
binlog_format = ROW

       修改完成后,重启MySQL:

systemctl restart mysql

       注意:如果原先配置文件中已经有了以上的配置,则不需要做改变。

1.2 上传MySQL驱动包

       将MySQL的驱动包上传至相关目录下:

目录1:
/opt/cloudera/parcels/STREAMSETS_DATACOLLECTOR/streamsets-libs/streamsets-datacollector-mysql-binlog-lib/lib
目录2:
/opt/cloudera/parcels/STREAMSETS_DATACOLLECTOR/streamsets-libs/streamsets-datacollector-jdbc-lib/lib

       建议这两个目录都上传一份,以免后期报找不到驱动的错误。

二、直接将数据实时的导入到HBase

1、在MySQL中新建一个名为student的表

mysql> show create table student;
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                           |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
  `id` varchar(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `age` varchar(20) DEFAULT NULL,
  `score` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

2、在HBase中新建命名空间和表

--创建命名空间
create_namespace 'ljs'
--创建表
create 'ljs:student','info'

3、创建StreamSets的Pipeline

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第1张图片

4、选择Origins类别,搜索MySQL Binary Log

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第2张图片

5、配置MySQL Binary Log

(1)在“Properties”面板的“General”选项卡上,配置以下属性。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第3张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第4张图片

(2)在“MySQL Binary Log”选项卡上,配置以下属性。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第5张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第6张图片

(3)在“Credentials”选项卡上,配置以下属性。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第7张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第8张图片

(4)在“Advanced”选项卡上,配置以下属性。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第9张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第10张图片

       到此MySQL Binary Log的配置完成。

6、添加表过滤的Stream Selector

       这里添加一个“Stream Selector”主要是用于过滤我们需要处理的表。

(1)在“Properties”面板的“General”选项卡上,配置以下属性。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第11张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第12张图片

(2)在“Conditions”选项卡上, 为要创建的每个条件单击“添加”图标。可以使用简单或批量编辑模式来添加条件。每个新条件都会创建一个对应的输出位置,无法编辑或删除默认流的条件。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第13张图片

7、添加回收站处理“Stream Selector”中“default”类型的数据

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第14张图片

       Trash目标端没有配置选项。

8、添加HBase处理模块

(1)在“Properties”面板的“General”选项卡上,配置以下属性。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第15张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第16张图片

(2)在“HBase”选项卡上,配置以下属性。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第17张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第18张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第19张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第20张图片

9、测试

(1)创建完成后,可以点击下图图标监测是否有问题。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第21张图片

(2)如果连接没问题,可以启动Pipeline。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第22张图片

(3)向MySQL中插入几条测试数据:

mysql> insert into student values('1','xzw','25','99');
Query OK, 1 row affected (0.00 sec)

mysql> insert into student values('2','yxy','25','98');
Query OK, 1 row affected (0.00 sec)

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第23张图片

       此处可以很清楚的看到有两条数据input和output。查看HBase中的数据:

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第24张图片

(4)向MySQL中执行update:

mysql> update student set name='lyq' where id = '2';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第25张图片

       查看HBase中的数据:

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第26张图片

三、选取部分字段进行实时导入HBase

1、在MySQL中新建另一个表

mysql> show create table stu;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                            |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| stu   | CREATE TABLE `stu` (
  `id` varchar(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `age` varchar(20) DEFAULT NULL,
  `fav` varchar(20) DEFAULT NULL,
  `addr` varchar(20) DEFAULT NULL,
  `score` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

2、同样的,选择Origins类别为MySQL Binary Log

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第27张图片

3、选择Field Remover

(1)在“Properties”面板的“General”选项卡上,配置以下属性。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第28张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第29张图片

(2)在“Remove”选项卡上,配置以下属性。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第30张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第31张图片

       此处,选择的是过滤掉的字段列表。

4、同样的,添加HBase处理模块

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第32张图片

5、测试

       同样的,先测试是都能够连接通过,通过后,启动Pipeline。向MySQL中插入几条数据:

mysql> insert into stu values('20','test','23','84','12','12');
Query OK, 1 row affected (0.00 sec)

mysql> insert into stu values('15','xzw','23','84','12','12');
Query OK, 1 row affected (0.00 sec)

       查看HBase中的结果:

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第33张图片

       此时,更新MySQL中的数据内容:

mysql> update stu set name = 'yxy' where id = '20';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

       再次查看HBase中的数据:

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第34张图片

四、使用SQL查询的方式将MySQL中的数据实时的导入到HBase中

1、源端选择“JDBC Query Consumer”

(1)在“Properties”面板的“General”选项卡上,配置以下属性。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第35张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第36张图片

(2)在“JDBC”选项卡上,配置以下属性。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第37张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第38张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第39张图片

(3)要与JDBC连接字符串分开输入JDBC凭据,请在“Credentials”选项卡上配置以下属性。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第40张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第41张图片

(4)要从Microsoft SQL Server处理变更捕获数据,请在“Change Data Capture”选项卡上,配置以下属性以按事务对行进行分组。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第42张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第43张图片

(5)使用低于4.0的JDBC版本时,在“Legacy Drivers”选项卡上,可以选择配置以下属性。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第44张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第45张图片 

(6)在“Advanced”选项卡上,可以选择配置高级属性。这些属性的默认值在大多数情况下都应该起作用。

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第46张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第47张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第48张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第49张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第50张图片

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第51张图片

2、同样的,添加HBase处理模块

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第52张图片

3、测试

       (1)跟之前一样,先测试一下看是否能够连通,如果没问题的话,点击运行,向MySQL中插入几条数据:

insert into stu values('20','yxy','23','84','12','12');
insert into stu values('15','xzw','23','84','12','12');

       查看HBase中的数据情况:

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第53张图片

       此时,更新其中的某条数据:

mysql> update stu set name = 'lyq' where id = '20';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

       再次查看HBase中的数据:

使用StreamSets将MySQL中变化的数据实时的导入到HBase中_第54张图片

 

       到这里,本文就接近尾声了,在此过程中,你们都遇到了什么问题,欢迎留言,让我看看你们遇到了什么问题~

你可能感兴趣的:(StreamSets,HBase,MySQL,StreamSets,mysql,hbase)