Hudi_Large_Scale_Near_Real_Time_Pipelines_at_Uber
### Hudi在Uber中的大规模近实时管道应用 #### 概述 Hudi(Hadoop Unified Data Index)是一种开源框架,旨在解决基于Apache Hadoop的数据湖上增量数据处理、更新及查询的问题。它通过引入一种新的数据层——Hoodie表,来支持对大数据集进行高效读写操作,同时保持了数据的ACID属性。Uber利用Hudi构建其大规模的近实时数据处理管道,实现了数据的快速摄取与分析。 #### Hudi架构关键组件 1. **ChangeLog**:记录每个数据文件的更改历史,用于实现增量处理。 2. **Normal Table**:即传统的Hive、Spark或Presto表,作为Hudi表的底层存储。 3. **Dataset**:Hudi中的核心概念,指代一组具有特定属性的数据集合。 4. **DataSource**:用于将数据源连接到Hudi表的接口,此处特指Spark DataSource API。 5. **Index**:提供对数据文件的快速查找机制。 6. **Data Files**:存储实际的数据。 7. **Timeline**:管理Hudi表的状态和版本,跟踪所有数据操作的时间线。 8. **Metadata**:元数据信息,包括表结构、索引等。 9. **Hive Queries**:使用Hive对Hudi表进行查询。 10. **Presto Queries**:使用Presto对Hudi表进行查询。 11. **Spark DAGs**:定义Spark作业的执行流程,包括数据转换和处理逻辑。 12. **Store & Index**:数据存储与索引机制的结合,提高了数据访问速度。 13. **Data Read**:从存储中读取数据的过程。 14. **Storage Type**:指代不同的存储类型,如REALTIME、READ、OPTIMIZED等,对应不同的成本和延迟特性。 #### 实现细节 - **提取增量数据**:使用Sqoop工具从MySQL数据库中抽取增量数据并保存为Avro格式,命令如下: ```shell bin/sqoop import \ -Dmapreduce.job.user.classpath.first=true \ --connect jdbc:mysql://localhost/users \ --username root \ --password ******* \ --table users \ --as-avrodatafile \ --target-dir s3:///tmp/sqoop/import-1/users ``` - **使用Spark DataSource API读取Avro文件**: ```scala import com.uber.hoodie.DataSourceWriteOptions._ // 使用Spark DataSource API读取Avro文件 val inputDataset = spark.read.avro("s3://tmp/sqoop/import-1/users/*"); // 将数据保存为Hudi表 inputDataset.write.format("com.uber.hoodie") .option(HoodieWriteConfig.TABLE_NAME, "hoodie.users") .option(RECORDKEY_FIELD_OPT_KEY(), "userID") .option(PARTITIONPATH_FIELD_OPT_KEY(), "country") .option(PRECOMBINE_FIELD_OPT_KEY(), "last_mod") .option(OPERATION_OPT_KEY(), UPSERT_OPERATION_OPT_VAL()) .mode(SaveMode.Append) .save("/path/on/dfs") ``` - **使用DeltaStreamer摄取Sqoop增量数据**: ```shell spark-submit \ --class com.uber.hoodie.utilities.deltastreamer.HoodieDeltaStreamer \ /path/to/hoodie-utilities-*-SNAPSHOT.jar \ --props s3://path/to/dfs-source.properties \ --schema-provider-class com.uber.hoodie.utilities.schema.FilebasedSchemaProvider \ --source-class com.uber.hoodie.utilities.sources.AvroDFSSource \ --source-ordering-field last_mod \ --target-base-path s3:///path/on/dfs \ --target-table uber.employees \ --op UPSERT ``` - **配置文件**:用于指定数据源属性。 ```properties include=base.properties # Key generator properties hoodie.datasource.write.recordkey.field=_userID hoodie.datasource.write.partitionpath.field=country # Schema provider properties hoodie.deltastreamer.filebased.schemaprovider.source.schema.file=s3:///path/to/users.avsc # DFS Source hoodie.deltastreamer.source.dfs.root=s3:///tmp/sqoop ``` #### 总结 Hudi在Uber的应用场景下,通过高效的增量处理能力、低延迟的数据更新以及强大的数据一致性保证,为公司的数据平台提供了强有力的支持。通过使用Hudi,Uber能够实现实时数据分析,并且大大降低了数据处理的成本。上述实践案例展示了Hudi如何被集成到现有的数据处理流程中,以及如何通过具体的代码示例来实现数据的增量摄取、存储和查询等功能。





















- 粉丝: 0
- 资源: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- Java实训报告大全 JavaScript
- apache-jmeter-5.6.3.zip
- yiwa-机器人开发资源
- CoCache-Kotlin资源
- boe谷歌浏览器收藏标签
- 重庆市dem 无偏移tif
- 影刀RPA中级证书-网页进阶-批量自动发货
- AIOT人工智能物联网数据平台前端-AI人工智能资源
- MODIS数据综合处理软件 V1.0
- Rust通用代码生成器:莲花-Rust资源
- “数学建模必会十大经典算法详解”是一份深入解析数学建模中核心算法的资源 该资源详细阐述了包括蒙特卡罗算法、数据拟合与参数估计、线性规划与整数规划、图论算法、动态规划、以及最优化理论的非经典算法(如模拟
- CH592 Peripheral设备 PWM+DMA 驱动WS2812灯带
- 云手机操作视频效果展示
- MegEngine -硬件开发资源
- form-create-移动应用开发资源
- go-view-Typescript资源


