Hudi
文章平均质量分 70
hudi
浊酒南街
纵使疾风起,人生不言弃。
展开
-
大数据hudi之集成flink:读取方式
如果将全量数据(百亿数量级) 和增量先同步到 kafka,再通过 flink 流式消费的方式将库表数据直接导成 hoodie 表,因为直接消费全量部分数据:量大(吞吐高)、乱序严重(写入的 partition 随机),会导致写入性能退化,出现吞吐毛刺,这时候可以开启限速参数,保证流量平稳写入。(2)Batch 增量消费,通过参数 read.start-commit 指定起始消费位置,通过参数 read.end-commit 指定结束消费位置,区间为闭区间,即包含起始、结束的 commit。原创 2023-09-05 16:41:53 · 134 阅读 · 0 评论 -
大数据hudi之集成flink:核心参数设置
注意:如果没有按照5.2.1中yarn-session模式解决hadoop依赖冲突问题,那么无法compaction生成parquet文件,报错很隐晦,在Exception中看不到,要搜索TaskManager中关于compaction才能看到报错。在进行insert/upsert操作时,Hudi可以将文件大小维护在一个指定文件大小。可以flink建表时在with中指定,或Hints临时指定参数的方式:在需要调整的表名后面加上 /*+ OPTIONS() */原创 2023-09-05 16:08:49 · 182 阅读 · 0 评论 -
大数据hudi之基本概念:表类型(Table Types)
我们进行一批新的写入,在索引后,我们发现这些记录与File group 1 和File group 2匹配,然后就有新的插入,我们为其创建一个新的文件组(File group 4)对每一个新批次写入都将创建相应数据文件的新版本(新的FileSlice),新版本文件包括旧版本文件的记录以及来自传入批次的记录(全量最新)。但是COW的优势在于它的简单性,不需要其他表服务(如压缩),也相对容易调试。MOR表中,包含列存的基本文件(.parquet)和行存的增量日志文件(基于行的avro格式,.log.*)。原创 2023-08-16 09:56:57 · 124 阅读 · 0 评论 -
大数据hudi之集成flink:Bucket 索引
当数据量比较大的时候,state的存储开销可能成为瓶颈,bucket 索引通过固定的 hash 策略,将相同 key 的数据分配到同一个 fileGroup 中,避免了索引的存储和查询开销。(3)bucket index 不支持跨 partition 的变更(如果输入是 cdc 流则没有这个限制),state index 没有限制。(1)bucket index 没有 state 的存储计算开销,性能较好。从 0.11 开始支持。原创 2023-09-05 20:25:27 · 207 阅读 · 0 评论 -
大数据hudi之集成flink:离线 Clustering
异步的 clustering 相对于 online 的 async clustering 资源隔离,从而更加稳定原创 2023-09-06 15:37:35 · 174 阅读 · 0 评论 -
大数据hudi之集成 Hive:集成步骤
Hudi 源表对应一份 HDFS 数据,通过 Spark,Flink 组件或者 Hudi CLI,可以将 Hudi 表的数据映射为 Hive 外部表,基于该外部表, Hive可以方便的进行实时视图,读优化视图以及增量视图的查询。将 hudi-hadoop-mr-bundle-0.12.0.jar , hudi-hive-sync-bundle-0.12.0.jar 放到 hive 节点的lib目录下;以 hive3.1.2、hudi 0.12.0为例,其他版本类似。// 按照需求选择合适的方式重启。原创 2023-09-06 19:13:20 · 77 阅读 · 0 评论 -
大数据hudi之集成flink:内存优化
(3)关注 TM 分配给每个 write task 的内存,保证每个 write task 能够分配到 write.task.max.size 所配置的大小,比如 TM 的内存是 4GB 跑了 2 个 StreamWriteFunction 那每个 write function 能分到 2GB,尽量预留一些 buffer,因为网络 buffer,TM 上其他类型 task(比如 BucketAssignFunction 也会吃些内存)。原创 2023-09-05 16:19:51 · 142 阅读 · 0 评论 -
大数据hudi之基本概念:时间轴
根据event time 该数据仍然可以落到9:00对应的分区,通过timeline直接消费10:00(commit time)之后增量更新(只消费有新commits的group),delta_commits:增量提交指的是将一批数据原子性的写入一个MergeOnRead类型的表,其中部分或所有数据可以写入增量日志;Hudi的核心是维护表在不同的即时时间(instants)执行的所有操作的时间轴(timeline),这有助于提供表的即时视图。cleans:清除表中不再需要的旧版本文件的后台活动;原创 2023-08-14 11:00:27 · 107 阅读 · 0 评论 -
大数据hudi之集成flink:sql-client方式
注意,保存模式现在是Append。通常,除非是第一次创建表,否则请始终使用追加模式。查找前一次提交中相同的_hoodie_record_keys在_hoodie_commit_time、age字段中的变化。查看webui:http://hadoop1:8081。1)修改flink-conf.yaml配置。(3)启动Flink的sql-client。(2)启动yarn-session。3)yarn-session模式。(3)启动sql-client。(1)修改workers。(2)启动Flink。原创 2023-08-30 20:07:47 · 103 阅读 · 0 评论 -
大数据hudi之核心概念:数据写
通过对写流程的梳理可以了解到apache hudi相对于其他数据湖方案的核心优势;1.写入过程充分优化了文件存储的小文件问题,Copy On Write写会一直将bucket(FileGroup)的base 文件写到设定的阈值大小才会划分新的bucket;Merge On Read写在同一个bucket中,log file 也是一直append 直到大小超过设定的阈值roll over;原创 2023-08-16 15:51:04 · 65 阅读 · 0 评论 -
大数据hudi之集成spark:常规调优
在这种情况下,请考虑通过 .bloomFilterFPP()/bloomFilterNumEntries()来调整Bloom过滤器的精度,以加速目标索引查找时间,另外可考虑一个以事件时间为前缀的键,这将使用范围修剪并显着加快索引查找的速度。Hudi写入parquet文件,需要使用一定的堆外内存,如果遇到此类故障,请考虑设置类似 spark.yarn.executor.memoryOverhead或 spark.yarn.driver.memoryOverhead的值。原创 2023-08-21 09:44:14 · 102 阅读 · 0 评论 -
大数据hudi之集成spark:IDEA编码方式
除了用shell交互式的操作,还可以自己编写Spark程序,打包提交。原创 2023-08-18 15:42:45 · 67 阅读 · 0 评论 -
大数据hudi之集成flink:类型映射
flinksql与hudi字段类型映射关系原创 2023-09-04 19:21:50 · 67 阅读 · 0 评论 -
大数据hudi之集成flink:核心原理分析
Hoodie 的数据去重分两步:(1)写入前攒 buffer 阶段去重,核心接口HoodieRecordPayload#preCombine(2)写入过程中去重,核心接口HoodieRecordPayload#combineAndGetUpdateValue。原创 2023-09-06 16:12:26 · 146 阅读 · 0 评论 -
大数据hudi之集成flink:写入模式
如果希望 Hoodie 保留消息的所有变更(I/-U/U/D),之后接上 Flink 引擎的有状态计算实现全链路近实时数仓生产(增量计算),Hoodie 的 MOR 表通过行存原生支持保留消息的所有变更(format 层面的集成),通过流读 MOR 表可以消费到所有的变更记录。否则中间结果在读的时候会被直接合并。流读的时候我们要注意 changelog 有可能会被 compaction 合并掉,中间记录会消除,可能会影响计算结果,需要关注sql-client的属性(result-mode)同上。原创 2023-09-05 20:19:37 · 135 阅读 · 0 评论 -
大数据hudi之基本概念:查询类型(Query Types)
对于写时复制(COW),它可以替代现有的parquet表(或相同基本文件类型的表),同时提供upsert/delete和其他写入方面的功能,可以理解为查询最新版本的parquet数据文件;读优化查询,可查看给定的commit/compact即时操作的表的最新快照。仅将最新文件片的基本/列文件暴露查询,并保证非Hudi表相同的列查询性能。增量查询,可以查询给定Commit/delta commit即时操作来查询新写入的数据。快照查询,可以查询指定commit/delta commit即时操作后表的最新快照。原创 2023-08-16 11:02:32 · 210 阅读 · 0 评论 -
大数据hudi之集成spark:环境准备
【代码】大数据hudi之集成spark:环境准备。原创 2023-08-17 11:36:01 · 105 阅读 · 0 评论 -
大数据hudi之基本概念:文件布局
8.Hudi的log(avro文件)是自己编码的,通过积攒数据buffer以logBlock为单位写出,每个LogBlock包含magic number、size、content、footer等信息,用于数据读、校验和过滤;(1)元数据:.hoodie目录对应着表的元数据信息,包括表的版本管理(TimeLine),归档目录(存放过时的instant也就是版本),一个instant记录了一次提交(commit)的行为、时间戳和状态,Hudi以时间轴的形式维护了在数据集上执行的所有操作的元数据;原创 2023-08-14 15:16:42 · 130 阅读 · 0 评论 -
大数据hudi之集成flink:IDEA编码方式
除了用sql-client,还可以自己编写FlinkSQL程序,打包提交Flink作业原创 2023-09-04 17:43:44 · 86 阅读 · 0 评论 -
大数据hudi之基本概念:索引(Index)
有时,如果布隆过滤器的假阳性率过高,查询会增加数据的打乱操作。上图为例,白色是基本文件,黄色是更新数据,有了索引机制,可以做到:避免读取不需要的文件、避免更新不必要的文件、无需将更新数据与历史数据做分布式关联,只需要在FileGroup内做合并;从index的维护成本和写入性能的角度考虑,维护一个global index的难度更大,对写入性能的影响也更大,所以需要non-global index;全局索引:全局索引在全表的所有分区范围下强制要求键的唯一性,也就是确保对给定的键有且只有一个对应的记录。原创 2023-08-15 19:53:54 · 149 阅读 · 0 评论 -
大数据hudi之集成spark:并发控制
针对写入操作(upsert、insert等)利用乐观并发控制来启用多个writer将数据写到同一个表中,Hudi支持文件级的乐观一致性,即对于发生在同一个表中的任何2个提交(写入),如果它们没有写入正在更改的重叠文件,则允许两个写入都成功。基于前面DeltaStreamer的例子,使用Delta Streamer消费kafka的数据写入到hudi中,这次加上并发写的参数。(4)zk下产生了对应的目录,/multiwriter_test下的目录,为代码里指定的lock_key。3)查看zk是否产生新的目录。原创 2023-08-18 17:09:58 · 167 阅读 · 0 评论 -
大数据hudi之集成spark:Spark SQL方式
默认情况下,如果提供了preCombineKey,则insert into的写操作类型为upsert,否则使用insert。hoodie.sql.bulk.insert.enable和hoodie.sql.insert.mode。使用INSERT_OVERWRITE_TABLE类型的写操作插入覆盖非分区表或分区表(动态分区)不需要指定模式和非分区列(如果存在)之外的任何属性,Hudi可以自动识别模式和配置。– 1、准备source表:非分区的hudi表,插入数据。原创 2023-08-17 20:03:43 · 159 阅读 · 0 评论 -
大数据hudi之集成flink:Hudi Catalog
从 0.12.0 开始支持,通过 catalog 可以管理 flink 创建的表,避免重复建表操作,另外 hms 模式的 catalog 支持自动补全 hive 同步参数。WITH ('catalog.path' = '${catalog 的默认路径}',WITH ('catalog.path' = '${catalog 的默认路径}','hive.conf.dir' = '${hive-site.xml 所在的目录}',原创 2023-09-06 11:43:34 · 222 阅读 · 0 评论 -
大数据hudi之核心概念:数据读
当前的Spark data source 可以指定消费起始和结束的commit时间,读取commit增量的数据集。Flink 和spark streaming 的writer 都可以apply 异步的compaction策略,按照间隔commits数或者时间触发compatition 任务,在独立的pipeline中执行;2.有base file:走 copy on write upsert流程,先读log file 建index,再读base file ,最后读logfile写新的base file;原创 2023-08-16 16:41:06 · 64 阅读 · 0 评论 -
大数据hudi之集成flink:常见基础问题
如果是 streaming 写,请确保开启 checkpoint,Flink 的 writer 有 3 种刷数据到磁盘的策略原创 2023-09-06 15:46:36 · 73 阅读 · 0 评论 -
大数据hudi之集成Hive::hive sync tool
若写入引擎没有开启自动同步,则需要手动利用 Hudi 客户端工具进行同步,Hudi提供Hive sync tool用于同步Hudi最新的元数据(包含自动建表、增加字段、同步分区信息)到hive metastore。为了向后兼容旧的Hudi版本,提供了一个可选的配置 --skip-ro-suffix,如果需要,可以关闭’_ro’后缀。通过hive2 jdbc协议同步,提供的是hive server2的地址,如jdbc:hive2://hive-server:10000。原创 2023-09-07 17:19:27 · 241 阅读 · 0 评论 -
大数据hudi之集成Hive:Hive同步
Flink hive sync 现在支持两种 hive sync mode, 分别是 hms 和 jdbc 模式。其中 hms 只需要配置 metastore uris;参数:https://hudi.apache.org/docs/basic_configurations#Write-Options。原创 2023-09-06 19:31:37 · 257 阅读 · 0 评论 -
大数据hudi之集成spark:spark-shell 方式
现在再次查询数据将显示更新的行程数据。查找以前提交中相同的_hoodie_record_keys在该表的_hoodie_commit_time、rider、driver字段中的变化。我们希望类似hive的 "insert overwrite "操作,以忽略现有数据,只用提供的新数据创建一个提交。注意:该表有三级分区(区域/国家/城市),在0.9.0版本以前的hudi,在load中的路径需要按照分区目录拼接"新增数据,生成一些数据,将其加载到DataFrame中,然后将DataFrame写入Hudi表。原创 2023-08-17 15:31:10 · 262 阅读 · 1 评论 -
大数据hudi之集成Hive:创建和查询 Hive 外表
一般来说 Hudi 表在用 Spark 或者 Flink 写入数据时会自动同步到 Hive 外部表(同6.2), 此时可以直接通过 beeline 查询同步的外部表,若写入引擎没有开启自动同步,则需要手动利用 hudi 客户端工具 run_hive_sync_tool.sh 进行同步,具体后面介绍。这里假设 MOR 类型 Hudi 源表的表名为hudi_mor,映射为两张 Hive 外部表hudi_mor_ro(ro表)和 hudi_mor_rt(rt表)。这个增量查询针对的rt表,不是ro表。原创 2023-09-07 14:38:12 · 703 阅读 · 0 评论 -
大数据hudi之集成flink:环境准备
1)拷贝编译好的jar包到Flink的lib目录下。2)拷贝guava包,解决依赖冲突。3)配置Hadoop环境变量。4)启动Hadoop(略)原创 2023-08-30 19:50:59 · 42 阅读 · 0 评论 -
大数据hudi之集成flink:写入方式
CDC 数据保存了完整的数据库变更,当前可通过两种途径将数据导入 hudi原创 2023-09-05 17:49:57 · 114 阅读 · 0 评论 -
大数据hudi之集成flink:离线 Compaction
MOR 表的 compaction 默认是自动打开的,策略是 5 个 commits 执行一次压缩。 因为压缩操作比较耗费内存,和写流程放在同一个 pipeline,在数据量比较大的时候(10w+/s qps),容易干扰写流程,此时采用离线定时任务的方式执行 compaction 任务更稳定。原创 2023-09-06 14:25:07 · 270 阅读 · 0 评论 -
大数据hudi之集成spark:DeltaStreamer导入工具
需要把hudi-utilities-bundle_2.12-0.12.0.jar放入spark的jars路径下,否则报错找不到一些类和方法。1.精准一次从Kafka采集新数据,从Sqoop、HiveIncrementalPuller的输出或DFS文件夹下的文件增量导入。(1)定义arvo所需schema文件(包括source和target)(3)根据源码里提供的模板,编写自己的kafka source的配置文件。(1)启动kafka集群,创建测试用的topic。(2)指定location创建hudi表。原创 2023-08-22 11:28:59 · 107 阅读 · 0 评论 -
大数据hudi之集成Hive:Flink 使用 HiveCatalog
hive3.1.3的connector存在guava版本冲突,需要解决:官网下载connector后,用压缩软件打开jar包,删除/com/google文件夹。处理完后上传flink的lib中。避免与hadoop的冲突,拷贝hadoop-mapreduce-client-core-3.1.3.jar到flink的lib中(5.2.1已经做过)1)上传hive connector到flink的lib中。2)解决与hadoop的冲突。3)创建catalog。原创 2023-09-06 19:49:59 · 157 阅读 · 0 评论 -
Hudi简介
Apache Hudi(Hadoop Upserts Delete and Incremental) 是下一代的流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upsert/delete、高级索引,流摄取服务,数据集群/压缩优化和并发,同时保证数据的开源文件格式;Apache Hudi不仅非常适合于流工作负载,而且还允许创建高效的增量批处理管道;Apache Hudi 可以轻松地在任何云存储平台上使用。原创 2023-08-11 10:00:33 · 119 阅读 · 0 评论