热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据湖风暴来袭,EMR重磅发布ApacheHudi

Hudi是一种数据湖的存储格式,在Hadoop文件系统之上提供了更新数据和删除数据的能力以及流式消费变化数据的能力。应用场景近实时数据摄取Hudi支持插入、更新和删除数据的能力。您

Hudi是一种数据湖的存储格式,在Hadoop文件系统之上提供了更新数据和删除数据的能力以及流式消费变化数据的能力。


应用场景



  • 近实时数据摄取

    Hudi支持插入、更新和删除数据的能力。您可以实时摄取消息队列(Kafka)和日志服务SLS等日志数据至Hudi中,同时也支持实时同步数据库Binlog产生的变更数据。

    Hudi优化了数据写入过程中产生的小文件。因此,相比其他传统的文件格式,Hudi对HDFS文件系统更加的友好。



  • 近实时数据分析

    Hudi支持多种数据分析引擎,包括Hive、Spark、Presto和Impala。Hudi作为一种文件格式,不需要依赖额外的服务进程,在使用上也更加的轻量化。



  • 增量数据处理

    Hudi支持Incremental Query查询类型,您可以通过Spark Streaming查询给定COMMIT后发生变更的数据。Hudi提供了一种流式消费HDFS变化数据的能力,可以用来优化现有的系统架构。




表类型

Hudi支持如下两种表类型:



  • Copy On Write

    使用专门的列式文件格式(Parquet)存储数据。Copy On Write表的更新操作需要通过重写实现。



  • Merge On Read

    使用列式文件格式(Parquet)和行式文件格式(Avro)混合的方式来存储数据。Merge On Read使用列式格式存放Base数据,同时使用行式格式存放增量数据。最新写入的增量数据存放至行式文件中,根据可配置的策略执行COMPACTION操作合并增量数据至列式文件中。




查询类型

Hudi支持如下三种查询类型:



  • Snapshot Queries

    可以查询COMMIT的最新快照数据。针对Merge On Read类型的表,查询时需要在线合并列存中的Base数据和日志中的实时数据;针对Copy On Write表,可以查询最新版本的Parquet数据。

    Copy On Write和Merge On Read表支持该类型的查询。



  • Incremental Queries

    支持增量查询的能力,可以查询给定COMMIT之后的最新数据。

    仅Copy On Write表支持该类型的查询。



  • Read Optimized Queries

    只能查询到给定COMMIT之前所限定范围的最新数据。Read Optimized Queries是对Merge On Read表类型快照查询的优化。

    Copy On Write和Merge On Read表支持该类型的查询。



写数据

EMR-3.32.0以及后续版本中,默认支持Hudi服务,因此使用Hudi时只需要在pom文件中添加Hudi依赖即可。


org.apache.hudi
hudi-spark_2.11
0.6.0
provided

写数据示例如下:



  • 插入或更新数据


    val spark = SparkSession
    .builder()
    .master("local[*]")
    .appName("hudi test")
    .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
    .getOrCreate()
    import spark.implicits._
    val df = (for (i <- 0 until 10) yield (i, s"a$i", 30 + i * 0.2, 100 * i + 10000, s"p${i % 5}"))
    .toDF("id", "name", "price", "version", "dt")
    df.write.format("hudi")
    .option(TABLE_NAME, "hudi_test_0")
    // .option(OPERATION_OPT_KEY, UPSERT_OPERATION_OPT_VAL) //更新数据
    .option(OPERATION_OPT_KEY, INSERT_OPERATION_OPT_VAL) //插入数据
    .option(RECORDKEY_FIELD_OPT_KEY, "id")
    .option(PRECOMBINE_FIELD_OPT_KEY, "version")
    .option(KEYGENERATOR_CLASS_OPT_KEY, classOf[SimpleKeyGenerator].getName)
    .option(HIVE_PARTITION_EXTRACTOR_CLASS_OPT_KEY, classOf[MultiPartKeysValueExtractor].getCanonicalName)
    .option(PARTITIONPATH_FIELD_OPT_KEY, "dt")
    .option(HIVE_PARTITION_FIELDS_OPT_KEY, "ds")
    .option(META_SYNC_ENABLED_OPT_KEY, "true")//开启元数据同步功能
    .option(HIVE_USE_JDBC_OPT_KEY, "false")
    .option(HIVE_DATABASE_OPT_KEY, "default")
    .option(HIVE_TABLE_OPT_KEY, "hudi_test_0")
    .option(INSERT_PARALLELISM, "8")
    .option(UPSERT_PARALLELISM, "8")
    .mode(Overwrite)
    .save("/tmp/hudi/h0")


  • 删除数据


    df.write.format("hudi")
    .option(TABLE_NAME, "hudi_test_0")
    .option(OPERATION_OPT_KEY, DELETE_OPERATION_OPT_VAL) // 删除数据
    .option(RECORDKEY_FIELD_OPT_KEY, "id")
    .option(PRECOMBINE_FIELD_OPT_KEY, "version")
    .option(KEYGENERATOR_CLASS_OPT_KEY, classOf[SimpleKeyGenerator].getName)
    .option(PARTITIONPATH_FIELD_OPT_KEY, "dt")
    .option(DELETE_PARALLELISM, "8")
    .mode(Append)
    .save("/tmp/hudi/h0")

    数据查询



Hive或Presto查询Hudi表时,需要在写入阶段开启元数据同步功能(设置META_SYNC_ENABLED_OPT_KEY为true)。

针对社区版Hudi, Copy On Write表和Merge On Read表需要设置set hive.input.format = org.apache.hudi.hadoop.hive.HoodieCombineHiveInputFormat。EMR版本的Copy On Write表不用设置format参数。

Hudi的详细信息,请参见https://hudi.apache.org/。


推荐阅读
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 深入解析 HDFS Federation:多命名空间架构详解
    HDFS Federation 是一种扩展 HDFS 架构的方式,通过引入多个独立的 NameNode 来解决单点故障和性能瓶颈问题。本文将详细探讨 HDFS Federation 的工作原理、优势以及潜在挑战。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 本文详细介绍了 Flink 和 YARN 的交互机制。YARN 是 Hadoop 生态系统中的资源管理组件,类似于 Spark on YARN 的配置方式。我们将基于官方文档,深入探讨如何在 YARN 上部署和运行 Flink 任务。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
author-avatar
缘来是你-心定
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有