ApacheHudi典型应用场景知多少?

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ApacheHudi典型应⽤场景知多少?
1.近实时摄取
将数据从外部源如事件⽇志、数据库提取到中是⼀个很常见的问题。

在⼤多数Hadoop部署中,⼀般使⽤混合提取⼯具并以零散的⽅式解决该问题,尽管这些数据对组织是⾮常有价值的。

对于RDBMS摄取,Hudi通过Upserts提供了更快的负载,⽽⾮昂贵且低效的批量负载。

例如你可以读取MySQL binlog⽇志或,并将它们应⽤在DFS上的Hudi表,这⽐或更快/更⾼效。

对于像 / / 这样的NoSQL数据库,即使规模集群不⼤也可以存储数⼗亿⾏数据,此时进⾏批量加载则完全不可⾏,需要采⽤更有效的⽅法使得摄取速度与较频繁的更新数据量相匹配。

即使对于像这样的不可变数据源,Hudi也会强制在DFS上保持最⼩⽂件⼤⼩,从⽽解决Hadoop领域中的以便改善NameNode的运⾏状况。

这对于事件流尤为重要,因为事件流(例如单击流)通常较⼤,如果管理不善,可能会严重损害Hadoop集群性能。

对于所有数据源,Hudi都提供了通过提交将新数据原⼦化地发布给消费者,从⽽避免部分提取失败。

2. 近实时分析
通常实时由专门的分析存储,如、甚⾄提供⽀持。

这对于需要亚秒级查询响应(例如系统监视或交互式实时分析)的较⼩规模()数据⽽⾔是⾮常完美的选择。

但由于Hadoop上的数据令⼈难以忍受,因此这些系统通常最终会被较少的交互查询所滥⽤,从⽽导致利⽤率不⾜和硬件/许可证成本的浪费。

另⼀⽅⾯,Hadoop上的交互式SQL解决⽅案(如Presto和SparkSQL),能在⼏秒钟内完成的查询。

通过将数据的更新时间缩短⾄⼏分钟,Hudi提供了⼀种⾼效的替代⽅案,并且还可以对存储在DFS上多个更⼤的表进⾏实时分析。

此外,Hudi没有外部依赖项(例如专⽤于实时分析的专⽤HBase群集),因此可以在不增加运营成本的情况下,对更实时的数据进⾏更快的分析。

3. 增量处理管道
Hadoop提供的⼀项基本功能是构建基于表的派⽣链,并通过DAG表⽰整个⼯作流。

⼯作流通常取决于多个上游⼯作流输出的新数据,传统上新⽣成的DFS⽂件夹/Hive分区表⽰新数据可⽤。

例如上游⼯作流U可以每⼩时创建⼀个Hive分区,并在每⼩时的末尾(processing_time)包含该⼩时(event_time)的数据,从⽽提供1⼩时的数据新鲜度。

然后下游⼯作流D在U完成后⽴即开始,并在接下来的⼀个⼩时进⾏处理,从⽽将延迟增加到2个⼩时。

上述⽰例忽略了延迟到达的数据,即processing_time和event_time分开的情况。

不幸的是在后移动和物联⽹前的时代,数据延迟到达是⾮常常见的情况。

在这种情况下,保证正确性的唯⼀⽅法是每⼩时重复处理的数据,这会严重损害整个⽣态系统的效率。

想象下在数百个⼯作流中每⼩时重新处理TB级别的数据。

Hudi可以很好的解决上述问题,其通过记录粒度(⽽⾮⽂件夹或分区)来消费上游Hudi表HU中的新数据,下游的Hudi表HD应⽤处理逻辑并更新/协调延迟数据,这⾥HU和HD可以以更频繁的时间(例如15分钟)连续进⾏调度,并在HD上提供30分钟的端到端延迟。

为了实现这⼀⽬标,Hudi从流处理框架如、发布/订阅系统如或数据库复制技术如中引⼊了类似概念。

若感兴趣可以在找到有关增量处理(与流处理和批处理相⽐)更多优势的更详细说明。

4. DFS上数据分发
Hadoop的经典应⽤是处理数据,然后将其分发到在线存储以供应⽤程序使⽤。

例如使⽤Spark Pipeline将Hadoop的数据导⼊到ElasticSearch供Uber应⽤程序使⽤。

⼀种典型的架构是在Hadoop和服务存储之间使⽤队列进⾏解耦,以防⽌压垮⽬标服务存储,⼀般会选择Kafka作为队列,该架构会导致相同数据冗余存储在DFS(⽤于对计算结果进⾏离线分析)和Kafka(⽤于分发)上。

Hudi可以通过以下⽅式再次有效地解决此问题:将Spark Pipeline 插⼊更新输出到Hudi表,然后对表进⾏增量读取(就像Kafka主题⼀样)以获取新数据并写⼊服务存储中,即使⽤Hudi统⼀存储。

相关文档
最新文档