JuiceFS-开源分布式文件系统入门(一篇就够了)(上)

本文涉及的产品
对象存储 OSS,20GB 3个月
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: JuiceFS-开源分布式文件系统入门(一篇就够了)(上)

01 引言

JuiceFS 是一款开源的分布式文件系统,它为云环境设计,兼容 POSIXHDFSS3 协议的分布式文件系统。

02 JuiceFS为何物?

JuiceFS 是一款面向云原生设计的高性能共享文件系统,在 Apache 2.0 开源协议下发布。

2.1 JuiceFS的特点

2.1.1 兼容性

JuiceFS提供完备的 POSIX 兼容性,可将几乎所有对象存储接入本地作为海量本地磁盘使用,亦可同时在跨平台、跨地区的不同主机上挂载读写

2.1.2 丰富的API

JuiceFS 提供了丰富的 API,适用于各种形式数据的管理、分析、归档、备份,可以在不修改代码的前提下无缝对接大数据、机器学习、人工智能等应用平台,为其提供海量、弹性、低价的高性能存储。

2.1.3 特性总结

特性 描述
POSIX 兼容 本地文件系统一样使用,无缝对接已有应用,无业务侵入性
HDFS 兼容 完整兼容 HDFS API,提供更强的元数据性能
S3 兼容 提供 S3 网关实现 S3 协议兼容的访问接口
云原生 通过 Kubernetes CSI驱动 轻松地在 Kubernetes 中使用 JuiceFS
分布式设计 同一文件系统可在上千台服务器同时挂载,高性能并发读写,共享数据
强一致性 确认的文件修改会在所有服务器上立即可见,保证强一致性
强悍性能 毫秒级延迟,近乎无限的吞吐量(取决于对象存储规模)
数据安全 支持传输中加密(encryption in transit)和静态加密(encryption at rest)
文件锁 支持 BSD 锁(flock)和 POSIX 锁(fcntl)
数据压缩 支持 LZ4Zstandard 压缩算法,节省存储空间

2.2 不同的使用场景举例

场景一:像本地磁盘一样使用

# 格式化JuiceFS文件系统
> juicefs format redis://your-redis-host:6379/1 myjfs
# 挂载JuiceFS文件系统
> juicefs mount -d redis://your-redis-host:6379/1 /mnt/juicefs
# 检查挂载点状态
> df -h /mnt/juicefs
Filesystem      Size   Used  Avail Capacity iused    ifree %iused  Mounted on
JuiceFS:myjfs  1.0Pi    0Bi  1.0Pi     0%       0 10485760    0%   /mnt/juicefs
#  从home目录挂载数据集到JuiceFS
> cp -r ~/dataset /mnt/juicefs/

场景二:应用开发简单,无需SDK

# Python 例子
path = '/mnt/juicefs/dataset/days.txt'
days_file = open(path, 'r')
days = days_file.read()
new_path = '/mnt/juicefs/new_days.txt'
new_days = open(new_path, 'w')
title = 'Days of the Week\n'
new_days.write(title)
print(title)
new_days.write(days)
print(days)
days_file.close()
new_days.close()

场景三:最简单,最适合K8S PV

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: web-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Pi
  storageClassName: juicefs-sc
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-run
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: linuxserver/nginx
          ports:
            - containerPort: 80
          volumeMounts:
            - mountPath: /config
              name: web-data
      volumes:
        - name: web-data
          persistentVolumeClaim:
            claimName: web-pvc
> kubectl get sc
NAME                 PROVISIONER                RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
juicefs-sc           csi.juicefs.com            Retain          Immediate           false                  88m

场景四:完全兼容 HDFS,使用方法也一样

# Shell
> hadoop fs -ls jfs://myjfs
# Hive
CREATE TABLE IF NOT EXISTS person
(
  name STRING,
  age INT
) LOCATION 'jfs://myjfs/tmp/person';

场景五:通过 S3 API 访问 JuiceFS

# 为JuiceFS文件系统开启S3网关
> juicefs gateway redis://localhost:6379/1 localhost:9000
# 通过AWS命令行连接访问JuiceFS文件系统
> aws --endpoint-url http://localhost:9000 s3 ls s3://myjfs

03 JuiceFS技术架构

首先贴出JuiceFS官网的技术架构图:

3.1 JuiceFS 的三个技术层

从上图,我们可以看到JuiceFS分为了三层,从上往下依次为:

分类 描述
Client(JuiceFS 客户端) 协调对象存储和元数据存储引擎,以及 POSIXHadoopKubernetes CSI DriverS3 Gateway 等文件系统接口的实现
Metada Engine(元数据引擎) 存储数据对应的元数据(metadata)包含文件名、文件大小、权限组、创建修改时间和目录结构,支持 RedisMySQLTiKV 等多种引擎;
Data Storage(数据存储) 存储数据本身,支持本地磁盘、公有云或私有云对象存储、HDFS 等介质;

这里主要讲下JuiceFSClient客户端层面文件系统接口的技术实现:

  • 通过 FUSE,JuiceFS 文件系统能够以 POSIX 兼容的方式挂载到服务器,将海量云端存储直接当做本地存储来使用;
  • 通过 Hadoop Java SDK,JuiceFS 文件系统能够直接替代 HDFS,为 Hadoop 提供低成本的海量存储;
  • 通过 Kubernetes CSI Driver,JuiceFS 文件系统能够直接为 Kubernetes 提供海量存储;
  • 通过 S3 Gateway,使用 S3 作为存储层的应用可直接接入,同时可使用 AWS CLI、s3cmd、MinIO client 等工具访问 JuiceFS 文件系统;
  • 通过 WebDAV Server,使用 HTTP 协议接入 JuiceFS 并直接操作其中的文件。

3.2 JuiceFS 如何存储文件

任何存入 JuiceFS 的文件都会被拆分成固定大小的 “Chunk”(默认的容量上限是 64 MiB)

  1. 每个 Chunk 由一个或多个 “Slice” 组成,Slice 的长度不固定,取决于文件写入的方式;
  2. 每个 Slice 又会被进一步拆分成固定大小的 “Block”(默认为 4 MiB);
  3. 最后,这些 Block 会被存储到对象存储;
  4. 同时,JuiceFS 会将每个文件以及它的 ChunksSlicesBlocks 等元数据信息存储在元数据引擎中。

文件最终会被拆分成 Chunks、Slices 和 Blocks 存储在对象存储,存储桶中只有一个 chunks 目录和一堆数字编号的目录和文件,如下图:

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
119 0
|
5月前
|
关系型数据库 分布式数据库 数据库
【PolarDB开源】PolarDB-X源码解读:分布式事务处理机制揭秘
【5月更文挑战第20天】PolarDB-X,PolarDB家族的一员,专注于大规模分布式事务处理,采用2PC协议保证ACID特性。源码解析揭示其通过预提交、一致性快照隔离和乐观锁优化事务性能,以及利用事务日志进行故障恢复。深入理解其事务处理机制对开发者掌握分布式数据库核心技术至关重要。随着开源社区的发展,更多优化方案将涌现,助力构建更强大的分布式数据库系统。
201 6
|
12天前
|
Dubbo Java 应用服务中间件
分布式-dubbo的入门
分布式-dubbo的入门
|
2月前
|
机器学习/深度学习 并行计算 PyTorch
PyTorch与DistributedDataParallel:分布式训练入门指南
【8月更文第27天】随着深度学习模型变得越来越复杂,单一GPU已经无法满足训练大规模模型的需求。分布式训练成为了加速模型训练的关键技术之一。PyTorch 提供了多种工具来支持分布式训练,其中 DistributedDataParallel (DDP) 是一个非常受欢迎且易用的选择。本文将详细介绍如何使用 PyTorch 的 DDP 模块来进行分布式训练,并通过一个简单的示例来演示其使用方法。
37 2
|
3月前
|
存储 关系型数据库 MySQL
深度评测:PolarDB-X 开源分布式数据库的优势与实践
本文对阿里云开源分布式数据库 PolarDB-X 进行了详细评测。PolarDB-X 以其高性能、强可用性和出色的扩展能力在云原生数据库市场中脱颖而出。文章首先介绍了 PolarDB-X 的核心产品优势,包括金融级高可靠性、海量数据处理能力和高效的混合负载处理能力。随后,分析了其分布式架构设计,包括计算节点、存储节点、元数据服务和日志节点的功能分工。评测还涵盖了在 Windows 平台通过 WSL 环境部署 PolarDB-X 的过程,强调了环境准备和工具安装的关键步骤。使用体验方面,PolarDB-X 在处理分布式事务和实时分析时表现稳定,但在网络问题和性能瓶颈上仍需优化。最后,提出了改进建
6791 2
|
3月前
|
分布式计算 API 对象存储
Ray是一个开源的分布式计算框架,用于构建和扩展分布式应用。它提供了简单的API,使得开发者可以轻松地编写并行和分布式代码,而无需担心底层的复杂性。
Ray是一个开源的分布式计算框架,用于构建和扩展分布式应用。它提供了简单的API,使得开发者可以轻松地编写并行和分布式代码,而无需担心底层的复杂性。
354 11
|
3月前
|
关系型数据库 分布式数据库 数据库
PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。
【7月更文挑战第3天】PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。通过数据分片和水平扩展支持微服务弹性,保证高可用性,且兼容MySQL协议,简化集成。示例展示了如何使用Spring Boot配置PolarDB,实现服务动态扩展。PolarDB缓解了微服务数据库挑战,加速了开发部署,为云原生应用奠定基础。
224 3
|
3月前
|
关系型数据库 分布式数据库 PolarDB
**PolarDB开源指南:构建分布式数据库集群**踏上PolarDB开源之旅,了解如何从零开始搭建分布式集群
【7月更文挑战第3天】**PolarDB开源指南:构建分布式数据库集群**踏上PolarDB开源之旅,了解如何从零开始搭建分布式集群。采用存储计算分离架构,适用于大规模OLTP和OLAP。先准备硬件和软件环境,包括Linux、Docker和Git。然后,克隆源码,构建Docker镜像,部署控制节点和计算节点。使用PDCli验证集群状态,开始探索PolarDB的高性能与高可用性。在实践中深化学习,贡献于数据库技术创新。记得在安全环境下测试。
168 1
|
4月前
|
存储 搜索推荐 Java
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
58 2
|
5月前
|
人工智能 监控 开发者
阿里云PAI发布DeepRec Extension,打造稳定高效的分布式训练,并宣布开源!
阿里云人工智能平台PAI正式发布自研的 DeepRec Extension(即 DeepRec 扩展),旨在以更低成本,更高效率进行稀疏模型的分布式训练。
下一篇
无影云桌面