Apache Doris 整合 FLINK 、 Hudi 构建湖仓一体的联邦查询入门

news2024/11/25 14:41:36

1.概览

多源数据目录(Multi-Catalog)功能,旨在能够更方便对接外部数据目录,以增强Doris的数据湖分析和联邦数据查询能力。

在之前的 Doris 版本中,用户数据只有两个层级:Database 和 Table。当我们需要连接一个外部数据目录时,我们只能在Database 或 Table 层级进行对接。比如通过 create external table 的方式创建一个外部数据目录中的表的映射,或通过 create external database 的方式映射一个外部数据目录中的 Database。如果外部数据目录中的 Database 或 Table 非常多,则需要用户手动进行一一映射,使用体验不佳。

而新的 Multi-Catalog 功能在原有的元数据层级上,新增一层Catalog,构成 Catalog -> Database -> Table 的三层元数据层级。其中,Catalog 可以直接对应到外部数据目录。目前支持的外部数据目录包括:

  1. Apache Hive
  2. Apache Iceberg
  3. Apache Hudi
  4. Elasticsearch
  5. JDBC: 对接数据库访问的标准接口(JDBC)来访问各式数据库的数据。
  6. Apache Paimon(Incubating)

该功能将作为之前外表连接方式(External Table)的补充和增强,帮助用户进行快速的多数据目录联邦查询。

这篇教程将展示如何使用 Flink + Hudi + Doris 构建实时湖仓一体的联邦查询分析,Doris 2.0.3 版本提供了 的支持,本文主要展示 Doris 和 Hudi 怎么使用,同时本教程整个环境是都基于伪分布式环境搭建,大家按照步骤可以一步步完成。完整体验整个搭建操作的过程。

2. 环境

本教程的演示环境如下:

  1. Centos7
  2. Apache doris 2.0.2
  3. Hadoop 3.3.3
  4. hive 3.1.3
  5. Fink 1.17.1
  6. Apache hudi 0.14
  7. JDK 1.8.0_311

3. 安装

  1. 下载 Flink 1.17.1
    wget https://dlcdn.apache.org/flink/flink-1.17.1/flink-1.17.1-bin-scala_2.12.tgz
    ## 解压安装
    tar zxf flink-1.17.1-bin-scala_2.12.tgz
  2. 下载 Flink 和 Hudi 相关的依赖
wget https://repo1.maven.org/maven2/org/apache/flink/flink-table-planner_2.12/1.17.1/flink-table-planner_2.12-1.17.1.jar
wget https://repo1.maven.org/maven2/org/apache/hudi/hudi-hive-sync-bundle/0.14.0/hudi-hive-sync-bundle-0.14.0.jar
wget https://repo1.maven.org/maven2/org/apache/hudi/hudi-flink1.17-bundle/0.14.0/hudi-flink1.17-bundle-0.14.0.jar
wget https://repo1.maven.org/maven2/org/apache/hudi/hudi-hadoop-mr-bundle/0.14.0/hudi-hadoop-mr-bundle-0.14.0.jar

将上面这些依赖下载到 flink-1.17.1/lib 目录,然后将之前的 flink-table-planner-loader-1.17.1.jar 删除或者移除。

3. 创建 Hudi 表并写入数据

3.1 启动 Flink

bin/start-cluster.sh

启动 Flink client

./bin/sql-client.sh embedded shell

#设置返回结果模式为tableau,让结果直接显示

set sql-client.execution.result-mode=tableau;

3.2 启动 Hive MetaStore 和 HiveServer

nohup ./bin/hive --service hiveserver2 >/dev/null 2>&1  &
nohup ./bin/hive --service metastore >/dev/null 2>&1  &

3.3 创建 Hudi 表

我们来创建 Hudi 表,我们这里使用 Hive MetaStore Service 来保存 Hudi 的元数据。

CREATE TABLE table1(
  uuid VARCHAR(20) PRIMARY KEY NOT ENFORCED,
  name VARCHAR(10),
  age INT,
  ts TIMESTAMP(3),
  `partition` VARCHAR(20)
)
PARTITIONED BY (`partition`)
with(
  'connector'='hudi',
  'path' = 'hdfs://localhost:9000/user/hive/warehouse/demo.db',
  'table.type'='COPY_ON_WRITE',       
  'hive_sync.enable'='true',           
  'hive_sync.table'='hudi_hive',        
  'hive_sync.db'='demo',            
  'hive_sync.mode' = 'hms',         
  'hive_sync.metastore.uris' = 'thrift://192.168.31.54:9083' 
);
  1. 'table.type'='COPY_ON_WRITE', -- MERGE_ON_READ方式在没生成 parquet 文件前,hive不会有输出
  2. 'hive_sync.enable'='true', -- required,开启hive同步功能
  3. 'hive_sync.table'='${hive_table}', -- required, hive 新建的表名
  4. 'hive_sync.db'='${hive_db}', -- required, hive 新建的数据库名
  5. 'hive_sync.mode' = 'hms', -- required, 将hive sync mode设置为hms, 默认jdbc
  6. 'hive_sync.metastore.uris' = 'thrift://ip:9083' -- required, metastore的端口

写入数据:

INSERT INTO table1 VALUES
  ('id1','Danny',23,TIMESTAMP '1970-01-01 00:00:01','par1'),
  ('id2','Stephen',33,TIMESTAMP '1970-01-01 00:00:02','par1'),
  ('id3','Julian',53,TIMESTAMP '1970-01-01 00:00:03','par2'),
  ('id4','Fabian',31,TIMESTAMP '1970-01-01 00:00:04','par2'),
  ('id5','Sophia',18,TIMESTAMP '1970-01-01 00:00:05','par3'),
  ('id6','Emma',20,TIMESTAMP '1970-01-01 00:00:06','par3'),
  ('id7','Bob',44,TIMESTAMP '1970-01-01 00:00:07','par4'),
  ('id8','Han',56,TIMESTAMP '1970-01-01 00:00:08','par4');

通过 Flink 查询 Hudi 表的数据

SELECT * FROM TABLE1

我们可以查看 HDFS 上这个数据文件已经存在,在 hive client 下也可以看到这表

hive> use demo;
OK
Time taken: 0.027 seconds
hive> show tables;
OK
hudi_hive

4. Doris On Hudi

Doris 操作访问 Hudi 的数据很简单,我们只需要创建一个 catalog 就可以,不需要再想之前一样写一个完整的建表语句,同时当 Hudi 数据源中增删表或者增删字段,Doris 这边可以通过配置自动刷新或者手动刷新Catalog 自动感知。

下面我们在Doris 下创建一个 Catalog 来访问 Hudi 外部表的数据

CREATE CATALOG hudi PROPERTIES (
    'type'='hms',
    'hive.metastore.uris' = 'thrift://192.168.31.54:9083'
);

这里我们上面Hudi的元数据是使用HMS存储的,我们创建的时候只需要指定上面两个信息即可,如果你的HDFS是高可用的,你需要添加NameNode HA的信息:

'hadoop.username' = 'hive',
'dfs.nameservices'='your-nameservice',
'dfs.ha.namenodes.your-nameservice'='nn1,nn2',
'dfs.namenode.rpc-address.your-nameservice.nn1'='172.21.0.2:4007',
'dfs.namenode.rpc-address.your-nameservice.nn2'='172.21.0.3:4007',
'dfs.client.failover.proxy.provider.your-nameservice'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider'

具体参照Doris 官网文档

创建成功之后我们可以通过下面的红框标识出来的步骤去看到 Hudi 的表。

执行查询 Hudi 表:

将 Hudi 表里的数据迁移到 Doris

这里我们先创建好 Doris的表,建表语句如下:

CREATE TABLE doris_hudi(
  uuid VARCHAR(20) ,
  name VARCHAR(10),
  age INT,
  ts datetime(3),
  `partition` VARCHAR(20)
)
UNIQUE KEY(`uuid`)
DISTRIBUTED BY HASH(`uuid`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"enable_unique_key_merge_on_write" = "true"
);

通过 Insert Select 语句将 Hudi 数据迁移到 Doris :

insert into doris_hudi select uuid,name,age,ts,partition from hudi.demo.hudi_hive;

查询 Doris 表

mysql> select * from doris_hudi;
+------+---------+------+-------------------------+-----------+
| uuid | name    | age  | ts                      | partition |
+------+---------+------+-------------------------+-----------+
| id1  | Danny   |   23 | 1970-01-01 08:00:01.000 | par1      |
| id2  | Stephen |   33 | 1970-01-01 08:00:02.000 | par1      |
| id3  | Julian  |   53 | 1970-01-01 08:00:03.000 | par2      |
| id4  | Fabian  |   31 | 1970-01-01 08:00:04.000 | par2      |
| id5  | Sophia  |   18 | 1970-01-01 08:00:05.000 | par3      |
| id6  | Emma    |   20 | 1970-01-01 08:00:06.000 | par3      |
| id7  | Bob     |   44 | 1970-01-01 08:00:07.000 | par4      |
| id8  | Han     |   56 | 1970-01-01 08:00:08.000 | par4      |
+------+---------+------+-------------------------+-----------+
8 rows in set (0.02 sec)

我们那还可以通过 CATS方式将 hudi数据迁移到Doris,Doris 自动完成建表

create table doris_hudi_01
PROPERTIES("replication_num" = "1")  as  
select uuid,name,age,ts,`partition` from hudi.demo.hudi_hive;

5. 总结

是不是使用非常简单,快快体验Doris 湖仓一体,联邦查询的能力,来加速你的数据分析性能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1260365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无需API开发,商米云打印机集成营销系统,优化电商运营和订单处理速度

轻松实现商米云打印机连接 在电子商务和客户服务系统运营中,能够无缝地连接硬件设备,如打印机,至关重要。商米云打印机为电商和客服系统提供了一种无需复杂API开发的连接方式。通过简化的配置流程,商家可以轻松地将商米云打印机集…

【深度学习】概率图模型(二)有向图模型详解(条件独立性、局部马尔可夫性及其证明)

文章目录 一、有向图模型1. 贝叶斯网络的定义2. 条件独立性及其证明a. 间接因果关系 X 3 → X 2 → X 1 X_3 \rightarrow X_2 \rightarrow X_1 X3​→X2​→X1​b. 间接果因关系 X 1 → X 2 → X 3 X_1 \rightarrow X_2 \rightarrow X_3 X1​→X2​→X3​c. 共因关系 X 1 ← X…

动态网页从数据库取信息,然后展示。

把数据库的驱动放在bin目录下。 通过servlet 读取数据库的内容,生成session,然后跨页面传给展示页。 package src;import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSe…

Git的原理与使用(一):Git的基本操作(包含:版本回退)

Git原理与使用一 一.Git的初识与安装1.什么是Git2.如何安装Git1.git命令与git help(Git下的"man手册")2.centos下安装Git3.ubantu下安装Git 二.Git的前置操作与前置知识1.创建Git本地仓库2.配置Git3.理解Git的分区1.工作区2.暂存区3.版本库4.分区关系总结 三.添加文件…

Open Feign 源码解析(四) --- 请求对象构造(上)

Open Feign 源码解析四 请求对象的构造(上) 源码前三篇文章写了这个图的过程 源码前三篇文章的内容归纳起来就是讲了这样的问题: 如何把接口转换为具有发送http请求能力的feign client对象以及如何整合到Spring容器中? 如何构造…

【华为OD题库-040】计算最接近的数-java

题目 给定一个数组X和正整数K,请找出使表达式X[i]-x[i1]…-X[ik-1],结果最接近于数组中位数的下标i,如果有多个满足条件,请返回最大的i。 其中,数组中位数:长度为N的数组,按照元素的值大小升序排列后&#…

华纳云:linux中怎么实现apache安装与配置

在 Linux 系统中,安装和配置 Apache HTTP 服务器通常涉及以下步骤。以下以 Ubuntu 为例,其他 Linux 发行版的步骤也大致相同。 步骤 1:安装 Apache 打开终端并运行以下命令: sudo apt update sudo apt install apache2 步骤 …

魏副业而战:视频号副业项目赚钱攻略,每天30分钟,日入500+

我是魏哥,与其躺平,不如魏副业而战! 最近很多团队在操作视频号分成计划项目。 说真的,这个副业项目很不错,魏哥也操作测试一下,每天收益大几百,收益如下: 大家看了,是不…

如何把视频中不需要的人物去掉?

从视频中移除不想要的对象或区域,这项工作以前既繁琐复杂又很消耗时间。但使用“AI智能抠像”工具,只需几个简单的步骤,即可轻松移除视频中任何不想要的人物。 在制作视频的过程中,我们常常会遇到需要将视频中多余的人物去掉的情…

Redis深入理解-三次握手、槽位机制

Redis 节点之间的三次握手原理分析 比如多台 Redis 之间要建立集群,那么连接其中的一台 Redis 客户端,向其他 Redis 发送 meet 命令即可通知其他节点,那么发送 meet 命令给其他节点后,对方也会在内存中创建一个 ClusterNode 结构…

无代码未来:智能、可视化、自动化的融合

无代码是一个相对较新的概念,不同的人群对其界定可能存在一定的差异。 对于IT专业人士和开发人员而言,无代码通常是指使用可视化界面和拖拽操作来构建应用程序的工具和平台。 无代码平台通过提供预先构建的组件和模块,使得开发人员可以通过简…

Shader编程:“热成像”风格的效果是怎么实现的?(内附源码)

未经作者(微信ID:Byte-Flow)允许,禁止转载 文章首发于公众号:字节流动 之前转载过知乎上面的一篇文章: 作者:这是上帝的杰作 链接:https://zhuanlan.zhihu.com/p/344110917 文章详细讲解了 Shader 实现“热成像”效果的思路,但是并没有给出完整的实现代码,后台有读者…

Fluent热辐射壁面设置

对于固体壁面,可分为: 内部面外部面 外部面,若需要考虑外部热辐射的影响,需要将类型改为“mixed”或者“radiation”类型,并设置外部的发射率。 内部面通常为“wall”和“wall-shadow”的配对形式。 对于两侧均是透明…

经验分享:JMeter控制RPS

一、前言 ​ RPS (Request Per Second)一般用来衡量服务端的吞吐量,相比于并发模式,更适合用来摸底服务端的性能。我们可以通过使用 JMeter 的常数吞吐量定时器来限制每个线程的RPS。对于RPS,我们可以把他理解为我们的TPS,我们就…

工博会新闻稿汇总

23届工博会媒体报道汇总 点击文章标题即可进入详情页 9月23日,第23届工博会圆满落幕!本届工博会规模之大、能级之高、新展品之多创下历史之最。高校展区在规模、能级和展品上均也创下新高。工博会系列报道深入探讨了高校科技发展的重要性和多方面影响。…

疯狂小杨哥花3000万举办演唱会

我是卢松松,点点上面的头像,欢迎关注我哦! 确实厉害,95年的,白手起家,1亿元买楼,3000万办演唱会,而且会在线上直播,疯狂小杨哥正常从“网红”向“企业家”的转变。全网没…

HarmonyOS 应用模型开发指南介绍

一、基本概念解析 新版文档中的知识点,介绍更全面,逻辑更清晰,提供了各类基本概念解析,帮助开发者更快学习、掌握系统能力。以下是新版文档部分概念展示。 1、HAP是什么? 开发者通过DevEco Studio把应用程序编译为一…

C++之哈希

unordered系列容器的效率之所以比较高(尤其是查找),是因为它底层使用了哈希结构,即哈希表. 哈希概念 前言: 顺序结构以及平衡树中, 元素关键码与其存储位置之间没有对应的关系, 因此在查找一个元素 时, 必须要经过关键码的多次比较. 顺序查找时间复杂度为O(N), 平衡树中为树的…

内蒙古珠三角服务工作站挂牌 搭建桥梁促进民营经济发展

内蒙古自治区促进民营经济发展珠三角服务工作站挂牌仪式暨蒙粤两地民营企业家交流座谈会在深圳市顺利举行。 为贯彻落实内蒙古自治区党委、政府关于促进民营经济发展的决策部署,11月26日,由自治区发展改革委、工商联共同主办的“内蒙古自治区促进民营经济…

SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者

文章目录 目录 前言 一、启动SQL server服务的三种方法 1.不启动SQL server服务的影响 2.方法一:利用cmd启动SQL server服务 3.方法二:利用SQL Server配置管理器启动SQL server服务 4.方法三:在服务管理器中启动SQL server服务 二、建立数据库…