Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Aware机制

Spring Aware机制

作者头像
李鸿坤
发布于 2020-07-18 10:39:24
发布于 2020-07-18 10:39:24
1K00
代码可运行
举报
文章被收录于专栏:泛泛聊后端泛泛聊后端
运行总次数:0
代码可运行

流计算 Oceanus 简介

流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发、无缝连接、亚秒延时、低廉成本、安全稳定等特点的企业级实时大数据分析平台。流计算 Oceanus 以实现企业数据价值最大化为目标,加速企业实时化数字化的建设进程。

本文将您详细介绍如何提取 MySQL 数据与 HBase 数据进行维表关联(流维 join),经过简单聚合分析后存入 Elasticsearch 中。

前置准备

创建流计算 Oceanus 集群

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

进入 Oceanus 控制台 [1],点击左侧【集群管理】,点击左上方【创建集群】,具体可参考 Oceanus 官方文档 创建独享集群 [2]。

创建 MySQL 实例

进入 MySQL 控制台 [3],点击【新建】。具体可参考官方文档 创建 MySQL 实例 [4]。

数据准备:

进入实例数据库,创建 oceanus_advanced1_student_grade 表,并手动插入数据。

代码语言:sql
AI代码解释
复制
-- 建表语句
CREATE TABLE `oceanus_advanced1_student_grade` (
  `name`    varchar(50) NOT NULL DEFAULT '',
  `grade`   int(3)               DEFAULT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
-- 数据插入
INSERT INTO `oceanus_advanced1_student_grade` (`name`, `grade`) VALUES ('Oceanus-1', 85);
INSERT INTO `oceanus_advanced1_student_grade` (`name`, `grade`) VALUES ('Oceanus-2', 95)

创建 EMR 集群

登录 弹性 MapReduce 控制台 [5],选择【集群列表】>【新建集群】,开始新建集群,具体可参考 创建 EMR 集群 [6]。新建集群时,需选择安装 HBase 组件。

数据准备:

登录 EMR集群节点,通过 HBase Shell 命令进入 HBase 实例数据库,并新建表,手动插入数据。

代码语言:shell
AI代码解释
复制
# 进入 HBase 命令
root@yourhostname~# hbase shell
代码语言:sql
AI代码解释
复制
-- 建表语句
create 'oceanus_advanced1_student_info','StuInfo'
-- 数据插入
put 'oceanus_advanced1_student_info','Oceanus-1','StuInfo:Class','01'
put 'oceanus_advanced1_student_info','Oceanus-1','StuInfo:Age','17'
put 'oceanus_advanced1_student_info','Oceanus-2','StuInfo:Class','01'
put 'oceanus_advanced1_student_info','Oceanus-2','StuInfo:Age','20'
put 'oceanus_advanced1_student_info','Oceanus-3','StuInfo:Class','01'
put 'oceanus_advanced1_student_info','Oceanus-3','StuInfo:Age','18'

创建 Elasticsearch 集群

进入 Elasticsearch 控制台 [7],点击左上方【新建】,创建 Elasticsearch 实例,具体操作请访问 创建 Elasticsearch 集群 [8]

流计算 Oceanus 作业

1. 创建 Source
代码语言:sql
AI代码解释
复制
CREATE TABLE `mysql_cdc_source_table` (
  `name`        STRING,
  `grade`       STRING,
  `proc_time`   AS PROCTIME(),      -- 这里 proc_time 字段配合下面流维 join 时使用。
  PRIMARY KEY (`name`) NOT ENFORCED -- 如果要同步的数据库表定义了主键, 则这里也需要定义
) WITH (
  'connector' = 'mysql-cdc',        -- 固定值 'mysql-cdc'
  'hostname' = '10.0.0.158',        -- 数据库的 IP
  'port' = '3306',                  -- 数据库的访问端口
  'username' = 'root',              -- 数据库访问的用户名(需要提供 SHOW DATABASES、REPLICATION SLAVE、REPLICATION CLIENT、SELECT 和 RELOAD 权限)
  'password' = 'Tencent123$',       -- 数据库访问的密码
  'database-name' = 'testdb',       -- 需要同步的数据库
  'table-name' = 'oceanus_advanced1_student_grade'   -- 需要同步的数据表名
);
2. 创建 HBase 维表
代码语言:sql
AI代码解释
复制
CREATE TABLE hbase_table (
  rowkey      STRING,
  StuInfo     ROW <Class STRING,Age STRING>,
  PRIMARY KEY (rowkey) NOT ENFORCED
) WITH (
  'connector' = 'hbase-1.4',                         -- Flink 1.13 支持 hbase-2.2
  'table-name' = 'oceanus_advanced1_student_info',   -- HBase 表名
  'zookeeper.quorum' = '10.0.0.118:2181,10.0.0.119:2181,10.0.0.3:2181'   -- HBase 的 zookeeper 地址
);
3. 创建 Sink
代码语言:sql
AI代码解释
复制
CREATE TABLE elasticsearch6_sink_table (
    `class`       STRING,
    `amount`      BIGINT,
    PRIMARY KEY(`class`) NOT ENFORCED
) WITH (
    'connector' = 'elasticsearch-6',      -- 输出到 Elasticsearch 6
    'username' = 'elastic',               -- 选填 用户名
    'password' = 'Tencent123$',           -- 选填 密码
    'hosts' = 'http://10.0.0.97:9200',    -- Elasticsearch 的连接地址
    'index' = 'oceanus_advanced1',        -- Elasticsearch 的 Index 名
    'document-type' = '_doc',             -- Elasticsearch 的 Document 类型
    'sink.bulk-flush.max-actions' = '1',  -- 每条数据都刷新
    'format' = 'json'                     -- 输出数据格式,目前只支持 'json'
);
4. 编写业务 SQL
代码语言:sql
AI代码解释
复制
INSERT INTO elasticsearch6_sink_table
SELECT
b.StuInfo.Class            AS class,
COUNT(a.name)              AS amount
FROM mysql_cdc_source_table AS a
JOIN hbase_table FOR SYSTEM_TIME AS OF a.proc_time AS b
-- 这里一定要加入 for SYSTEM_TIME as of 语句,否则虽然仍然可以执行 JOIN,但是只会全量读取一次数据库,结果可能不符合预期。
ON a.name = b.rowkey
WHERE CAST(a.grade AS INT) >= 90 AND CAST(b.StuInfo.Age AS INT) >= 18
GROUP BY b.StuInfo.Class

总结

流计算 Oceanus 平台当前内置 Connector 支持了 MySQL、PostgreSQL、Hive、HBase、Redis 和 Oracle 维表,无需用户自己开发即可使用。具体如何使用维表可参考 内置维表参考列表 [9] 本例统计的是各个班级年龄大于等于18岁,并且成绩大于等于90分的人数,无实际业务用途。

在创建 Sink 表到 ES 时,Flink 会将上述 CREATE TABLE 语句定义的主键 class 字段当成 _id 生成主键,并据此更新之前的文档(Upsert 流)。如无主键的定义,Flink 会随机生成字符串当成 _id 生成主键,此时为 Append 流写入。

参考链接

[1] Oceanus 控制台:https://console.cloud.tencent.com/oceanus/overview

[2] 创建独享集群:https://cloud.tencent.com/document/product/849/48298

[3] MySQL 控制台:https://console.cloud.tencent.com/cdb

[4] 创建 MySQL 实例:https://cloud.tencent.com/document/product/236/46433

[5] 弹性 MapReduce 控制台:https://console.cloud.tencent.com/emr

[6] 创建 EMR 集群:https://cloud.tencent.com/document/product/589/10981

[7] Elasticsearch 控制台:https://console.cloud.tencent.com/es

[8] 创建 Elasticsearch 集群:https://cloud.tencent.com/document/product/845/19536

[9] 内置维表参考列表: https://cloud.tencent.com/document/product/849/48264

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 泛泛聊后端 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CG-Assignment1
Assimp能够导入很多种不同的模型文件格式,它会将所有的模型数据加载至Assimp的通用数据结构中。当Assimp加载完模型之后,就能够从Assimp的数据结构中提取所需的所有数据。
alanzeng
2025/01/14
1380
CG-Assignment1
9.opengl光照-漫反射贴图
现实世界中,物体的材质通常不止一种,比如汽车有车壳、轮胎、窗户,每一种材质都会有漫反射和环境光颜色。
公号sumsmile
2020/06/19
1.3K0
9.opengl光照-漫反射贴图
25.opengl高级光照-Gamma校正
简单理解:人对光强度的感知是非线性的。亮度的范围如果是[0,1],0是黑色,1是纯白色,那么0.5应该代表的是中间灰色吗?NO!!人能感知到的中间灰度值是亮度为0.2左右的光强。
公号sumsmile
2020/07/15
9470
35.opengl PBR-光照
这一章节就是把PBR-理论用代码实现一遍,其中球体的绘制参考一章:opengl-球体的绘制。
公号sumsmile
2020/08/28
6070
35.opengl PBR-光照
27.opengl高级光照-点光源阴影
接上一篇继续,实际中的光源几乎不会是平行光,点光比较多。点光的阴影生成原理和阴影映射基本相同,区别是阴影映射使用一张2D图作为深度缓存,点光照射是6个面,需要6个面的纹理来存储深度值
公号sumsmile
2020/07/21
1.4K0
27.opengl高级光照-点光源阴影
24.opengl高级光照-Blinn-Phong
冯氏光照在逼近真实光照和性能之间做了很好的平衡,解决了绝大部分场景的需求,也存在一些细节问题。这一章节讲Blinn-Phong通过对冯氏光照做的一些优化。
公号sumsmile
2020/07/15
1K0
32.opengl高级光照-延迟着色法
之前的章节,渲染流程从前往后,每个形状依次绘制,简单的场景这是没有问题的,而且很好理解。如果绘制复杂的场景,物体数量很大,这么做对性能消耗很大,“延迟着色法”就是针对超多元素的场景渲染的优化。
公号sumsmile
2020/08/11
1.2K0
32.opengl高级光照-延迟着色法
31.opengl高级光照-泛光bloom
bloom技术模拟现实场景中高亮光照效果,通过对光照增加模糊,形成一圈泛光,增强光照的辐射。
公号sumsmile
2020/08/11
1.3K0
31.opengl高级光照-泛光bloom
30.opengl高级光照-HDR
HDR:High Dynamic Range, 高动态范围 LDR: Low Dynamic Range, 低动态范围
公号sumsmile
2020/08/11
1.3K0
30.opengl高级光照-HDR
18.opengl高级-立方体贴图
立方体贴图在《视觉计算基础》一书中,第14章的环境贴图中有讲到,常见的环境贴图有立方体环境贴图和球体环境贴图,根据实际场景来区分使用,比如你想创建一个四四方方的房间环境,就用立方体贴图。原理也不复杂,可以根据相机视角映射到对应的纹理像素上。
公号sumsmile
2020/07/13
1.1K0
18.opengl高级-立方体贴图
14.opengl高级-模板测试
1.3 stencil test在graphics pipeline里面的位置,模板测试在深度测试之前
公号sumsmile
2020/06/28
1.2K0
14.opengl高级-模板测试
29.opengl高级光照-视差贴图
上一篇法线贴图使用了法线纹理,通过法线的变化来控制漫反射和镜面反射的强度,加强了纹理渲染的层次感,明暗渐变更符合实际情况。视差贴图在法线贴图之上,增加物体表面的凹凸感。
公号sumsmile
2020/07/28
9580
29.opengl高级光照-视差贴图
12. opengl模型加载-assimp编译(mac)
源码编译有两处坑: 2.1 Ver 3.3.1源码有笔误,编译报错,4.1+版本无此问题,亲测
公号sumsmile
2020/06/23
2.8K0
12. opengl模型加载-assimp编译(mac)
38.opengl-字体渲染
早期的文本渲染,是将需要的字符集放到一个大纹理中,这个纹理称为“位图字体”,渲染某个字符时,通过查找坐标,找到该字符对应的区域并渲染出来,再启动混合,让字符纹理的背景保持透明,非常容易理解。
公号sumsmile
2020/10/10
1.8K0
38.opengl-字体渲染
28.opengl高级光照-法线贴图
为了增加渲染的真实感,图片纹理对每个片段增加法线,渲染时根据不同的法线计算独立的光照效果。
公号sumsmile
2020/07/21
1.2K0
28.opengl高级光照-法线贴图
26.opengl高级光照-阴影映射
涉及的代码不少,其实逻辑不复杂,参考原文和代码: learnopengl-阴影映射 learnopengl-阴影映射-代码
公号sumsmile
2020/07/16
1.1K0
17.opengl高级-帧缓冲(1)
1.3. check帧缓冲状态(没有深入理解,具体需要检测哪些数据),后面的操作渲染到当前帧缓冲中,即离屏渲染(Off-screen Rendering),窗口上看不到任何变化
公号sumsmile
2020/07/10
2K0
17.opengl高级-帧缓冲(1)
21.opengl高级-几何着色器
几何着色器可以在顶点发送到着色器之前随意变换。可以这么理解:顶点着色器是接收属性,一般不做过多处理,保持原数据,算是第一层接口层;片元着色器一般处理color;如果想做些特殊处理,通过在中间加一层几何着色器把流程拆碎,分工更细致,达到工程代码高内聚低耦合,拓展性更合理。涉及的知识点不多,下面直接通过实例来说明几何着色器的使用原理
公号sumsmile
2020/07/14
1.2K0
【OpenGL】基础光照
现实世界中的光照是极其复杂,难以计算的,因此OpenGL的光照使用的是简化的模型,其中一个模型被称为冯氏光照模型(Phong Lighting Model)。
六月丶
2022/12/26
9211
【OpenGL】基础光照
22.opengl高级-实例化
绘制有共同特征,或者按照一定规则变化的图形阵列,如果挨个按照普通流程来绘制:绑定VAO、绑定纹理、设置uniform-->调用glDrawArrays(GL_TRIANGLES, 0, amount_of_vertices)性能上会比较差,opengl渲染管线流程中,CPU<-->GPU数据通信是很大的开销。
公号sumsmile
2020/07/14
8000
相关推荐
CG-Assignment1
更多 >
LV.1
这个人很懒,什么都没有留下~
作者相关精选
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
加入讨论
的问答专区 >
1程序员擅长1个领域
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    本文部分代码块支持一键运行,欢迎体验
    本文部分代码块支持一键运行,欢迎体验