简介: Apache Hadoop FileSystem (HDFS) 是被广为使用的大数据存储方案,其核心元数据服务 NameNode 将全部元数据存放在内存中,因此所能承载的元数据规模受限于内存,单个实例所能支撑的文件个数大约 4亿。JindoFS块模式是阿里云基于 OSS 海量存储自研的一个存储优化系统,提供了高效的数据读写加速能力和元数据优化能力。JindoFS 实际表现如何,我们在 10亿文件数规模下做了压测,验证 JindoFS 在达到这个规模的时候是否还可以保持稳定的性能。

主要介绍


Apache Hadoop FileSystem (HDFS) 是被广为使用的大数据存储方案,其核心元数据服务 NameNode 将全部元数据存放在内存中,因此所能承载的元数据规模受限于内存,单个实例所能支撑的文件个数大约 4亿。JindoFS块模式是阿里云基于 OSS 海量存储自研的一个存储优化系统,提供了高效的数据读写加速能力和元数据优化能力。在设计上避免了 NameNode 上的内存限制,与HDFS不同的一点是,JindoFS元数据服务采用RocksDB作为底层元数据存储,RocksDB可以存储在大容量本地高速磁盘,解决了内存容量瓶颈问题。借助于内存缓存,将10%~40%的热文件元数据存放于内存缓存,从而保持稳定的优秀的读写性能。借助于Raft机制,JindoFS元数据服务可以组成3个主备实例,实现服务高可用。JindoFS 实际表现如何,我们在 10亿文件数规模下做了压测,验证 JindoFS 在达到这个规模的时候是否还可以保持稳定的性能。同时在一些关键的元数据操作上,我们也跟 HDFS 做了个测试对比。

JindoFS 10亿文件数测试


HDFS NameNode 单个实例所能支撑的文件个数大约 4亿,主要原因是受限于内存大小。除此之外,由于文件数增加,需要处理的DataNode上报块也增加,造成了性能上的巨大抖动。大量文件信息保存在一个很大的FsImage文件,用于下次启动时加载,而很大的FsImage文件使得 NameNode 启动需要花费10分钟以上的时间。

JindoFS 解决了以上系列问题,它使用 RocksDB 存储元数据,相比于 NameNode 可以存储更大规模的文件数,不受限于内存。另外不需要Worker节点上报块信息,没有性能抖动的问题。JindoFS 元数据服务可以在1s内完成启动,毫秒内完成主备节点切换。所以本次测试,我们分别测试了 JindoFS 从1亿文件数增长到10亿文件数,从而测试其是否可以保持稳定的性能。

数据集(共4组)

为了测试在不同的元数据规模下,JIndoFS元数据服务的性能。我们准备4组数据。分别是:初始状态(0文件数)、1亿文件数、5亿文件数、10亿文件数。我们使用一份真实的经过用户脱敏的HDFS FsImage文件,将其还原到JindoFS元数据服务当中。文件大小按1:1相应地创建block信息一起存入JindoFS元数据。最终生成的数据集如下。

元数据磁盘空间占用

另外,目录层级主要分布在5到7级目录居多。数据集的文件大小分布、目录层级分布一定程度上比较接近生产环境的情况。

NNBench测试

NNBench全称NameNode Benchmark,是HDFS官方自带的用于测试NameNode性能的工具。由于它使用的是标准的FileSystem接口,因此我们可以使用它来测试JindoFS服务端的性能。NNBench的执行参数如下:

测试写性能

-operation create_write -maps 200 -numberOfFiles 5000 -bytesToWrite 512

测试读性能

-operation open_read -maps 200 -numberOfFiles 5000 -bytesToWrite 512

启动200个Map Task,每个Task写(读)5000个文件,共计100万个文件。(受测试集群规模限制,实际同时执行Map个数为128个)

测试结果

NNBench的结果很好地反馈了随着元数据规模增长,元数据服务的性能变化曲线。通过结果我们可以分析得出:

  1. 当达到10亿文件数时,写入TPS受到略微影响,TPS 下降为原先的88%。
  2. 当达到5亿文件数时,读TPS受到略微影响,TPS 下降为原先的94%。而10亿文件数时,读TPS保持稳定,跟5亿文件数时基本持平。

TPC-DS测试

使用的是官方TPC-DS数据集,5TB数据量,使用的是ORC格式,Spark作为执行引擎进行测试。

测试成绩如下,时间单位秒:

99个查询总耗时对比:

通过观察发现,去掉误差影响,随着元数据规模从0增加到10亿文件数,TPC-DS成绩基本不受影响。

ls -R/count测试

上述NNBench工具主要测试高并发下元数据服务单点写入、单点查询的性能。然而,文件列表导出(ls -R)操作、文件大小统计(du/count)操作也是用户使用频率较高的操作,这些命令的执行时间,反应了元数据服务遍历操作的执行效率。

我们使用两个样本数据进行测试:

  1. 对一个表(半年数据,154个分区,270万个文件)执行ls -R操作,统计执行时间,使用以下命令

time hadoop fs -ls -R jfs://test/warehouse/xxx.db/tbl_xxx_daily_xxx > /dev/null

  1. 对一个数据库(50万个目录,1800万个文件)执行count操作,统计执行时间,使用以下命令

time hadoop fs -count jfs://test/warehouse/xxx.db

测试结果发现,对于遍历(ls -R/count)相同数量的文件(目录),元数据服务的性能保持稳定,不会随着元数据总量的增长有所变化。

对于10亿级别的文件数,磁盘占用有近100GB,JindoFS元数据服务只会缓存部分热文件元数据,那么元数据文件的page cache是否会对性能有所影响?我们为此做了测试。

热启动:直接重启元数据服务服务,此时系统存在page cahe。

冷启动:我们使用命令echo 3 > /proc/sys/vm/drop_caches清空缓存,并重启元数据服务。

测试结果如下(使用10亿文件数据集)

通过观察发现,冷启动情况下,这些操作耗时增加了约0.2秒,只受到细微的影响。

与HDFS横向对比测试


通过上面的测试我们得知 JindoFS 在10亿文件数下,依然保持了稳定的性能。另外我们补充测试了 JindoFS 跟 HDFS 的对比。由于 HDFS 存储10亿规模文件数需要极高规格的机器,因此本轮测试我们主要测试1亿文件数场景,我们通过横向对比list、du、count等常用操作,对比两者的性能差异。

样本说明

抽取 a, b, c, d 共 4 组目录,

目录 a:Hive warehouse目录包含 31.7万目录,1250万文件;

目录 b:某 database 目录包含 1万2目录,32万文件;

目录 c:某 table 目录包含 91个目录,7.7万文件;

目录 d:spark 结果存放目录包含4.2万目录,7.1万文件;

测试结果(用时更短,性能更好)

单层 list 操作

对单层目录进行展开并输出,采样方法: time hadoop dfs -ls [DIR] > /dev/null

递归 list 操作

对目录进行逐层展开并输出,采样方法: time hadoop dfs -ls -R [DIR] > /dev/null

du 操作

对目录占用的存储空间进行计算,采样方法: time hadoop dfs -du [DIR] > /dev/null

count 操作

对目录的文件(夹)数量、容量进行计算,采样方法: time hadoop dfs -count [DIR] > /dev/null

结果分析

通过上述测试结果,可以明显发现 JindoFS 在list、du、count等常用操作上速度明显快于 HDFS。分析原因,HDFS NameNode 内存中使用了全局的读写锁,所以对于查询操作,尤其是对目录的递归查询操作都需要拿读锁。拿锁之后使用了单线程串行的方式做目录递归操作,速度较慢。拿锁时间长继而又影响了其它rpc请求的执行。JindoFS 从设计上解决了这些问题。它对目录的递归操作使用了多线程并发加速,因此在对目录树的递归操作上速度更快。同时使用了不同的目录树存储结构,配合细粒度锁,从而减少了多个请求之间的影响。

总结


JindoFS 块模式可以轻松地存储10亿+文件数,并且提供高性能的读写请求处理能力。跟 HDFS NameNode 相比占用内存更小、性能更好、运维更加简单。我们可以利用 JindoFS 作为存储引擎,将底层数据存放在对象存储(比如OSS)上,并且利用 JindoFS 的本地缓存加速能力,组成一个云上稳定、可靠、高性能的大数据存储方案,给上层计算分析引擎提供强大有力的支撑。

作者:苏昆辉,花名抚月,阿里巴巴计算平台事业部 EMR 技术专家, Apache HDFS committer,目前从事开源大数据存储和优化方面的工作。

本文为阿里云原创内容,未经允许不得转载

作者:苏昆辉,花名抚月,阿里巴巴计算平台事业部 EMR 技术专家, Apache HDFS committer,目前从事开源大数据存储和优化方面的工作。

原文链接

本文为阿里云原创内容,未经允许不得转载

10亿+文件数压测,阿里云JindoFS轻松应对相关推荐

  1. 钉钉猛增40倍流量压力,阿里云DBA如何应对?

    简介:钉钉猛增40倍流量压力 阿里云DBA如何应对 1.背景 由于受新型冠状病毒感染的肺炎疫情影响,钉钉流量从春节后开始出现了飞跃性增长.此次疫情流量主要来源于钉钉远程办公和在线教育功能,从字面来看, ...

  2. 胡晓明:阿里云助力企业应对互联网挑战

    本文讲的是胡晓明:阿里云助力企业应对互联网挑战[IT168 云计算]今天,阿里云栖厦门峰会在美丽鹭城召开,阿里云集中展示了其解决企业级客户痛点的关键能力:全面的云计算.企业级互联网中间件.大数据平台数 ...

  3. 云灾备是更好的“企业保险”,百亿灾备市场迎来阿里云

    对于企业来说,数据灾备就相当于买保险.而"保险"二字,相当于一个心理保障,对于灾难的心理恐慌有多高,购买保险的意愿和出价就越高.中国企业对于灾备的建设处于方兴未艾阶段,特别是随着数 ...

  4. 重生之我测阿里云U1实例(通用算力型实例)

    官方福利!!!!大厂羊毛你确定不薅??? 参与ECSU实例评测,申请免费体验机会:https://developer.aliyun.com/mission/review/ecsu 参与ECSU实例评测 ...

  5. linux rmp命令安装包在哪里_一文带你了解阿里云Linux服务器的基本操作

    1.开启安全组 1.1 开启安全组 1.2 获取公网IP,更改密码(第一次需要重启) 2.使用面板搭建环境 2.1 搭建环境 1.宝塔: 地址:https://www.bt.cn/download/l ...

  6. 千亿级市场赛道,阿里云视频云拿下 “三连冠”

    简介:阿里云视频云市场份额 全球权威咨询机构 IDC 发布 <中国视频云市场跟踪(2020 下半年)>报告: 阿里云连续三年 稳居视频云整体市场份额第一 整体市场份额占比达 26.21% ...

  7. 亿佰特串口服务器接入阿里云MQTT协议的软件配置教程

    在之前的文章中我们了解到虚拟串口软件作为TCP客户端来结合串口服务器使用,这一期我们来看一下串口服务器怎样接入阿里云物模型. 步骤详尽,一文读懂. 1.阿里云MQTT环境配置 ③点击"创建产 ...

  8. 企业双11业绩增长156% 、成交额突破151亿元...... 这背后是阿里云数据中台的场景赋能

    红星美凯龙天猫数字化卖场累计成交金额突破151.52亿元:杜蕾斯全网销售额突破1.7亿元,天猫官方旗舰店销售额同比增长105%:滴露全网销售额突破1.8亿元,天猫官方旗舰店销售额同比增长156%:波司 ...

  9. 加码 2000 亿新基建还不够,阿里云再放话:今年招 5000 人!

    作者 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 在 2019 年双 11 里,创下天猫全天成交额 2684 亿记录让人记忆犹深,彼时阿里从技术上经历"全面上云"的大 ...

最新文章

  1. 平时工作事项太多,有哪些好用的事项管理软件?
  2. android获取wifi连接状态,获取android设备wifi连接状态
  3. Careercup - Google面试题 - 4699414551592960
  4. codefores741A Arpa's loud Owf and Mehrdad's evil plan(图找环)
  5. DevExperience(1710)
  6. 根据年月打印出该月有多少天
  7. Web项目下的WebRoot和WebContent
  8. 让.net 2.0支持并行计算
  9. WPF中查找指定类型的父控件
  10. Openlayer通过wms请求geoserver加载慢
  11. python通过类名创建对象_如何在Python中为自动创建的类对象分配名称
  12. web前端学习(总结/心得)
  13. 控制系统--系统结构图
  14. 基于MIMO的无线携能通信系统优化问题的基础知识和研究方向
  15. 莫比乌斯反演与整除分块
  16. 中止执行后超过2年_申请执行超过2年时效,法院还处理吗?
  17. Java应用在docker环境配置容器健康检查,如何保证消息队列的高可用
  18. 跟我做WinForm开发(2)-后台逻辑操作
  19. python hank_python学习路线
  20. arduino有关软件卸载,库的卸载问题

热门文章

  1. git如何拉去开发的 最新代码_linux脚本拉取git代码并发布tomcat应用
  2. u盘启动蓝屏 索尼vaio_U盘重装系统出现蓝屏?不要急,这四个手段轻松帮你解决!...
  3. sql移动加权计算利润_计算机视觉中的半监督学习
  4. Java的文件流操作
  5. Java开发中数据类型之间的转换
  6. python合并视频和音频_真没想到,Python 还能实现 5 毛特效
  7. 【LeetCode笔记】27. 移除元素(Java、原地)
  8. python源码包安装_源码包安装python2.7.6和ipython1.2.1
  9. python上下键不能用_python退格、方向键无法正常使用解决方法
  10. java8源代码_java8 源码解读