canal+hbase+hive实时数据同步方案

2 篇文章 0 订阅
1 篇文章 0 订阅

MySQL数据实时同步到HBase实时方案

MySQL数据实时同步HBase分两步:
第一步先数据初试化,即:将历史数据同步到HBase;
第二步将MySQL增量数据实时同步到HBase;

一、数据初试化,即:历史数据同步
1、方案

2、DataX环境搭建
2.1、前置条件
Linux
JDK(1.8以上,推荐1.8)
Python(推荐Python2.6.X)
2.2、下载搭建DataX环境
cd /opt
mkdir datax
cd datax
wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
tar -zxvf datax.tar.gz
rm -rf datax.tar.gz
mkdir jobs
2.3、编写job json文件,并将job文件放到jobs路径下,job json文件样例如下:
{
“job”: {
“setting”: {
“speed”: {
“channel”:1
}
},
“content”: [
{
“reader”: {
“name”: “mysqlreader”,
“parameter”: {
“column”: [
“id”,
“name”,
“create_time”
],
“connection”: [
{
“jdbcUrl”: [“jdbc:mysql://chb2gc-pd-edws.mysql.rds.aliyuncs.com:3306/dbedb?serverTimezone=CST&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8”],
“table”: [“canal_history_test”]
}
],
“password”: “Qbvk7kN6rBHKXO”,
“username”: “edu_dws”,
“where”: “”
}
},
“writer”: {
“name”: “hbase11xwriter”,
“parameter”: {
“hbaseConfig”: {
“hbase.zookeeper.quorum”: “kafka175.data,kafka176.data,kafka177.data,node104.data,node116.data,node117.data,node118.data,node119.data”,
“hbase.cluster.distributed”: true,
“zookeeper.znode.parent”: “/hbase-unsecure”
},
“table”: “canal_history_test”,
“mode”: “normal”,
“rowkeyColumn”: [
{
“index”:0,
“type”:“string”
}
],
“column”: [
{
“index”:1,
“name”: “CF:NAME”,
“type”: “string”
},

{
“index”:2,
“name”: “CF:CREATE_TIME”,
“type”: “string”
}
],
“encoding”: “utf-8”
}
}
}
]
}
}
备注:红色字体部分根据实际情况修改;
2.4、执行job抽取数据,假设job文件名为mysql_to_hbase.json
cd /opt/datax
bin/python datax.py jobs/mysql_to_hbase.json
2.5、DataX学习资料
https://github.com/alibaba/DataX

二、数据实时增量同步
1、方案

2、前期准备
2.1、HBase环境搭建,通过Ambari安装(略)
2.2、给需要同步数据的MySQL数据库,创建canal server连接mysql数据库用户,并授权作为MySQL slave的权限
CREATE USER canal IDENTIFIED BY ‘canal’;
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘canal’@’%’;
FLUSH PRIVILEGES;
2.3、开启MySQL数据库的binlog写入功能,阿里云的mysql数据库都开启了binlog写入功能(略)
show variables like ‘log_bin’; --查看MySQL是否开启了binlog写入功能命令
2.4、创建kafka topic
cd /usr/hdp/3.0.1.0-187/kafka
./bin/kafka-topics.sh --create --zookeeper 10.126.8.17:2181 --replication-factor 3 --partitions 1 --topic canal-test-topic
备注:红色字体根据实际情况进行修改;
3、canal server安装
3.1、下载canal server组件
cd /usr/local
mkdir canal
cd canal
mkdir deploy
cd deploy
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
tar -zxvf canal.deployer-1.1.4.tar.gz
rm -rf canal.deployer-1.1.4.tar.gz
3.2、创建数据库实例文件夹
cd deploy/conf
mkdir dbInstanceName
cp example/instance.properties dbInstanceName
备注:
1、红色字体根据实际情况修改;
2、有几个数据库,就创建几个数据实例文件夹;
3.3、修改canal.properties文件配置信息
canal.serverMode = kafka
canal.mq.servers = kafka175.data:6667,kafka176.data:6667,kafka177.data:6667
canal.destinations = example,dbtest
备注:红色字体根据实际情况修改,值为3.2创建的数据库实例文件夹名称,多个实例文件夹间用逗号隔开;
3.4、修改instance.properties文件配置信息,例如:数据库实例文件夹为example
vim example/instance.properties
canal.instance.master.address=chb2gc-pd-edu-dws.mysql.rds.aliyuncs.com:3306
#mysql数据库连接地址,根据实际情况修改;
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
#mysql数据库连接的用户名和密码,根据实际情况修改;
canal.instance.filter.regex=dbedb.canal_test,dbedb.person_info
#配置要同步的库表信息,根据实际情况修改,其中dbedb为mysql schema,canal_test为表名称;
canal.mq.topic=canal-test-topic
#配置kafka topic,根据实际情况修改;
3.5、启动canal server
cd /usr/local/canal/deploy
bin/startup.sh

查看canal server日志信息:
cat logs/canal/canal.log
查看example instance日志信息:
cat logs/example/example.log

备注:
1)、添加数据库实例或在实例中增加新的同步表时,无需重启canal server。
2)、一个canal server可以有1~n个数据库实例,可以实时动态添加;

4、canal adapter安装
4.1、下载canal adapter组件
cd /usr/local/canal
mkdir adapter
cd adapter
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.adapter-1.1.4.tar.gz
tar -zxvf canal.adapter-1.1.4.tar.gz
rm -rf canal.adapter-1.1.4.tar.gz
4.2、修改application.yml文件配置信息
cd /usr/local/canal/adapter/conf
vim application.yml
canal.conf:
mode: kafka
mqServers: kafka175.data:6667,kafka176.data:6667,kafka177.data:6667
#配置kafka服务地址
canalAdapters:

  • instance: canal-test-topic #canal server的数据库实例名称或kafka topic名称
    groups:
    • groupId: g1
      outerAdapters:
  • name: hbase
    properties:
    base.zookeeper.quorum: kafka175.data,kafka176.data,kafka177.data,node104.data,node116.data,node117.data,node118.data,node119.data
    hbase.zookeeper.property.clientPort: 2181
    zookeeper.znode.parent: /hbase-unsecure
    #ZooKeeper中的路径,可以通过zk的客户端输入:ls / 查看,根据实际情况修改
    4.3、创建HBase表
    如:create ‘jxpt_canal_test’,{NAME => ‘CF’}
    备注:一个列族时,建议用CF
    4.4、修改HBase表映射文件
    cd /usr/local/canal/adapter/conf/hbase
    拷贝已有的HBase表映射文件修改,如:已有HBase表映射文件mytest_person2.yml,待修改的HBase表映射文件jxpt_canal_test.yml
    cp mytest_person2.yml jxpt_canal_test.yml
    vim jxpt_canal_test.yml
    dataSourceKey: defaultDS # 对应application.yml中的datasourceConfigs下的配置
    destination: canal-test-topic # 对应tcp模式下的canal instance或者MQ模式下的topic
    groupId: # 对应MQ模式下的groupId, 只会同步对应groupId的数据
    hbaseMapping: # mysql–HBase的单表映射配置
    mode: STRING # HBase中的存储类型, 默认统一存为String, 可选: #PHOENIX #NATIVE #STRING
    # NATIVE: 以java类型为主, PHOENIX: 将类型转换为Phoenix对应的类型
    destination: canal-test-topic # 对应 canal destination/MQ topic 名称
    database: bim_match # 数据库名/schema名
    table: person # 表名
    hbaseTable: MYTEST.PERSON # HBase表名
    family: CF # 默认统一Column Family名称
    uppercaseQualifier: true # 字段名转大写, 默认为true
    commitBatch: 3000 # 批量提交的大小, ETL中用到
    rowKey: id # 复合字段rowKey不能和columns中的rowKey并存
    # 复合rowKey会以 ‘|’ 分隔
    columns: # 字段映射, 如果不配置将自动映射所有字段,
    # 并取第一个字段为rowKey, HBase字段名以mysql字段名为主
    #id: ROWKE
    name: CF:NAME
    create_time: CREATE_TIME # 如果column family为默认CF, 则可以省略
    excludeColumns:
    • id # 忽略字段
      备注:
      1、红色字体是要根据实际情况修改的内容;
      2、adapter将会自动加载 conf/hbase 下的所有.yml结尾的配置文件,所以需要将无用的.yml HBase映射文件删除
      4.5、启动canal adapter client
      cd /usr/local/canal/adapter/
      bin/startup.sh

查看adapter日志
cat logs/adapter/adapter.log

备注:
1、更改HBase表映射文件或新增HBase表映射文件后,需重启canal adapter client;
2、为了防止遗漏canal server 和 canal adapter client(因为需要重启)间的时间差期间的增量数据,建议新增数据实例或库表时,先停掉canal adapter client;
5、hive与hbase整合,构建实时数仓
5.1、确保 Hive 的 lib 目录下有 hive-hbase-handler-xxx.jar、Zookeeper jar、HBase Server jar、HBase Client jar 包;
5.2、创建hive表映射到hbase表,建表脚本样例如下:
CREATE EXTERNAL TABLE ods_canal_history_test(
id string,
name string,
create_time string
)
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
WITH SERDEPROPERTIES (“hbase.columns.mapping” = "
:key,
CF:NAME,
CF:CREATE_TIME
")
TBLPROPERTIES (“hbase.table.name” = “canal_history_test”);
备注:
1、红色字体需要根据实际情况更改;
2、在 Hive 中都要使用 external 表来与 HBase 表进行关联;
6、canal学习资料
https://github.com/alibaba/canal
https://www.bookstack.cn/read/canal-v1.1.4/507a40ad1c1335da.md

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独狐游清湖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值