具有 Hudi、MinIO 和 HMS 的现代数据湖

Apache Hudi 已成为管理现代数据湖的领先开放表格式之一,直接在现代数据湖中提供核心仓库和数据库功能。这在很大程度上要归功于 Hudi 提供了表、事务、更新/删除、高级索引、流式摄取服务、数据聚类/压缩优化和并发控制等高级功能。

我们已经探讨了 MinIO 和 Hudi 如何协同构建现代数据湖。这篇博文旨在建立在这些知识的基础上,并提供利用 Hive 元存储服务 (HMS) 的 Hudi 和 MinIO 的替代实现。部分源于Hadoop生态系统的起源故事,Hudi的许多大规模数据实现仍然利用HMS。通常,从遗留系统迁移的故事涉及某种程度的混合,因为所有涉及的产品中最好的产品都被用来取得成功。

Hudi 谈 MinIO:一个成功的组合

Hudi 从依赖 HDFS 到云原生对象存储(如 MinIO)的演变与数据行业从单一和不适当的传统解决方案的转变完全吻合。MinIO 的性能、可扩展性和成本效益使其成为存储和管理 Hudi 数据的理想选择。此外,Hudi 针对现代数据中的 Apache Spark、Flink、Presto、Trino、StarRocks 等的优化与 MinIO 无缝集成,以实现大规模的云原生性能。这种兼容性代表了现代数据湖架构中的一种重要模式。

HMS集成:增强数据治理和管理

虽然Hudi提供了开箱即用的核心数据管理功能,但与HMS的集成增加了另一层控制和可见性。以下是HMS集成如何使大规模Hudi部署受益:

  • 改进数据治理:HMS集中管理元数据,实现数据湖的一致访问控制、沿袭跟踪和审计。这可确保数据质量、合规性并简化治理流程。

  • 简化架构管理:在HMS内定义和实施Hudi表的架构,确保跨流水线和应用的数据一致性和兼容性。HMS模式演进功能允许在不破坏管道的情况下适应不断变化的数据结构。

  • 增强的可见性和发现性:HMS为您的所有数据资产(包括Hudi表)提供中央目录。这有助于分析师和数据科学家轻松发现和探索数据。

入门:满足先决条件

要完成本教程,您需要设置一些软件。以下是您需要的内容的细分:

  • Docker 引擎:这个强大的工具允许您在称为容器的标准化软件单元中打包和运行应用程序。

  • Docker Compose:它充当业务流程协调程序,简化多容器应用程序的管理。它有助于轻松定义和运行复杂的应用程序。

**安装:**如果您要重新开始,Docker 桌面安装程序提供了一个方便的一站式解决方案,用于在特定平台(Windows、macOS 或 Linux)上安装 Docker 和 Docker Compose。这通常被证明比单独下载和安装它们更容易。

安装 Docker Desktop 或 Docker 和 Docker Compose 的组合后,可以通过在终端中运行以下命令来验证它们的存在:

docker-compose --version

请注意,本教程是为 linux/amd64 构建的,要使其适用于 Mac M2 芯片,您还需要安装 Rosetta 2。您可以通过运行以下命令在终端窗口中执行此操作:

softwareupdate --install-rosetta

在 Docker 桌面设置中,您还需要启用使用 Rosetta 在 Apple Silicone 上进行 x86_64/amd64 二进制仿真。为此,请导航到“设置”→“常规”,然后选中“罗塞塔”框,如下所示。

在MinIO上将HMS与Hudi集成

本教程使用 StarRock 的 demo 存储库。克隆在此处找到的存储库。在终端窗口中,导航到 documentation-samples 目录,然后 hudi 导航到文件夹,然后运行以下命令:

docker compose up

运行上述命令后,您应该会看到 StarRocks、HMS 和 MinIO 已启动并运行。

访问 MinIO 控制台 http://localhost:9000/ 并使用凭证登录 admin:password ,以查看存储桶 warehouse 是否已自动创建。

使用 Spark Scala 插入数据

执行以下命令,访问 spark-hudi 容器内的shell。

docker exec -it hudi-spark-hudi-1 /bin/bash

然后运行以下命令,这将带您进入 Spark REPL:

/spark-3.2.1-bin-hadoop3.2/bin/spark-shell

进入 shell 后,执行以下 Scala 行以创建数据库、表并将数据插入该表中:

import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
import org.apache.spark.sql.SaveMode._
import org.apache.hudi.DataSourceReadOptions._
import org.apache.hudi.DataSourceWriteOptions._
import org.apache.hudi.config.HoodieWriteConfig._
import scala.collection.JavaConversions._val schema = StructType(Array(StructField("language", StringType, true),StructField("users", StringType, true),StructField("id", StringType, true)
))val rowData= Seq(Row("Java", "20000", "a"),Row("Python", "100000", "b"),Row("Scala", "3000", "c")
)val df = spark.createDataFrame(rowData, schema)val databaseName = "hudi_sample"
val tableName = "hudi_coders_hive"
val basePath = "s3a://warehouse/hudi_coders"df.write.format("hudi").option(org.apache.hudi.config.HoodieWriteConfig.TABLE_NAME, tableName).option(RECORDKEY_FIELD_OPT_KEY, "id").option(PARTITIONPATH_FIELD_OPT_KEY, "language").option(PRECOMBINE_FIELD_OPT_KEY, "users").option("hoodie.datasource.write.hive_style_partitioning", "true").option("hoodie.datasource.hive_sync.enable", "true").option("hoodie.datasource.hive_sync.mode", "hms").option("hoodie.datasource.hive_sync.database", databaseName).option("hoodie.datasource.hive_sync.table", tableName).option("hoodie.datasource.hive_sync.partition_fields", "language").option("hoodie.datasource.hive_sync.partition_extractor_class", "org.apache.hudi.hive.MultiPartKeysValueExtractor").option("hoodie.datasource.hive_sync.metastore.uris", "thrift://hive-metastore:9083").mode(Overwrite).save(basePath)

就是这样。您现在已经使用 Hudi 和 HMS 设置了 MinIO 数据湖。导航回以 http://localhost:9000/ 查看您的仓库文件夹是否已填充。

数据探索

您可以选择通过在同一 Shell 中利用以下 Scala 来进一步探索您的数据。

val hudiDF = spark.read.format("hudi").load(basePath + "/*/*")hudiDF.show()val languageUserCount = hudiDF.groupBy("language").agg(sum("users").as("total_users"))
languageUserCount.show()val uniqueLanguages = hudiDF.select("language").distinct()
uniqueLanguages.show()// Stop the Spark session
System.exit(0)

立即开始构建云原生现代数据湖

Hudi、MinIO和HMS无缝协作,为构建和管理大规模现代数据湖提供全面的解决方案。通过集成这些技术,您可以获得释放数据全部潜力所需的敏捷性、可扩展性和安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/32146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 - 在项目中使用vue-i18n不生效的问题

检查和配置 Vue I18n 确保你已经正确安装了Vue I18n并且配置了组合API模式。 安装 Vue I18n npm install vue-i18nnext配置 i18n.js import { createI18n } from vue-i18n; import messages from ./messages;const i18n createI18n({legacy: false, // 使用组合 API 模式l…

Linux检查端口nmap

yum install -y nmap # 查看本机在运行的服务的端口号 nmap 127.0.0.1 补充:netstat netstat -tunlp | grep 3306

读《文明之光》第2册总结

《文明之光》系列大致按照从地球诞生到近现代的顺序讲述了人类文明进程的各个阶段,每个章节相对独立,全景式地展现了人类文明发展历程中的多样性。《文明之光》系列第二册讲述了从近代科学兴起,到工业革命时代,以及原子能应用这一…

C++/Qt 小知识记录7

工作中遇到的一些小问题,总结的小知识记录:C/Qt 小知识7 编译FFMPEG遇到的问题CMakeLists.txt配置FFMPEG的依赖方式: x264在Windows下编译生成*.libVS编译Qt工程时,遇到提示Change Qt Version的情况在QtOsg的窗口上嵌入子窗口&…

基于JSP的交通事故档案管理系统

开头语:你好,我是计算机学长猫哥,如果你对系统有更多的期待或建议,欢迎随时联系我。 开发语言:Java 数据库:MySQL 技术:JSPJava 工具:ECLIPSE、Tomcat 系统展示 首页 管理员界…

车辆数据的提取、定位和融合(其一 共十二篇)

第一篇: System Introduction 第二篇:State of the Art 第三篇:localization 第四篇:Submapping and temporal weighting 第五篇:Mapping of Point-shaped landmark data 第六篇:Clustering of landma…

Dockerfile实战

Dockerfile是用来快速创建自定义镜像的一种文本格式的配置文件,在持续集成和持续部署时,需要使用Dockerfile生成相关应用程序的镜像。 Dockerfile常用命令 FROM:继承基础镜像MAINTAINER:镜像制作作者的信息,已弃用&a…

文件管理—linux(基础IO)

目录 ​编辑 一、C语言文件接口(库函数) hello.c写文件 hello.c读文件 输出信息到显示器 stdin & stdout & stderr 二、系统文件I/O(系统调用) hello.c 写文件: hello.c读文件 接口介绍 open open…

JetBrains PhpStorm 2024 mac/win版:探索PHP之美,智慧编程新境界

JetBrains PhpStorm 2024是一款卓越的PHP集成开发环境(IDE),专为满足现代PHP开发者的需求而精心打造。它凭借强大的功能和出色的性能,赢得了全球开发者的广泛赞誉。 PhpStorm 2024 mac/win版获取 PhpStorm 2024提供了智能的代码编辑功能,包括…

【TKGQA】关于时间知识图谱问答的一篇综述阅读

前言 时间知识图谱问答(TKGQA)是KBQA中一个关注时间问题的重要子任务。时间问题包含时间约束、需要时间标记的答案,反映了现实世界事件的动态和演变性质。 一、TKGQA 1.1 概述 时间知识图谱(TKG): 通常表…

Android 添加自己的时钟小部件

小部件,也叫微件, 它的介绍参考官网 应用 widget 概览 https://developer.android.google.cn/develop/ui/views/appwidgets/overview?hlzh-cn 直接上图,原生系统上,时钟应用的小部件效果。 我也整一个。 1.创建小部件布局文…

tp5学习基本控制器和视图

1 文件结构 正在上传…重新上传取消 application 主要操作目录 extend 扩展 public 入口文件 runtime 运行时文件 thinkphp 核心代码 vendor 三方扩展 2 public/index.php 解析 正在上传…重新上传取消 .htaccess Apache 可写文件 index.php 主目录 router.php 路由文件 3 inde…

【34W字CISSP备考笔记】域1:安全与风险管理

1.1 理解、坚持和弘扬职业道德 1.1.1.(ISC)职业道德规范 1、行为得体、诚实、公正、负责、守法。 2、为委托人提供尽职、合格的服务。 3、促进和保护职业。 4、保护社会、公益、必需的公信和自信,保护基础设施。 1.1.2.组织道德规范 1、RFC 1087 &#xff0…

乳腺癌患者的生存分析:从传统方法到DeepSurv

一、引言 乳腺癌作为全球女性中最常见的癌症之一,其早期诊断和治疗对于提高患者生存率至关重要。随着医学技术和数据分析方法的不断发展,乳腺癌患者的生存分析逐渐成为研究的热点。通过生存分析,我们可以更好地理解疾病进展、预测患者预后&am…

Python发送HTML邮件有哪些步骤?怎么设置?

Python发送HTML邮件如何实现?Python发送邮件的策略? HTML邮件不仅可以包含丰富的文本格式,还可以插入图片、链接和其他多媒体内容,从而提升邮件的美观性和功能性。AokSend将详细介绍Python发送HTML邮件的主要步骤,帮助…

Redis进阶 - Redis 淘汰策略

我们知道Redis是分布式内存数据库,基于内存运行,可是有没有想过比较好的服务器内存也不过几百G,能存多少数据呢,当内存占用满了之后该怎么办呢?Redis的内存是否可以设置限制? 过期的key是怎么从内存中删除的…

【CSS in Depth2精译】1.4 简写属性

文章目录 1.4 简写属性1.4.1 当心简写属性悄悄覆盖其他样式1.4.2 记住简写值的顺序1 上、右、下、左顺序2 先水平、再垂直的顺序 1.4 简写属性 简写属性(Shorthand properties) 是可以一次性设置多个属性值的样式属性。例如, font 就是一个简…

柯桥商务英语培训|老外和你说Tom和Jack,可不是在说人名!所以是啥意思?

小明和小李,这两个人在中国相信没有谁不认识他们了。而且有关他们的梗更是传遍大街小巷。 例如:小明他爷爷活了103岁,小明做数学题,又或者是小李的老婆比小明小2岁等等。 其实在国外,也有这么两个人像小明、小李一样&a…

面向对象的进阶---static

1.static 静态变量 package com.itheima.a01staticdemo01;public class Student {private String name;private int age;public static String teacherName;public Student() {}public Student(String name, int age) {this.name name;this.age age;}/*** 获取* return n…

FPGA 690T 高速存储设计

高速存储设计会有各种需求的考虑,那么对应的方案也不完全相同,这篇文章出一期纯FPGA实现的高速存储方案。用纯fpga实现高速存储板卡有易国产化,功耗低和体积小等特点,缺点就是灵活性不是很强,实现标准ext4和nfs文件系统…