5.1 处理维度数据合并的策略
维度数据和状态数据非常像,但也有不同之处
➢
相同点
◼
长期保存维护
◼
可修改
◼
使用 k-v 方式查询
➢
不同点
◼
数据变更的时机不同
状态数据往往因为事实数据的新增变化而变更
维度数据只会受到业务数据库中的变化而变更
➢
综上
根据共同点,维度数据也是非常适合使用 hbase 存储的,稍有不同的是维度数据必须
启动单独的实时计算来监控维度表变化来更新实时数据。
5.2 维度表的读取
5.2.1 通过 phoenix 在 Hbase 中建表
(1)创建省份表
(2)创建用户表
5.2.2 创建样例类
(1)省份样例类 ProviceInfo
(2)用户样例类
5.2.3 创建 SparkStreaming 读取省份维度数据
(1)读取省份维度数据类 ProvinceInfoApp
(2)读取用户维度数据类 UserInfoApp
5.2.4 测试 1
运行 BaseDBMaxwellApp、ProvinceInfoApp、UserInfoApp 同步数据
,随便修改数据库
base_province,user_info 表中的一条数据,查看 hbase 中的结果。
5.2.5 利用 maxwell-bootstrap 初始化数据
初始化省份表
bin/maxwell-bootstrap --user maxwell --password 123456 --host hadoop202
--database gmall2020 --table base_province --client_id maxwell_1
初始化用户表
bin/maxwell-bootstrap --user maxwell --password 123456 --host hadoop202
--database gmall2020 --table user_info --client_id maxwell_1
➢
--user maxwell
数据库分配的操作 maxwell 数据库的用户名
➢
--password 123456
数据库分配的操作 maxwell 数据库的密码
➢
--host
数据库主机名
➢
--database
数据库名
➢
--table
表名
➢
--client_id
maxwell-bootstrap 不具备将数据直接导入 kafka或者 hbase 的能力,通过--client_id
指定将数据交给哪个 maxwell 进程处理,在 maxwell 的 conf.properties 中配置
5.2.6 测试 2
➢
运行 BaseDBMaxwellApp、ProvinceInfoApp、UserInfoApp 同步数据
➢
在 maxwell 执行 bin/maxwell-bootstrap 脚本
➢
注意:BaseDBMaxwellApp 会出现异常
是因为使用 bin/maxwell-bootstrap 同步原始数据的时候,会生成两条标记起始和结
束的 json 字符串,这两条数据的 data 属性是 null 的,并且 type 属性也和原来的标记
不一样,例如:插入操作标记位 bootstrap-insert
➢
解决:修改 BaseDBMaxwellApp 分流的代码
➢
因为前面产生了空数据,那么 ProvinceInfoApp 和 UserInfoApp 在保存到 Hbase 的
时候,可能会报错,可以先注释掉 saveToPhoenix 的操作,运行程序,消费 kafka 的
错误数据,改变偏移量