概述(感谢hidataplus的共享共建,才有今天的分享_)
概述(感谢doirs的共享共建,才有今天的分享_)
本文主要是路演《Apache Doris 整合 FLINK CDC + Iceberg 构建实时湖仓一体的联邦查询》在《hdp 3.3.2-002》版的实现。
原文关键组件:Fink 1.14.4,flink-sql-connector-mysql-cdc-2.2.1,Apache Iceber 0.13.2 。
现在相应版本都已更新了。
hdp 3.3.2-002版组件是: Fink 1.16.2,flink-sql-connector-mysql-cdc(缺少),Apache Iceber 1.13.0
也算是一版升级演示吧~~~
本文目的:为HDP 3.3.2.0的推广,接个力 Doris + FLINK CDC + Iceberg 构建实时湖仓一体的联邦查询
接前文总规划HDP3.3.2.0-002实践试范,展开第二十二章
二十二、案例2 构建实时湖仓一体的联邦查询 flink&cdc + iceberg + doris
主要参考:
与张家锋交谈中。是建议我用2.0.2版 doris来中演的。我也想用2.0.2来演示。只是现有环境hdp 3.3.2-002 集成的droris 是1.2.6。
最新发布 hdp 3.3.2-003与即将发布的 hdp 3.3.2-004。已集成最新2.0.2版doris。本次路演示算测试hdp 3.3.2-002的集成情况。也适用于 hdp 3.3.2-003/4。
22.1a 系统架构
22.1b Doris湖仓一体的联邦查询架构如下
先回看张老师的文章Apache Doris 整合 FLINK CDC + Iceberg 构建实时湖仓一体的联邦查询。再继续。。。
先回看张老师的文章Apache Doris 整合 FLINK CDC + Iceberg 构建实时湖仓一体的联邦查询。再继续。。。
先回看张老师的文章Apache Doris 整合 FLINK CDC + Iceberg 构建实时湖仓一体的联邦查询。再继续。。。
22.2 环境安装部署
2.2.1 hdp 3.3.2的便利之处1:不用再去搞环境。直接进入主题了:
22.2.2 hdp 3.3.2的便利之处2:不是单纯的功能演示,是生产或预生产级要求的。我们会考虑HA,kerberso 等场景。张老师文中只是单纯的功能演示。
22.3 Mysql 数据源:
CREATE DATABASE demo;
USE demo;
CREATE TABLE userinfo (
id int NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL DEFAULT 'flink',
address VARCHAR(1024),
phone_number VARCHAR(512),
email VARCHAR(255),
PRIMARY KEY (`id`)
)ENGINE=InnoDB ;
INSERT INTO userinfo VALUES (10001,'user_110','Shanghai','13347420870', NULL);
INSERT INTO userinfo VALUES (10002,'user_111','xian','13347420870', NULL);
INSERT INTO userinfo VALUES (10003,'user_112','beijing','13347420870', NULL);
INSERT INTO userinfo VALUES (10004,'user_113','shenzheng','13347420870', NULL);
INSERT INTO userinfo VALUES (10005,'user_114','hangzhou','13347420870', NULL);
INSERT INTO userinfo VALUES (10006,'user_115','guizhou','13347420870', NULL);
INSERT INTO userinfo VALUES (10007,'user_116','chengdu','13347420870', NULL);
INSERT INTO userinfo VALUES (10008,'user_117','guangzhou','13347420870', NULL);
INSERT INTO userinfo VALUES (10009,'user_118','xian','13347420870', NULL);
22.4 Flink 引擎
22.4.1 启动 Flink on yarn
sudo -u flink kinit -kt /etc/security/keytabs/flink.headless.keytab flink-bigdata@TSSJ.COM
sudo -u flink /usr/hdp/3.3.2.0-002/flink/bin/yarn-session.sh -d -nm flinkOnYarn
22.4.2 进入 Flink SQL Client
cd /usr/hdp/3.3.2.0-002/flink
sudo -u flink bin/sql-client.sh embedded
22.5 Flink 创建Iceberg Catalog && hive Catalog
show bug: hdp 3.3.2-002中,flink 集成 iceberg及mysql-cdc是没做好的。
需手动添加上。
为便于后续使用,直接 vim /opt/sql-client-init.sql
set execution.checkpointing.interval = 3s;
CREATE CATALOG hive_catalog WITH (
'type'='iceberg',
'catalog-type'='hive',
'hive-conf-dir' = '/etc/hive/conf',
'uri'='thrift://ambari.tssj.com:9083,thrift://master.tssj.com:9083',
'clients'='5',
'property-version'='1',
'warehouse'='hdfs://mycluster/warehouse/iceberg_hive'
);
CREATE CATALOG hadoop_catalog WITH (
'type'='iceberg',
'catalog-type'='hadoop',
'property-version'='1',
'warehouse'='hdfs://mycluster/warehouse/iceberg_hadoop'
);
CREATE CATALOG myhive_catalog WITH (
'type' = 'hive',
'hive-conf-dir' = '/etc/hive/conf/'
);
use catalog hive_catalog;
重新进入flink sql client
sudo -u flink bin/sql-client.sh embedded -i /opt/sql-client-init.sql
22.6 Flink Mysql cdc
创建 Mysql CDC 表
use catalog default_catalog;
CREATE TABLE user_source (
database_name STRING METADATA VIRTUAL,
table_name STRING METADATA VIRTUAL,
`id` DECIMAL(20, 0) NOT NULL,
name STRING,
address STRING,
phone_number STRING,
email STRING,
PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
'connector' = 'mysql-cdc',
'hostname' = '192.168.1.10',
'port' = '3307',
'username' = 'root',
'password' = 'root',
'database-name' = 'demo',
'table-name' = 'userinfo'
);
查询CDC表:
select * from user_source;
22.7 通过 Flink 建好Iceberg表,然后通过Flink cdc插入数据到表,并读取
使用上面已建好的hive_catalog
---查看catalog
show catalogs;
---使用catalog
use catalog hive_catalog;
--创建数据库
CREATE DATABASE iceberg_hive;
--使用数据库
use iceberg_hive;
-- 建表all_users_info
CREATE TABLE all_users_info (
database_name STRING,
table_name STRING,
`id` DECIMAL(20, 0) NOT NULL,
name STRING,
address STRING,
phone_number STRING,
email STRING,
PRIMARY KEY (database_name, table_name, `id`) NOT ENFORCED
) WITH (
'catalog-type'='hive'
);
从CDC表里插入数据到Iceberg表里
use catalog default_catalog;
insert into hive_catalog.iceberg_hive.all_users_info select * from user_source;
然后停掉任务,我们去查询iceberg表
select * from hive_catalog.iceberg_hive.all_users_info;
看到hive目录下的数据及对应的元数据
22.8 通过 Hive 建好Iceberg表,然后通过Flink将数据插入到表里,并读取
22.8.1 hdp 3.3.2 中 hive 与集成好 iceberg。
22.8.2 Hive 创建iceberg表
sudo -u hive kinit hive
sudo -u hive hive
use iceberg_hive;
CREATE EXTERNAL TABLE iceberg_hive(
`id` int,
`name` string
)
STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
LOCATION 'hdfs://mycluster/warehouse/iceberg_hive/iceberg_hive.db/iceberg_hive'
TBLPROPERTIES (
'iceberg.mr.catalog'='hadoop',
'iceberg.mr.catalog.hadoop.warehouse.location'='hdfs://mycluster/warehouse/iceberg_hive/iceberg_hive.db/iceberg_hive'
);
22.8.3 Flink SQL Client 将数据插入到Iceberg表里
INSERT INTO hive_catalog.iceberg_hive.iceberg_hive values(2, 'c');
INSERT INTO hive_catalog.iceberg_hive.iceberg_hive values(3, 'zhangfeng');
INSERT INTO hive_catalog.iceberg_hive.iceberg_hive values(4, 'zhangfeng4');
select * from hive_catalog.iceberg_hive.iceberg_hive;
以上都跟doris无关吧。都是 flink iceberg hive 三者运用:
1,hive 作统一元数据管理。
2,iceberg表,可在Flink 里建,也可在Hive里建。
3,Flink && Flink cdc 作统一数据处理。
下图的红围部分算是有讲到了。
接着引出 doris 及 传说中的联邦查询。。。^_^
hdp 3.3.2-002 已集成好 doris 1.2.6。所以直接使用进入主题。
但在 keberos 环境下。fe/be启动未做 kinit 处理。所以需手动补下:
我试了2种方案:
同时 FE 和 BE 的 conf 目录下未包含 core-site.xml ,hive-site.xml 配置文件,所以需手动补下:
因为doris 0.13 与 1.13版的联邦查询用法不一样了。旧的用法在新版里废弃了。
只能从官网找了。
https://doris.apache.org/zh-CN/docs/dev/lakehouse/multi-catalog/hive
https://doris.apache.org/zh-CN/docs/dev/lakehouse/multi-catalog/iceberg
我的要求是在环境: hms ha + hdfs ha + kerbeos 跑通的。
但多hms 节点情况下: hive.metastore.kerberos.principal的设值没未确定。
所以只能降低到 :hdfs ha + kerbeos。
官网资料也得这程度~~失望!失望!~~~
22.9 Doris 查询 hive
CREATE CATALOG hive PROPERTIES (
'type'='hms',
'hive.metastore.uris' = 'thrift://ambari.tssj.com:9083',
'hive.metastore.sasl.enabled' = 'true',
'hive.metastore.kerberos.principal' = 'hive/ambari.tssj.com@TSSJ.COM',
'dfs.nameservices'='mycluster',
'dfs.ha.namenodes.mycluster'='nn1,nn2',
'dfs.namenode.rpc-address.mycluster.nn1'='ambari.tssj.com:8020',
'dfs.namenode.rpc-address.mycluster.nn2'='master.tssj.com:8020',
'dfs.client.failover.proxy.provider.mycluster'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider',
'hadoop.security.authentication' = 'kerberos',
'hadoop.kerberos.keytab' = '/etc/security/keytabs/hdfs.headless.keytab',
'hadoop.kerberos.principal' = 'hdfs-bigdata@TSSJ.COM',
'yarn.resourcemanager.principal' = 'yarn'
);
SHOW catalogs;
DROP catalog hive; -- 测试重来
SWITCH hive;
SHOW DATABASES;
use gmall;
show tables;
select * from dim_date;
若没在启动 fe/be前,做kinit 会报:
参考以下,找到解决方法
https://doris.apache.org/zh-CN/docs/lakehouse/faq?_highlight=kerberos#kerberos
22.10 Doris 查询 Iceberg
CREATE CATALOG iceberg PROPERTIES (
'type'='iceberg',
'iceberg.catalog.type'='hms',
'hive.metastore.uris' = 'thrift://ambari.tssj.com:9083',
'hive.metastore.sasl.enabled' = 'true',
'hive.metastore.kerberos.principal' = 'hive/ambari.tssj.com@TSSJ.COM',
'dfs.nameservices'='mycluster',
'dfs.ha.namenodes.mycluster'='nn1,nn2',
'dfs.namenode.rpc-address.mycluster.nn1'='ambari.tssj.com:8020',
'dfs.namenode.rpc-address.mycluster.nn2'='master.tssj.com:8020',
'dfs.client.failover.proxy.provider.mycluster'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider',
'hadoop.security.authentication' = 'kerberos',
'hadoop.kerberos.keytab' = '/etc/security/keytabs/hdfs.headless.keytab',
'hadoop.kerberos.principal' = 'hdfs-bigdata@TSSJ.COM',
'yarn.resourcemanager.principal' = 'rm/ambari.tssj.com@TSSJ.COM'
);
DROP catalog iceberg; -- 测试重来
SWITCH iceberg;
SHOW DATABASES;
use iceberg_hive;
show tables;
select * from all_user_info;
体会:
1,doris 的多源数据目录(Multi-Catalog)功能,实现联邦查询。但对hms多节点情况下。本文并未测试成功。
hms服务是无状态的,统一元数据管理配多个节点也是很普遍的需求呀~~~
2,hdp 3.3.2-002中,flink 集成 iceberg及mysql-cdc是没做好,需手动添加上;kerberos环境下doris的启动也未kinit ,需手动补下;FE 和 BE 的 conf 目录下未包含 core-site.xml ,hive-site.xml 配置文件,需手动添加上。即将发布004版里会优化。
3,hdp 3.3.2 用顺手后还是方便的,可以快速进入主题。精力更专注关键测试或路演。
4,hdp 3.3.2 环境进行路演更具实战意义:包含多组件矩阵,高可用,权限管理,安全认证等。