前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实时数仓:基于流计算 Oceanus 实现 MySQL 和 HBase 维表到 ClickHouse 的实时分析

实时数仓:基于流计算 Oceanus 实现 MySQL 和 HBase 维表到 ClickHouse 的实时分析

作者头像
吴云涛
修改2021-12-21 16:38:24
2.1K0
修改2021-12-21 16:38:24
举报

实时即未来,最近在腾讯云流计算 Oceanus(Flink) 进行实时计算服务分享给大家~

项目背景

本文介绍了结合 MySQL 数据库、流计算 Oceanus(Flink)、HBase 以及云数据仓库 ClickHouse 来构建实时数仓,并通过流计算 Oceanus 读取 MySQL 数据、关联 HBase 中的维表,最终将数据存入云数据仓库 ClickHouse 进行指标分析,实现完整实时数仓的全流程操作指导。

架构图
架构图

1. 环境搭建

1.1 创建流计算 Oceanus 集群

在流计算 Oceanus 产品活动页面 1 元购买 Oceanus 集群

在 Oceanus 控制台的【集群管理】->【新建集群】页面创建集群,选择地域、可用区、VPC、日志、存储,设置初始密码等。

若之前未使用过VPC,日志,存储这些组件,需要先进行创建。VPC 需要和下面的 MySQL、ES 集群使用同一个,否则需要手动打通(如对等连接)。

创建完后的集群如下:

1.2 创建私有网络 VPC

私有网络是一块您在腾讯云上自定义的逻辑隔离网络空间,在构建 MySQL、EMR,ClickHouse 集群等服务时选择的网络必须保持一致,网络才能互通。否则需要使用对等连接、VPN 等方式打通网络。页面地址:https://console.cloud.tencent.com/vpc/vpc?rid=8

1.3 创建云数据库 MySQL 服务

云数据库 MySQL 是腾讯云基于开源数据库 MySQL 专业打造的高性能分布式数据存储服务,让用户能够在云中更轻松地设置、操作和扩展关系数据库。页面地址:https://console.cloud.tencent.com/cdb

新建 MySQL 服务的页面需要注意选择的网络是之前创建好的。

创建完 MySQL 服务后,需要修改 binlog_row_image参数,如图修改为 FULL(默认值为MINIMAL)。

修改完参数后,登陆 MySQL 创建示例所需要的数据库和数据库表。

1)创建数据库 mysqltestdb

打开 SQL 窗口或者点击可视化页面创建数据库及表。

新建数据库命令:
代码语言:txt
复制
create database mysqltestdb;

在新建库的基础上新建表student:

代码语言:txt
复制
create table `student` (
  `id` int(11) not null auto_increment comment '主键id',
  `name` varchar(10) collate utf8mb4_bin default '' comment '名字',
  `age` int(11) default null comment '年龄',
  `create_time` timestamp null default current_timestamp comment '数据创建时间',
  primary key (`id`)
) engine=innodb auto_increment=4 default charset=utf8mb4 collate=utf8mb4_bin row_format=compact comment='学生表'
Student表中插入数据:
代码语言:txt
复制
 insert into mysqltestdb.student(id,name,age) values(1,“xiaomin”,20);

1.4 创建EMR集群

EMR是云端托管的弹性开源泛 Hadoop 服务,支持 Spark、HBase、Presto、Flink、Druid 等大数据框架,本次示例主要需要使用 HBase 组件。页面地址https://console.cloud.tencent.com/emr

在 EMR 集群中安装 HBase 组件。

如果生产环境,服务器配置可根据实际情况选择,示例中选择了低配服务器,网络需要选择之前创建好的VPC网络,始终保持服务组件在同一 VPC 下。

进入 HBase Master 节点

点击登录进入服务器

输入命令:

代码语言:txt
复制
# 进入HBase命令

root@172~# hbase shell

进入hbase shell,并新建表:

代码语言:txt
复制
# 建表语句
  create 'dim_hbase', 'cf'

# 插入数据
  put 'dim_hbase','1','cf:name','MingDeSchool'

1.5 创建云数据仓库 ClickHouse

页面地址:https://console.cloud.tencent.com/cdwch

新建集群

选择网络选择之前新建的 VPC 网络(依然保证各服务在同一网络)

登录 ClickHouse

在之前新建的 EMR 选择一台云主机点击登录,最好选择带有外网 IP 的节点。

登录 CH
登录 CH

在此机器上安装 ClickHouse 客户端,clickhouse-client 安装教程:https://cloud.tencent.com/document/product/1299/49824

登陆客户端

命令示例:

代码语言:txt
复制
clickhouse-client -h用户自己的ClickHouse服务IP --port 9000

新建数据库

代码语言:txt
复制
create database testdb on cluster default_cluster;

新建表

代码语言:txt
复制
CREATE TABLE testdb.student_school on cluster default_cluster (
`id` Int32,
`name` Nullable(String),
`school_name` Nullable(String),
`Sign` Int8
) ENGINE = ReplicatedCollapsingMergeTree('/clickhouse/tables/{layer}-{shard}/testdb/ student_school, '{replica}', Sign) ORDER BY id;

2. 数据清洗和运算加工

2.1 数据准备

2.1.1 MySQL-CDC 数据和 HBase 维表数据

按照上面操作中创建表,并向MySQL和HBase表中插入数据。

2.2 创建 Flink SQL作业

在 Oceanus 控制台创建 SQL 作业。

2.2.1 Source 端

MySQL-CDC Source:

代码语言:txt
复制
--学生信息作为cdc源表
CREATE TABLE `student` (
  `id` INT NOT NULL,
  `name` varchar,
  `age` INT,
  proc_time AS PROCTIME(),
  PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
  'connector' = 'mysql-cdc',
  'hostname' = 'YoursIp', 
  'port' = '3306',
  'username' = '用户名',
  -- 数据库访问的用户名(需要提供 SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT, SELECT, RELOAD 权限)
  'password' = 'YoursPassword,
  'database-name' = 'mysqltestdb',
  'table-name' = 'student' 
);

HBase 维表

代码语言:txt
复制
--示例使用school学校信息作为维表
CREATE TABLE dim_hbase (
  rowkey STRING,
  cf ROW <school_name STRING>,  -- 如果有多个列簇,写法 cf Row<age INT,name String>
  PRIMARY KEY (rowkey) NOT ENFORCED
) WITH (
  'connector' = 'hbase-1.4',
  'table-name' = 'dim_hbase',
  'zookeeper.quorum' = '用户自己的hbase服务器zookeeper地址,多个用逗号隔开'
);

2.2.2 Sink 端

创建到ClickHouse的创建表语句

代码语言:txt
复制
--关联后存入clickhouse表
CREATE TABLE `student_school` (
  stu_id INT,
  stu_name STRING,
  school_name STRING,
  PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
  'connector' = 'clickhouse',
  'url' = 'clickhouse://yourIP:8123',
  -- 如果ClickHouse集群未配置账号密码可以不指定
  --'username' = 'root',
  --'password' = 'root',
  'database-name' = 'testdb',
  'table-name' = ' student_school ',
  'table.collapsing.field' = 'Sign'
);

2.2.3 进行逻辑运算

此例子中,只进行了简单的Join没有进行复杂的运算。详细运算逻辑可参考:

流计算 Oceanus 运算符和内置函数 或者Flink官网Flink SQL开发章节

代码语言:txt
复制
INSERT INTO
  student_school
SELECT
  student.id as stu_id,
  student.name as stu_name,
  dim_hbase.cf.school_name
FROM
  student
  JOIN dim_hbas for SYSTEM_TIME as of student.proc_time
  ON CAST(student.school_id AS STRING) = dim_hbase.rowkey;

2.3 结果验证

在ClickHouse数据库中查询数据是否正确。

代码语言:txt
复制
select * from testdb.student_school; 

总结

使用 HBase作为维表需要购买 EMR 集群,若读者不需要 EMR 集群可使用 MySQL、Redis等作为维表进行关联。

原文转自:https://cloud.tencent.com/developer/article/1861802

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目背景
  • 1. 环境搭建
    • 1.1 创建流计算 Oceanus 集群
      • 1.2 创建私有网络 VPC
        • 1.3 创建云数据库 MySQL 服务
          • 1.4 创建EMR集群
            • 1.5 创建云数据仓库 ClickHouse
            • 2. 数据清洗和运算加工
              • 2.1 数据准备
                • 2.1.1 MySQL-CDC 数据和 HBase 维表数据
              • 2.2 创建 Flink SQL作业
                • 2.2.1 Source 端
                • 2.2.2 Sink 端
                • 2.2.3 进行逻辑运算
              • 2.3 结果验证
              • 总结
              相关产品与服务
              流计算 Oceanus
              流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的企业级实时大数据分析平台,具备一站开发、无缝连接、亚秒延时、低廉成本、安全稳定等特点。流计算 Oceanus 以实现企业数据价值最大化为目标,加速企业实时化数字化的建设进程。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档