元数据是存储系统的核心大脑,元数据性能对整个大数据平台的性能和扩展能力至关重要。尤其在处理海量文件的时候。在平台任务创建、运行和结束提交阶段,会存在大量的元数据 create,open,rename 和 delete 操作。因此,在进行文件系统选型时,元数据性能可谓是首当其冲需要考量的一个因素。

目前主流的大数据存储方案中, HDFS 是使用最为广泛的方案,已经过十几年的沉淀和积累;以 Amazon S3 为代表的对象存储是近年来云上大数据存储的热门方案;JuiceFS 是大数据圈的新秀,专为云上大数据打造,基于对象存储来进行大数据存储。因此,我们选取了这 3 个典型的存储方案 HDFS、Amazon S3 与 JuiceFS 社区版 进行元数据的性能测试。

测试方法

NNBench 是Hadoop 中有一个专门压测文件系统元数据性能的组件,本次测试就是使用它来进行的。

原版的 NNBench 有一些局限性,我们做了调整:

  1. 原版 NNBench 的单个测试任务是单线程的,资源利用率低,我们将它改成多线程,便于增加并发压力。
  2. 原版 NNBench 使用 hostname 作为路径名的一部分,没有考虑同一个主机里多个并发任务的冲突问题,会导致多个测试任务重复创建和删除文件,不太符合大数据工作负载的实际情况,我们改成使用 Map 的顺序号来生成路径名,避免的一个主机上多个测试任务的产生冲突。

测试环境

测试区域:us-east-1

测试软件:

  • emr-6.4.0,hadoop3.2.1,HA部署
  • master(3台):m5.xlarge, 4 vCore, 16 GiB
  • core(3台): m5.xlarge, 4 vCore, 16 GiB

JuiceFS 社区版本:v1.0.0

JuiceFS 元数据引擎:ElastiCache,6.2.6,cache.r5.large

性能表现

先来看看大家都熟悉的 HDFS 的性能表现:

此图描述的是 HDFS 每秒处理的请求数(TPS)随着并发数增长的曲线,随着并发的增加,TPS基本呈现线性增长。

  • S3 速度比 HDFS 慢了一个数量级,但它的各种操作的速度基本保持稳定,总的 TPS 随着并发数的增长而增长。
  • 但 S3 性能不太稳定,可以看到 Delete 请求在 100 并发下反而出现了下降的情况,猜测可能和 S3 本身的负载有关。

  • 整体趋势和 HDFS 类似,Open 会比其他操作快很多。
  • JuiceFS 的 TPS 也是在 20 个并发以内基本保持线性增长,之后增长放缓,在 80 个并发左右达到上限

性能对比

为了更直观的看出这三者的性能差异,我们直接把 HDFS、AWS S3 和 JuiceFS 放在一起比较:

  • JuiceFS 在所有元数据操作上均大幅领先于 S3。
  • JuiceFS 在 Create 和 Open 操作上领先于 HDFS。
  • 此次测试中使用的元数据引擎是ElastiCache , 各操作在 80 并发左右会达到性能瓶颈,表现比 HDFS 差。

总结

一般我们在看一个系统的性能时,主要关注它的操作时延(单个操作所消耗的时间)和吞吐量(满负载下的处理能力),我们把这两个指标再汇总一下:

上图是 20 个并发下的各操作的时延(未跑满负载),可以发现:

  1. S3 非常慢,尤其是 Rename 操作,因为它是通过 Copy + Delete 实现的。本文测试的还只是单个空文件的 Rename,而大数据场景常用的是对整个目录的 Rename,差距会更大。
  2. JuiceFS 的速度比 HDFS 更快。

上图是 100 个并发时的吞吐量对比,可以发现:

  1. S3 的吞吐量非常低,和其它两个产品有一到两个数量级的差距,意味着它需要使用更多的计算资源,产生更高的并发,才能获得同等的处理能力。
  2. JuiceFS 比 HDFS 的处理能力基本和 HDFS 持平,部分操作性能高于 HDFS。
  3. 随着并发的持续升高,HDFS 的性能仍然可以继续提升,但 JuiceFS 受制于元数据引擎本身的性能,到达瓶颈。如果需要高吞吐,可以使用 TiKV 作为元数据引擎。

JuiceFS 社区版可以适配各种成熟的元数据引擎,各种元数据引擎性能都有其相应的特点。比如 Redis 的低时延迟,MySQL 的可靠性,TiKV 的高吞吐。更多测试详见:元数据引擎性能对比测试 | JuiceFS Document Center

如有帮助的话欢迎关注我们项目 Juicedata/JuiceFS 哟! (0ᴗ0✿)

元数据性能大比拼:HDFS vs S3 vs JuiceFS的更多相关文章

  1. 元数据性能大比拼:HDFS vs OSS vs JuiceFS

    背景 存储是大数据的基石,存储系统的元数据又是它的核心大脑,元数据的性能对整个大数据平台的性能和扩展能力非常关键.本文选取了大数据平台中 3 个典型的存储方案来压测元数据的性能,来个大比拼. 其中 H ...

  2. 公共DNS性能大比拼

    ​ 今天中午,访问Gitee突然访问不进去,然后收到红薯通知:阿里云停止了 Gitee.com 的域名解析. ​ ​ 码云官方也随后给出解决办法 没有任何提示,没有任何提前通知,阿里云停止了 Gite ...

  3. EntityFramework、Dapper vs 草根框架性能大比拼,数据库访问哪家强?

    扯淡 当前市面上 ORM 很多,有跑车型的,如 Dapper,有中规中矩型的,如 Mybatis.Net,也有重量型的,如 EntityFramework 和 NHibernate,还有一些出自草根之 ...

  4. [转]ORACLE中Like与Instr模糊查询性能大比拼

    instr(title,'手册')>0  相当于  title like '%手册%' instr(title,'手册')=1  相当于  title like '手册%' instr(titl ...

  5. 10个国内外jQuery的CDN性能大比拼

    jQuery是前端开发最常见也是最流行的javascript库,如何去加载它才能使我们的项目性能更好以及问什么要用CDN?当用户访问自己的站点时从服务器加载文件,每个服务器同时只能下载2-4个文件,这 ...

  6. Linux文件系统Ext2,Ext3,Ext4性能大比拼

    Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4. Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只 ...

  7. 分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较

    Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成.不过,略有遗憾的是,据说在淘宝内部,dub ...

  8. 【转载】分布式RPC框架性能大比拼

    dubbo.motan.rpcx.gRPC.thrift的性能比较 Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 ...

  9. Java RPC 分布式框架性能大比拼,Dubbo排老几?

    来源:http://985.so/aXe2 Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成 ...

随机推荐

  1. 【java】学习路线8-cmd带命令编译包

    /*java类包(package)package XX.XX.XX;    包名命名规则:(以域名开头,都是小写)        com.remooo.xx        编译:javac -d . ...

  2. django路由匹配、反向解析、无名有名反向解析、路由分发、名称空间

    目录 django请求生命周期流程图 1.Django请求的生命周期的含义 2.Django请求的生命周期图解及流程 3.Django的请求生命周期(分布解析) 路由层 1.路由匹配 2.path转换 ...

  3. Rsync数据备份工具

    Rsync数据备份工具 1.Rsync基本概述 rsync是一款开源的备份工具,可以在不同主机之间进行同步(windows和Linux之间 Mac和 Linux Linux和Linux),可实现全量备 ...

  4. Can't pickle local object '_createenviron.<locals>.encodekey'报错解决

    关于selenium传参报错问题,用下面是报错信息: Traceback (most recent call last): File "D:/code/read_book/main.py&q ...

  5. 如何不编写 YAML 管理 Kubernetes 应用?

    Kubernetes 将自身边界内的事物都抽象为资源.其中的主要部分,是以 Deployment.StatefulSet 为代表的 workload 工作负载控制器,其他各类资源都围绕这些主要的资源工 ...

  6. [Python]-sklearn.model_selection模块-处理数据集

    拆分数据集train&test from sklearn.model_selection import train_test_split 可以按比例拆分数据集,分为train和test x_t ...

  7. 一文读懂,硬核 Apache DolphinScheduler3.0 源码解析

    ​ 点亮 ️ Star · 照亮开源之路 https://github.com/apache/dolphinscheduler 本文目录 1 DolphinScheduler的设计与策略 1.1 分布 ...

  8. G&GH02 储存库创建/同步

    注意事项与声明 平台: Windows 10 作者: JamesNULLiu 邮箱: jamesnulliu@outlook.com 博客: https://www.cnblogs.com/james ...

  9. Spring Boot 使用 Micrometer 集成 Prometheus 监控 Java 应用性能

    转载自:https://cloud.tencent.com/developer/article/1508319 文章目录1.Micrometer 介绍2.环境.软件准备3.Spring Boot 工程 ...

  10. Java SE 19 虚拟线程

    Java SE 19 虚拟线程 作者:Grey 原文地址: 博客园:Java SE 19 虚拟线程 CSDN:Java SE 19 虚拟线程 说明 虚拟线程(Virtual Threads)是在Pro ...