使用 Iceberg on Kubernetes 打造新一代云原生数据湖

2023-11-11

背景

大数据发展至今,按照 Google 2003年发布的《The Google File System》第一篇论文算起,已走过17个年头。可惜的是 Google 当时并没有开源其技术,“仅仅”是发表了三篇技术论文。所以回头看,只能算是揭开了大数据时代的帷幕。随着 Hadoop 的诞生,大数据进入了高速发展的时代,大数据的红利及商业价值也不断被释放。现今大数据存储和处理需求越来越多样化,在后 Hadoop 时代,如何构建一个统一的数据湖存储,并在其上进行多种形式的数据分析,成了企业构建大数据生态的一个重要方向。怎样快速、一致、原子性地在数据湖存储上构建起 Data Pipeline,成了亟待解决的问题。并且伴随云原生时代到来,云原生天生具有的自动化部署和交付能力也正催化这一过程。本文就主要介绍如何利用 Iceberg 与 Kubernetes 打造新一代云原生数据湖。

何为 Iceberg

Apache Iceberg is an open table format for huge analytic datasets. Iceberg adds tables to Presto and Spark that use a high-performance format that works just like a SQL table.

Apache Iceberg 是由 Netflix 开发开源的,其于2018年11月16日进入 Apache 孵化器,是 Netflix 公司数据仓库基础。Iceberg 本质上是一种专为海量分析设计的表格式标准,可为主流计算引擎如 Presto、Spark 等提供高性能的读写和元数据管理能力。Iceberg 不关注底层存储(如 HDFS)与表结构(业务定义),它为两者之间提供了一个抽象层,将数据与元数据组织了起来。

Iceberg 主要特性包括:

  • ACID:具备 ACID 能力,支持 row level update/delete;支持 serializable isolation 与 multiple concurrent writers
  • Table Evolution:支持 inplace table evolution(schema & partition),可像 SQL 一样操作 table schema;支持 hidden partitioning,用户无需显示指定
  • 接口通用化:为上层数据处理引擎提供丰富的表操作接口;屏蔽底层数据存储格式差异,提供对 Parquet、ORC 和 Avro 格式支持

依赖以上特性,Iceberg 可帮助用户低成本的实现 T+0 级数据湖。

Iceberg on Kubernetes

传统方式下,用户在部署和运维大数据平台时通常采用手动或半自动化方式,这往往消耗大量人力,稳定性也无法保证。Kubernetes 的出现,革新了这一过程。Kubernetes 提供了应用部署和运维标准化能力,用户业务在实施 Kubernetes 化改造后,可运行在其他所有标准 Kubernetes 集群中。在大数据领域,这种能力可帮助用户快速部署和交付大数据平台(大数据组件部署尤为复杂)。尤其在大数据计算存储分离的架构中,Kubernetes 集群提供的 Serverless 能力,可帮助用户即拿即用的运行计算任务。并且再配合离在线混部方案,除了可做到资源统一管控降低复杂度和风险外,集群利用率也会进一步提升,大幅降低成本。

我们可基于 Kubernetes 构建 Hadoop 大数据平台:

在近几年大热的数据湖领域,通过传统 Hadoop 生态构建实时数据湖,受制于组件定位与设计,较为复杂与困难。Iceberg 的出现使得依赖开源技术快速构建实时数据湖成为可能,这也是大数据未来发展方向 - 实时分析、仓湖一体与云原生。引入 Iceberg 后,整体架构变为:

Kubernetes 负责应用自动化部署与资源管理调度,为上层屏蔽了底层环境复杂性。Iceberg + Hive MetaStore + HDFS 实现了基于 Hadoop 生态的实时数据湖,为大数据应用提供数据访问及存储。Spark、Flink 等计算引擎以 native 的方式运行在 Kubernetes 集群中,资源即拿即用。与在线业务混部后,更能大幅提升集群资源利用率。

如何构建云原生实时数据湖

架构图

  • 资源层:Kubernetes 提供资源管控能力
  • 数据层:Iceberg 提供 ACID、table 等数据集访问操作能力
  • 存储层:HDFS 提供数据存储能力,Hive MetaStore 管理 Iceberg 表元数据,Postgresql 作为 Hive MetaStore 存储后端
  • 计算层:Spark native on Kubernetes,提供流批计算能力

创建 Kubernetes 集群

首先通过官方二进制或自动化部署工具部署 Kubernetes 集群,如 kubeadm,推荐使用腾讯云创建 TKE 集群

推荐配置为:3 台 S2.2XLARGE16(8核16G)实例

部署 Hadoop 集群

可通过开源 Helm 插件或自定义镜像

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Iceberg on Kubernetes 打造新一代云原生数据湖 的相关文章

随机推荐

  • SpringCloud之整合dubbo

    SpringCloud整合dubbo进行服务之间的通信 一 编写公共dubbo api 然后把dubbo api打成jar包并安装 install 在本地仓库中 供其他模块依赖 二 导入相关依赖 服务提供模块和服务消费模块 pom xml
  • C++(12)——命名空间,模板函数,模板类

    命名空间 命名空间是为了解决全局变量名的污染问题而设立的 用来处理程序中 常见的同名冲突 C 提供了这样的名字空间作用域的限制 基本写法如下 namespace 名字空间作用域 比如下面的代码 设立了两个不用的命名空间 并通过作用域解析符调
  • Jetson硬件平台状态查看工具jtop安装

    0 背景介绍 刚把Jetson TX2刷机了 重新安装资源状态查看器jtop 1 依赖环境 sudo apt get install git cmake sudo apt get install python3 dev sudo apt g
  • 深度解析VC中的消息传递机制

    摘要 Windows编程和Dos编程 一个很大的区别就是 Windows编程是事件驱动 消息传递的 所以 要学好Windows编程 必须 对消息机制有一个清楚的认识 本文希望能够对消息的传递做一个全面的分析 一 什么是消息 消息系统对于一个
  • 【channel】应用实例1

    如何解决两个goroutine同时对一个channel进行读写的问题 请完成goroutine和channel协同工作的案例 具体要求 1 开启一个writeData协程 向管道intChan中写入50个整数 2 开启一个readData协
  • 小米路由器4a开发版固件_小米路由器 4A 刷入lean 的 openwrt/lede

    本教程同时适用于 小米路由器 4A 以及其千兆版 缘由 作为一只攻城狮 开发的时候经常要下一堆lib 然而很多依赖都在国外 虽然也有国内的源 但是也常用例外情况 因此下载依赖时比较慢 所以 懂我意思吧 然后我并不想在挂客户端 并且要局域网都
  • EditText文字改变监听

    改变文字就会有监听 mEtContent addTextChangedListener new TextWatcher param s 之前的字母 param start 之前的字母长度 param count 未知 param after
  • 【小程序】何为授权(scope)?获取小程序已经向用户请求过的权限(wx.getSetting(Object object))

    何为授权 scope 授权 部分接口需要经过用户授权同意才能调用 我们把这些接口按使用范围分成多个 scope 用户选择对 scope 来进行授权 当授权给一个 scope 之后 其对应的所有接口都可以直接使用 此类接口调用时 如果用户未接
  • 0基础转行Python,应该具备的条件和注意的问题!新手必备

    很多想转行做Python的 只是看重了我们这行工资高 但是对于行业知识什么都不懂 行情也不懂 无头苍蝇似的 漫无目的去看些免费的死视频 但是有什么意义呢 接触互联网很多年 现在Python技术是越来越受到关注 如今转行做Python的非常多
  • Python绘图和数据可视化

    经过几个月的学习 总算是对Python这门语言有了一定的了解 据说Python语言使用流行度排名已经是第一了 Python之所以这么流行得益于它适用于很多不同领域 目前使用最广泛的领域包括有数据分析挖掘 网络爬虫 机器学习与人工智能 Pyt
  • visual studio:使用GIT的时候 “Could not open ***.VC.opendb”

    参考 https blog csdn net wk89665944 article details 51240011
  • No command 'setenv' found

    zz http blog csdn net qtyl1988 article details 8096097 今天又遇到一个能够充分证明自己是菜鸟的问题 我要在ubuntu12 04下编译安装OpenInventor 阅读OpenInven
  • 关于静态测试

    1 静态测试 静态测试是指不运行被测试程序而寻找程序代码中可能存在的错误或评估程序代码的过程 静态测试的特点是不需要运行代码 也不需要对代码编译 链接和生成可执行文件 它是通过分析或检查源程序的方法 结构 过程 接口等来检查程序的正确性 目
  • unbuntu22.04安装有道词典

    文章目录 ubuntu22 04安装有道词典的详细教程 一 下载正确的deb安装包 二 执行安装命令 三 如果安装失败 1 安装成功后无法打开 1 1 修改词典的源码1 1 2 修改词典的源码2 四 运行 ubuntu22 04安装有道词典
  • Javascript数组排序sort方法和自定义排序方法

    前言 针对一个数组进行排序 一个很常见的需求 尤其在后端 当然 前端也是有这个需求的 当然 数组排序 是有现成的方法的 就是sort 方法 我们先开看下这个 标准答案 sort方法 var arr 45 98 67 57 85 6 58 8
  • babel6.X、babel7.x、 babel8.x用法

    babel6 x使用方法 需要安装的包 npm install babel loader save npm install babel core save npm install babel preset es2015 save npm i
  • Jmeter2-手机验证码方式进行用户登录

    使用手机验证码实现登录 调用了两个接口 一是发送短信验证码 二是用户登录 思路 1 使用CSV Data Set Config参数化 2 获取时间戳 3 发送短信验证码 4 使用BeanShell取样器从redis缓存中获取短信验证码 5
  • Grafana与python后端通过get请求进行通信

    插件配置请参考 Grafana获取URL地址中的json数据 Grafana下载如下插件 文章目录 模拟URL路由 配置Grafana插件 效果展示 模拟URL路由 from fastapi import FastAPI Query imp
  • postman请求一个url,could not get any response

    postman请求一个url不通 浏览器可以访问通 preface 现象 排除问题 总结 preface 最近 同事使用 postman 遇到一个问题 url 请求不通 could not get any response 现象 排除问题
  • 使用 Iceberg on Kubernetes 打造新一代云原生数据湖

    背景 大数据发展至今 按照 Google 2003年发布的 The Google File System 第一篇论文算起 已走过17个年头 可惜的是 Google 当时并没有开源其技术 仅仅 是发表了三篇技术论文 所以回头看 只能算是揭开了