当前位置: 首页 > 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.xdnf.cn/news/1300519.html

相关文章:

  • nflsoi 8.14 题解
  • 集成电路学习:什么是Video Processing视频处理
  • 《量子雷达》第4章 量子雷达的检测与估计 预习2025.8.14
  • ATAM:基于场景的软件架构权衡分析法
  • 解剖HashMap的put <三> JDK1.8
  • Linux入门指南:基础开发工具---yum/apt
  • MacOS 系统计算机专业好用工具安装
  • P5967 [POI 2016] Korale 题解
  • Java 8 新特性介绍
  • 【Docker】安装kafka案例
  • 【深度学习】深度学习的四个核心步骤:从房价预测看机器学习本质
  • 《Leetcode》-面试题-hot100-动态规划
  • 【无标题】卷轴屏手机前瞻:三星/京东方柔性屏耐久性测试进展
  • 待办事项小程序开发
  • 【C#】PNG 和 JPG、JPEG的应用以及三种格式的区别?
  • 2025天府杯数学建模C题
  • RxJava Android 创建操作符实战:从数据源到Observable
  • Java应用架构实战指南:主流模式解析与Spring落地实践
  • Java面试宝典:JVM性能优化
  • 多任务并发:进程管理的核心奥秘
  • Java中Record的应用
  • Java使用Apache POI读取Excel文件
  • Swift 实战:用链表和哈希表写出高性能的贪吃蛇引擎(LeetCode 353)
  • C#WPF实战出真汁01--项目介绍
  • SpringBoot+Vue线上部署MySQL问题解决
  • 代码随想录Day50:图论(图论理论、深度搜索理论、所有可达路径、广度搜索理论)
  • Linux软件下载菜单脚本
  • 【数据分享】2014-2023年长江流域 (0.05度)5.5km分辨率的每小时日光诱导叶绿素荧光SIF数据
  • 【记录】Apache SeaTunnel 系统监控信息
  • 深度学习-卷积神经网络CNN-批量归一化 BatchNorm