2024年CloudCanal x Hive 构建高效的实时数仓

基于 HDFS 文件的写入方式

Hive 是建立在 Hadoop 体系上的数据仓库,而实际的数据存储在 HDFS 中。

如果直接通过 HQL 将增量数据写入 Hive,Hive 会将 HQL 转化为 MR Job,由于每一个 MR Job 处理速度相对较慢,这将导致增量性能极其差。

CloudCanal 在进行数据写入的时候,选择的是绕过 Hive 这层,直接写入 HDFS 文件系统。

目前支持 HDFS 文件格式:Text、Orc、Parquet。

临时表统一 Schema

基于临时表构建的增量方式,如果临时表分散在不同的 Schema 中,将给 DBA 的管理带来不便。

为了简化管理,CloudCanal 将所有临时表构建在统一的 Schema 下,并允许用户自定义其临时表路径。

示例

准备 CloudCanal
添加数据源
  • 数据源管理 -> 添加数据源, 添加 MySQL、Hive

image.png
image.png

创建同步任务
  • 选择源端 MySQL 和目标端 Hive,同步的 SchemaTable,高级参数含义参考 MySQL -> Hive

image.png

  • 任务创建第四步,点击 配置分区键
  • 选择 分区键类型 以及 HDFS 文件类型

image.png
image.png

  • 点击下一步,创建任务即可

image.png

未来方向

文件 Append 写入方式

目前 HDFS 文件写入处理,是每批数据写到一个文件中,并不会处理历史数据文件,更加合理的方式是基于历史文件进行 Append
追加,写满之后再切换为下一个文件。

提供参数优化 MR 处理速度

目前 CloudCanal 并没有提供参数入口用于优化 MR 处理速度,而是自动使用用户所配置的,未来 CloudCanal 将提供一个参数入口用于用户自定义每一个
MR Job 的处理并行度等优化参数。

支持 MERGE INTO 合并方式

目前 CloudCanal 仅支持 INSERT OVERWRITE 的合并方式,这种方式更为通用,而 MERGE INTO 此种合并方式速度更快,但限制较多,未来
CloudCanal 也会支持此种合并方式。

支持自定义分区键

目前 CloudCanal 仅支持按照日期选择分区键,目前暂时不支持更多分区键的选择,未来 CloudCanal 会提供更多分区键的选择。

总结

本篇文章简单介绍 CloudCanal 对于全生命周期的数据流动的初步探索,并通过 MySQL -> Hive 示例介绍其使用。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flink是一个开源的流处理框架,可以帮助我们构建实时数仓。下面是一个简单的实时数仓代码示例。 首先,我们需要定义输入数据源。可以从Kafka、File、Socket等各种来源获取数据。例如,我们可以通过以下代码从Kafka获取数据: ```java DataStream<String> inputDataStream = env.addSource(new FlinkKafkaConsumer<>("topicName", new SimpleStringSchema(), kafkaProps)); ``` 接下来,我们可以对数据进行转换和处理。例如,我们可以使用Flink提供的各种操作符对数据进行过滤、映射、聚合等操作。例如,以下代码通过flatMap操作符将输入数据按空格拆分成单词: ```java DataStream<String> wordDataStream = inputDataStream.flatMap((value, out) -> { for (String word : value.split(" ")) { out.collect(word); } }); ``` 然后,我们可以将处理后的数据写入输出目的地。例如,我们可以使用Flink提供的各种Sink将数据写入Kafka、数据库或文件等。以下代码将单词数据写入Kafka: ```java wordDataStream.addSink(new FlinkKafkaProducer<>("outputTopicName", new SimpleStringSchema(), kafkaProps)); ``` 最后,我们需要设置Flink作业的执行配置和执行环境,并启动作业。 ```java env.setParallelism(1); env.execute("Real-time Data Warehouse Job"); ``` 以上代码只是一个简单的实时数仓构建代码示例。实际的实时数仓构建过程可能更加复杂,需要根据具体业务需求进行设计和实现。同时,还可以结合其他工具和框架,如Hadoop、Hive、HBase等来构建更完整的实时数仓解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值