当前位置: 首页 > news >正文

iceberg 底层存储HDFS与juiceFS的区别

一、iceberg 

Iceberg 是一个表格式(table format):

它不存储数据引擎,而是负责:

  • 元数据管理(快照、分区、数据文件列表等)

  • 跟踪数据文件的位置

  • 支持 schema 演进、时间旅行等高级特性

它的底层数据文件通常是 Parquet、ORC、Avro 格式。

那么他底层数据存储格式是HDFS,juiceFS,和对象存储的区别是什么呢

二、juiceFS

        juiceFS是一款基于社区版本打造的高性能云原生分布式文件系统,为海量数据设计。支持弹性多云兼容多种协议,支持多客户端共享访问。数据部分存储在对象存储上,元数据引擎实现了文件协议并提供了极高的访问性能。

        JuiceFS 在设计之初是为了解决 HDFS 大数据上云的场景,产品的架构理念符合云原生的发展趋势。随着近年来AI大模型训练需求的高速增长,JuiceFS的海量规模、高性能及读写加速能力发挥出了极大的优势。

(一)核心特性:

  • 多协议兼容:POSIX兼容像本地文件系统一样使用、同时支持 HDFS 协议、S3对象存储协议

  • 云原生:可以通过 CSI Driver 在 K8S 中使用,已适配接入 Matrix、Cloudml 、数据工场平台

  • 多端共享:同一文件系统可在上千台服务器同时挂载,高性能并发读写,共享数据;

  • 缓存加速:支持单机缓存与分布式缓存多级加速能力,提升对象存储访问速度,降低延时

  • 数据安全:接入IAM权限管理、支持操作审计、支持回收站

(二)核心概念

        1. POSIX
POSIX 是一套“操作系统怎么统一说话和做事的规则”。🧩类比解释:
想象一下你在不同国家旅行,每个国家的插座形状都不一样,结果你手机充电器插不进去,很麻烦,对吧?
那如果全世界都用统一的插座标准,是不是你去哪都能充电?
——POSIX 就像这样的统一标准,只不过它不是用来充电的,而是用在“操作系统”上的。

        POSIX 是 IEEE 计算机协会指定的一系列标准,用于维护操作系统之间的兼容性。 POSIX 定义了系统和用户级应用程序编程接口(API),以及命令行 shell 和实用程序接口,以实现与 Unix 和其他操作系统变体的软件兼容性(可移植性)。 POSIX 也是IEEE 的商标。 POSIX 旨在供应用程序和系统开发人员使用。

POSIX 是做什么的?

POSIX 是 “Portable Operating System Interface(可移植操作系统接口)” 的缩写,它是一套由 IEEE 制定的标准,主要解决下面几个问题:

  1. 程序员痛点:
    不同的操作系统写程序规则不一样,比如 Linux、macOS、某些 UNIX 系统,不统一,写好的程序很难在多个系统上运行。

  2. POSIX的作用:
    规定了:

    • 操作系统要提供哪些“接口”(比如:文件操作、进程管理、输入输出等)

    • 程序员可以使用哪些“标准函数”去写程序

    • 系统怎么响应这些操作

  3. 结果就是:

    • 程序员按照 POSIX 标准写代码,程序可以在多个操作系统上运行(只要这些系统“遵守”POSIX)。

    • 系统开发者要实现这些 POSIX 接口,让程序员写的程序能跑得起来。


🧾举个生活中常见的例子:

你写了一个 C 程序,里面用了 open()read()write() 这样的函数来操作文件。这些函数就是 POSIX 规定的接口

只要系统支持 POSIX,你的程序基本上就可以在 Linux、macOS、FreeBSD 等系统上运行,无需修改。


✅哪些系统是“POSIX兼容”的?

  • Linux(大多数发行版)

  • macOS

  • FreeBSD、OpenBSD

  • 以前的 Unix 系统(像 AIX、Solaris)

  • 甚至还有一些嵌入式系统

JuiceFS 作为一个文件系统,通过像 FUSE 这样的机制,向操作系统暴露出一套 POSIX 兼容的接口,
让你可以用标准的系统调用(open/read/write/close 等)来访问 JuiceFS 存储的文件。🔧也就是说:
JuiceFS 自己实现了一套 POSIX 文件系统接口,用来“假装”它是个本地硬盘。
这就好比你写程序时调用 open(),操作系统通过 JuiceFS 实现的 POSIX 接口,
把你要打开的 /mnt/juicefs/file.txt 实际映射到远端的 S3 或 HDFS 里。
2. JuiceFS 是怎么用 FUSE 来实现 POSIX 兼容的?

FUSE 简单理解:

FUSE 是 Filesystem in Userspace(用户空间文件系统)的缩写。

  • 操作系统的文件系统通常跑在内核空间,速度快但开发复杂。

  • FUSE 允许开发者在用户空间写文件系统程序,操作系统通过一个内核模块把用户空间的文件系统“挂载”到系统里。


JuiceFS + FUSE 的流程是这样的:

  1. 用户操作文件
    比如你在命令行里执行 cat /mnt/juicefs/file.txt,操作系统内核拦截到你要打开这个文件的请求。

  2. FUSE 内核模块转发请求
    操作系统内核把打开文件的请求通过 FUSE 通道,交给用户空间的 JuiceFS 进程。

  3. JuiceFS 用户态程序处理请求
    JuiceFS 根据请求,查元数据(文件目录结构、权限等)和数据(实际文件内容):

    • 元数据通常存储在数据库或元数据服务里。

    • 文件内容存储在对象存储(如 S3)里。

  4. JuiceFS 返回结果给内核
    JuiceFS 把文件内容或操作结果返回给内核,内核再返回给用户程序。


为什么能实现 POSIX 兼容?

JuiceFS 在用户态实现了所有 POSIX 文件操作接口的逻辑,比如:

  • open()read()write()close()

  • 文件权限、目录结构、符号链接等

让系统和程序觉得这就是个正常的本地文件系统。

3.  POSIX 和 HDFS / S3 之间的差异
方面POSIX 文件系统HDFSS3 对象存储
接口规范标准操作系统文件系统接口Hadoop 生态专用接口RESTful API(HTTP)
访问方式文件路径,支持随机读写以大文件批处理为主以对象为单位,通常不支持随机写
写操作模式支持随机读写和更新一般写一次,读多次对象不可变(更新通常是重写)
目录支持支持真正的目录结构支持目录结构通过前缀模拟目录结构
典型应用系统文件存储,传统应用大数据批处理,分析云存储,备份,静态资源托管

三、juiceFS和HDFS的区别

我们先看看Iceberg表的组成。

Iceberg 表大致由以下几种文件组成:

  • 数据文件(data file): parquet/ORC 数据块

  • manifest file: 记录某个快照里包含了哪些数据文件

  • manifest list: 记录所有 manifest 文件

  • metadata.json: 当前表结构、schema、快照历史等

这些文件都存储在一个你配置的“仓库目录”中,比如:

  • hdfs://warehouse/iceberg/table/

  • s3a://bucket/iceberg/table/

  • jfs://volume/iceberg/table/

🧪 三种方式对比存储效果:

存储方式存储路径格式读写机制支持功能特点
HDFShdfs://...数据本地或通过 HDFS RPC 访问全功能强一致、高吞吐,需集群管理
JuiceFSjfs://... 或 POSIX 路径自己实现的 FS 接口或 POSIX FUSE全功能基于对象存储,具备 HDFS 的行为
S3s3a://...通过 REST API 调用部分限制(最终一致性、rename开销)便宜、弹性高、性能不稳定

🚨 关键区别在几个点:

关键点HDFSS3JuiceFS
一致性强一致最终一致强一致(JuiceFS 保证)
rename 支持快速成本高(实际是 copy)快速(JuiceFS 用元数据支持)
写入性能高(本地块)较慢(网络 & REST)介于中间,优化过上传流程
扩展性垂直扩展水平无限扩展依赖对象存储,弹性高
部署复杂度高(需要 HDFS 集群)低(只需要 JuiceFS 客户端)

📌 举个实际例子:

使用 HDFS:

fs.defaultFS=hdfs://hadoop-nn:8020 warehouse=hdfs://hadoop-nn:8020/user/hive/warehouse/iceberg/

  • Iceberg 会将所有的 manifest、metadata、data 文件写入 HDFS。

  • rename 很快,写文件强一致,事务安全。

使用 S3:

fs.defaultFS=s3a://my-bucket warehouse=s3a://my-bucket/iceberg/

  • Iceberg 依赖 S3 的 eventual consistency,必须开启 Iceberg 的一致性补丁(如 rename handling)。

  • rename 会变成 copy + delete,开销大。

  • 更适合 Append-only 的模型。

使用 JuiceFS:

fs.defaultFS=jfs://my-volume warehouse=jfs://my-volume/iceberg/

  • rename 快速(元数据操作)

  • 一致性强(JuiceFS 保证),兼具 HDFS 的行为

  • 后端是对象存储,但对 Iceberg 来说无感知,表现如 HDFS。

http://www.dtcms.com/a/333848.html

相关文章:

  • epoll发数据学习
  • 自己开发的VIP monitor通过TLM port口连接到RefenceModel 但是get不出transaction的问题
  • 《中国棒球知识科普》国家级运动健将标准·棒球1号位
  • 力扣(接雨水)——标准双指针
  • 最长链(二叉树直径DFS)
  • 【学习笔记】NTP服务客户端配置
  • 医疗领域名词标准化工具
  • 二分算法(模板)
  • Vue插槽---slot详解
  • RAGFlow入门
  • 大麦APP抢票揭秘
  • 亚马逊新品推广的智能突围:从传统SP广告到DeepBI策略革新
  • 结合项目对AOP的实践和理论讲解-AOP八股
  • 第十四节:物理引擎集成:Cannon.js入门
  • Windows Server Core智能调优
  • 智能体开发实战:用Deepseek做一个生成思维导图的智能体
  • SSH协议的GIT转换
  • 访问者模式C++
  • Day55 Java面向对象09 super关键字详解
  • MySQL 高效查询五虎将——分页、排序、分组、去重、聚合函数实战手册
  • 解决HFSS许可证激活错误的实用方法
  • QT开发中QString是怎么转char*类型的
  • 轴机械臂cad【7张】三维图+设计说明书
  • 子进程资源回收与线程相关概念
  • 机器视觉助力柔性屏贴合工艺升级,精度可达0.01mm
  • 文章数据发布到苹果CMS(MacCMS)网站技巧
  • 深入理解Transformer:从训练机制到长文本处理的核心问题
  • Erlang notes[2]
  • Fastadmin后台列表导出到表格
  • 从理论到实战:KNN 算法与鸢尾花分类全解析