当前位置: 首页 > news >正文

Apache Hudi数据湖技术应用在网络打车系统中的系统架构设计、软硬件配置、软件技术栈、具体实现流程和关键代码

网络打车系统利用Hudi数据湖技术成功地解决了其大规模数据处理和分析的难题,提高了数据处理效率和准确性,为公司的业务发展提供了有力的支持。
Apache Hudi数据湖技术的一个典型应用案例是网络打车系统的数据处理场景,具体如下:
大型网络打车公司每天需要处理的数据量达到数千亿条,数据规模达到数百PB级别。网络打车系统使用Hudi数据湖技术来跟踪记录每一次打车过程的所有事件,包括打开打车应用、发起打车、上车、到达目的地下车以及对司机的评价打分等。
在这个场景中,网络打车系统选择使用Hudi的写时复制表(COW)来存储应用程序中用户交互的历史记录数据。这些数据一旦产生并不会发生追溯修改,因此适合使用COW表来存储。使用Hudi后,网络打车系统的写入效率相比之前的Spark作业提高了100多倍,同时满足了数据查询的性能和低延迟要求。
此外,网络打车系统还利用Hudi提供的多种视图能力来优化数据查询。例如,使用快照查询来获取某个时间点的数据快照,使用增量查询来只查询自上次查询以来的新数据。这些视图能力使得网络打车系统能够更加高效地处理和分析数据,进而优化其业务决策和运营效率。

根据网络打车系统的Hudi应用场景,以下是详细的架构设计与实现方案:

一、硬件配置方案

  1. 存储层:
  • 分布式存储:10,000节点HDFS集群(或S3兼容对象存储)
  • 存储类型:NVMe SSD(热数据)+ HDD(冷数据)
  • 总容量:1.5EB(支持3副本)
  • 网络:100Gbps RDMA网络
  1. 计算层:
  • Spark/Flink集群:5000节点
  • 配置:256核/节点,2TB内存/节点
  • 本地SSD缓存:10TB/节点
  1. 网络架构:
  • 东西向流量:Clos网络架构
  • 延迟要求:计算节点间<1ms
  • 带宽:数据节点间40Gbps专线

二、系统架构设计

批量处理
流处理
元数据
存储
数据源
Kafka集群
处理层
Spark
Flink
Hudi数据湖
Hive Metastore
HDFS/S3
查询引擎
Presto/Trino
Hive
Spark SQL
BI工具

三、软件技术栈

  1. 核心组件:
  • 存储引擎:Apache Hudi 0.12.0
  • 计算引擎:Spark 3.3 + Flink 1.16
  • 资源调度:YARN 3.3 + Kubernetes 1.26
  • 数据格式:Parquet + Avro
  • 元数据管理:Hive Metastore 3.1.2
  1. 辅助组件:
  • 数据采集:Flume 1.10 + Kafka 3.3
  • 查询引擎:Trino 412
  • 监控体系:Prometheus 2.43 + Grafana 9.4

四、具体实现流程

  1. 数据写入流程:
# 示例Spark写入代码(Scala)
val hudiOptions = Map[String,String]("hoodie.table.name" -> "ride_events","hoodie.datasource.write.recordkey.field" -> "event_id","hoodie.datasource.write.partitionpath.field" -> "event_date,event_type","hoodie.datasource.write.precombine.field" -> "event_ts","hoodie.upsert.shuffle.parallelism" -> "5000","hoodie.insert.shuffle.parallelism" -> "5000","hoodie.bulkinsert.shuffle.parallelism" -> "5000"
)val eventDF = spark.read.format("kafka").option("kafka.bootstrap.servers", "kafka-cluster:9092").option("subscribe", "ride-events").load().select(from_json(col("value"), schema).as("data")).select("data.*")eventDF.write.format("org.apache.hudi").options(hudiOptions).option("hoodie.datasource.write.operation", "upsert").mode("append").save("s3://data-lake/ride_events")
  1. 查询优化配置:
-- 创建Hudi表外部关联
CREATE EXTERNAL TABLE ride_events
USING hudi
LOCATION 's3://data-lake/ride_events';-- 快照查询(最新数据)
SELECT * FROM ride_events 
WHERE event_date = '2023-08-01' AND event_type = 'payment';-- 增量查询(Java示例)
HoodieIncQueryParam incParam = HoodieIncQueryParam.newBuilder().withStartInstantTime("20230801120000").build();SparkSession.read().format("org.apache.hudi").option(HoodieReadConfig.QUERY_TYPE, HoodieReadConfig.QUERY_TYPE_INCREMENTAL_OPT_VAL).option(HoodieReadConfig.BEGIN_INSTANTTIME, "20230801120000").load("s3://data-lake/ride_events").createOrReplaceTempView("incremental_data");

五、关键优化技术

  1. 存储优化:
// Hudi表配置(Java)
HoodieWriteConfig config = HoodieWriteConfig.newBuilder().withPath("s3://data-lake/ride_events").withSchema(schema.toString()).withParallelism(5000, 5000).withCompactionConfig(HoodieCompactionConfig.newBuilder().withInlineCompaction(true).withMaxNumDeltaCommitsBeforeCompaction(5).build()).withStorageConfig(HoodieStorageConfig.newBuilder().parquetMaxFileSize(2 * 1024 * 1024 * 1024L)  // 2GB.build()).build();
  1. 索引优化:
# hudi.properties
hoodie.index.type=BLOOM
hoodie.bloom.index.bucketized.checking=true
hoodie.bloom.index.keys.per.bucket=100000
hoodie.bloom.index.filter.type=DYNAMIC_V0

六、运维监控体系

  1. 关键监控指标:
# Prometheus监控指标示例
hudi_commit_duration_seconds_bucket{action="commit",le="10"} 23567
hudi_compaction_duration_minutes 8.3
hudi_clean_operations_total 1428
hudi_bytes_written_total{type="parquet"} 1.2e+18

七、性能调优参数

  1. Spark调优参数:
spark.conf.set("spark.sql.shuffle.partitions", "10000")
spark.conf.set("spark.executor.memoryOverhead", "4g")
spark.conf.set("spark.hadoop.parquet.block.size", 268435456)  # 256MB

该架构设计可实现以下性能指标:

  • 写入吞吐:>500万条/秒
  • 查询延迟:点查<1s,全表扫描<5min/PB
  • 数据新鲜度:端到端延迟<5分钟
  • 存储效率:压缩比8:1(原始JSON vs Parquet)

实际部署时需要根据数据特征动态调整以下参数:

  1. 文件大小(hoodie.parquet.max.file.size)
  2. 压缩策略(hoodie.compact.inline.trigger.strategy)
  3. Z-Order索引字段选择
  4. 增量查询时间窗口策略

相关文章:

Apache Hudi数据湖技术应用在网络打车系统中的系统架构设计、软硬件配置、软件技术栈、具体实现流程和关键代码

网络打车系统利用Hudi数据湖技术成功地解决了其大规模数据处理和分析的难题&#xff0c;提高了数据处理效率和准确性&#xff0c;为公司的业务发展提供了有力的支持。 Apache Hudi数据湖技术的一个典型应用案例是网络打车系统的数据处理场景&#xff0c;具体如下&#xff1a; 大…...

安全策略配置

需求: 1、VLAN 2属于办公区;VLAN 3属于生产区 2、办公区PC在工作日时间(周一至周五&#xff0c;早8到晚6)可以正常访问0A Server&#xff0c;其他时间不允许 3、办公区PC可以在任意时刻访问web server 4、生产区PC可以在任意时刻访问0A Server&#xff0c;但是不能访问Web serv…...

c++ stl 遍历算法和查找算法

概述&#xff1a; 算法主要由头文件<algorithm> <functional> <numeric> 提供 <algorithm> 是所有 STL 头文件中最大的一个&#xff0c;提供了超过 90 个支持各种各样算法的函数&#xff0c;包括排序、合并、搜索、去重、分解、遍历、数值交换、拷贝和…...

【Envi遥感图像处理】008:波段(批量)分离与波段合成

文章目录 一、波段分离提取1. 提取单个波段2. 批量提取单个波段二、波段合成相关阅读:【ArcGIS微课1000例】0058:波段合成(CompositeBands)工具的使用 一、波段分离提取 1. 提取单个波段...

线程创建与管理 - 创建线程、线程同步(C++)

前言 在现代软件开发中&#xff0c;线程的创建和管理是并发编程的核心内容之一。通过合理地创建和管理线程&#xff0c;可以有效提高程序的响应速度和资源利用率。本文将详细讲解如何在C中创建线程&#xff0c;并探讨几种常见的线程同步机制。我们假设读者具备一定的C基础&…...

【C语言篇】“三子棋”

一、游戏介绍 三子棋&#xff0c;英文名为 Tic - Tac - Toe&#xff0c;是一款简单而经典的棋类游戏。游戏在一个 33 的棋盘上进行&#xff0c;两名玩家轮流在棋盘的空位上放置自己的棋子&#xff08;通常用 * 和 # 表示&#xff09;&#xff0c;率先在横、竖或斜方向上连成三个…...

安培定律应用于 BH 曲线上的工作点

在本篇博文中&#xff0c;我将展示如何应用安培定律来确定磁芯包裹的导体必须承载多少电流才能从 BH 值工作点获得 B 值&#xff0c;该工作点对应于磁芯材料中的最大 B 值。我在 BH 曲线上使用两个工作点&#xff0c;一个在线性区域&#xff0c;另一个在饱和区域。 安培定律 H…...

深度求索DeepSeek横空出世

真正的强者从来不是无所不能&#xff0c;而是尽我所能。多少有关输赢胜负的缠斗&#xff0c;都是直面本心的搏击。所有令人骄傲振奋的突破和成就&#xff0c;看似云淡风轻寥寥数语&#xff0c;背后都是数不尽的焚膏继晷、汗流浃背。每一次何去何从的困惑&#xff0c;都可能通向…...

【CSS】什么是响应式设计?响应式设计的基本原理,怎么做

在当今多设备、多屏幕尺寸的时代&#xff0c;网页设计面临着前所未有的挑战。传统的固定布局已无法满足用户在不同设备上浏览网页的需求&#xff0c;响应式设计&#xff08;Responsive Web Design&#xff09;应运而生&#xff0c;成为网页设计的趋势和标准。本文将深入探讨响应…...

后盾人JS--继承

继承是原型的继承 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </hea…...

提升开发效率:IDE使用技巧与插件推荐

在软件开发过程中&#xff0c;选择一个合适的集成开发环境&#xff08;IDE&#xff09;并掌握其使用技巧&#xff0c;可以显著提高开发效率。本文将分享一些常用的IDE使用技巧&#xff0c;并推荐几款实用的插件&#xff0c;帮助开发者更好地利用IDE进行开发。 一、IDE使用技巧…...

开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B与vllm实现推理加速的正确姿势(一)

一、前言 在当今人工智能技术迅猛发展的时代,各类人工智能模型如雨后春笋般不断涌现,其性能的优劣直接影响着应用的广度与深度。从自然语言处理到计算机视觉,从智能安防到医疗诊断,AI 模型广泛应用于各个领域,人们对其准确性、稳定性和高效性的期望也与日俱增。 在此背景下…...

小书包:让阅读更美的二次开发之作

小书包是在一款知名阅读软件的基础上进行二次开发的产品。在保留原有软件的基本功能和用户体验的同时&#xff0c;对其界面和视觉效果进行了精心美化&#xff0c;让阅读体验更加舒适和愉悦。 内置了171条书源&#xff0c;虽然数量不算多&#xff0c;但都是作者精挑细选出来的&a…...

MySQL 插入数据指南

MySQL 插入数据指南 引言 MySQL 是一款广泛使用的开源关系数据库管理系统&#xff0c;被广泛应用于各种规模的组织中。在数据库管理中&#xff0c;数据的插入是基础操作之一。本文将详细介绍如何在 MySQL 中插入数据&#xff0c;包括插入单条记录和多条记录&#xff0c;以及一…...

防火墙安全策略实验

一、拓扑图 需求 Cloud云&#xff1a; 二、防火墙配置 初始化防火墙 Username:admin Password:***** The password needs to be changed. Change now? [Y/N]: y Please enter old password: Admin123 Please enter new password: admin123 Please confirm new password: …...

【Redis】主从模式,哨兵,集群

主从复制 单点问题&#xff1a; 在分布式系统中&#xff0c;如果某个服务器程序&#xff0c;只有一个节点&#xff08;也就是一个物理服务器&#xff09;来部署这个服务器程序的话&#xff0c;那么可能会出现以下问题&#xff1a; 1.可用性问题&#xff1a;如果这个机器挂了…...

互联网行业常用12个数据分析指标和八大模型

本文目录 前言 一、互联网线上业务数据分析的12个指标 1. 用户数据&#xff08;4个&#xff09; (1) 存量&#xff08;DAU/MAU&#xff09; (2) 新增用户 (3) 健康程度&#xff08;留存率&#xff09; (4) 渠道来源 2. 用户行为数据&#xff08;4个&#xff09; (1) 次数/频率…...

多模块协同信息安全管理平台

1.产品介绍 产品名称 【SecureMOS - 多模块协同信息安全管理平台】 主要功能&#xff1a; [功能1] 模块化架构设计与集成 具体作用与使用方式: 通过模块化的设计&#xff0c;将信息安全系统分解为多个独立且可扩展的组件&#xff0c;便于快速部署和维护。需求满足与问题解…...

基于RK3588/RK3576+MCU STM32+AI的储能电站电池簇管理系统设计与实现

伴随近年来新型储能技术的高质量规模化发展&#xff0c;储能电站作为新能源领域的重要载体&#xff0c; 旨在配合逐步迈进智能电网时代&#xff0c;满足电力系统能源结构与分布的创新升级&#xff0c;给予相应规模 电池管理系统的设计与实现以新的挑战。同时&#xff0c;电子系…...

使用LightGlue进行图像配准并提取图像重叠区域

发表日期&#xff1a;2023年6月23日 项目地址&#xff1a;https://github.com/cvg/LightGlue https://github.com/cvg/glue-factory/ LightGlue是一个在精度上媲美Superglue&#xff0c;但在速度上比Superglue快一倍的模型。通过博主实测&#xff0c;LightGlue的配准效果比Su…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...