JindoFS 存储策略和读写优化

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 本次分享主要介绍数据读写在计算存储分离的场景下所面临的常见问题以及相关的优化手段,并结合JindoFS应用场景介绍对数据缓存加速的相关技术和策略。

编辑:李治鹏,来自浪潮信息,对象存储开发工程师


计算平台事业部 E-MapReduce团队探索并开发了JindoFS 框架,用于加速存储计算分离场景下数据读写性能。来自阿里云智能团队的姚舜扬老师带来JindoFS存储策略和读写优化的详细介绍。本文整理自视频https://www.slidestalk.com/AliSpark/JindoFS89850?video

本次分享主要分为四部分:

  1. 介绍数据缓存场景,做数据缓存的背景与动机
  2. 介绍数据读写策略原理与优化
  3. 缓存数据管理
  4. 最佳实践与总结

数据缓存场景

在传统的大数据分析场中,HDFS应该是一个事实上的存储标准, HDFS是典型的把计算资源与存储资源部署在一套集群中,即计算存储相互融合的架构如下图左边所示(带来集群计算与存储能力不能不对称扩展问题)。随着这几年数据上云的趋势与发展,计算与存储分离的架构在大数据分析场景中逐渐显现出来,越来越多的客户选择这样的架构去部署他们的集群。它和与传统基于HDFS系统架构的区别是它的计算资源与存储资源是物理隔离的,计算集群与后端的存储集群通过网络进行连接,如下图右边所示。计算集群的大量数据读写操作通过大量网络请求与存储集群进行交互。在这种场景下网络吞吐往往成为整个作业执行过程中的一个性能瓶颈因素。
image

所以在这种架构下,非常有必要在计算侧(计算集群中)对后端存储集群做一个缓存层,利用缓存层对数据的缓存,减少计算集群对存储后端的网络访问,来非常明显的消除网络吞吐带来的瓶颈。

JindoFS加速缓存

JindoFS就是在计算存储分离场景中,发挥着在计算端对存储端数据缓存加速作用,其架构与在系统中的位置如下图所示:
image

首先JindoFS由以下三个部分组成:

  1. JindoFS SDK客户端:所有上层计算引擎通过JindoFS SDK提供的客户端访问JindoFS文件系统,从而实现对后端存储实现缓存加速
  2. Namespace Service:JindoFS 元数据管理以及 Storage 服务的管理
  3. Storage Service:用户数据的管理包含本地数据的管理和OSS上数据的管理

JindoFS是云原生的文件系统,可以提供本地存储的性能以及OSS的超大容量,支持后端多样存储:

  • 云上数据湖场景,支持使用对象存储存储作为数据湖的后端
  • 加速远端HDFS(comming soon)
  • 跨区部署HDFS
  • 混合云场景下线上计算集群访问线下HDFS集群等。

数据读写策略及优化

写策略

JindoFS数据写策略分为两种,如下图所示:
image

  1. 写的过程中客户端将数据写到对应存储服务的缓存块中,Storage Service通过多线程并发地把缓存数据块上传到后端存储中。
  2. 透传的方式,直接通过JindoFS SDK透传的方式直接上传后端存储中,SDK在里面做了很多性能相关的优化。这种方式适用数据生产者环境中,只负责产生数据,没有后继的计算读需求。

读策略

读策略是JindoFS的重重核心,通过缓存的方式,在本地集群基于 JindoFS 的存储能力构建了一个分布式缓存服务,远端的数据可以保存在本地集群,使远端数据变成“本地化”,从而加速多次读取数据请求,用到尽量最快的方式或路径读取缓存中的数据数,达到最优的读取性能。基于这个原则,数据的读取策略如下:

  1. 首先优先从本地的节点上读取缓存数据块,例如:Block1、Block2。
  2. 如果本地节点缓存中不存在,客户端向Namespace服务请求缓存数据块的位置,例如要读取的数据Block3在Node2,从Node2上把Block3读取出来。
  3. 如果Node中不存在,则从远端OSS存储集群中将数据读取过来,同时将数据加入到本地Storage Service缓存中,加速下一次读取该数据。
  4. 在以上基本策略的基础上,JindoFS提供了支持动态多备份的策略,通过配置相关参数开启后,达到从其他Node上读取的数据同时,在缓存中达到备份效果,从而进一步速加高热度的数据块的读取访问。
    image

Cache Locality

类似于HDFS的data locality,所谓的 Cache Locality就是计算层优先把task推送到数据块所在的节点上进行执行。基于这样的策略,task优先读取本地缓存的数据的方式,是读取数据效率最高的方式,从而达到最优的数据读取性能。

由于JindoFS Namespace维护了所有缓存数据块的位置信息,通过Namespace提供相关的API接口,将数据块的位置信息提供给计算层,然后计算层就可以把task推送到到缓存数据块所在的节点上,这样可以在概率上大部分数据读取本地缓存数据,小部分数据通过网络获取。基于Cache Locality保证大部分数据读取本地,从而保证计算作业上最优的数据读取性能,结果如下图所示:

image

JindoFS的使用

基本的使用模式:

  1. Block模式:FindoFS 负责的元数据管理,OSS纯粹的作为后端存储数据块。
  2. cache模式,对于用户是透明无感知的

2.1. 不开启缓存,集群规模比较小,不需要缓存。

2.2. 开启缓存,通过本地缓存块解决OSS带宽不足的问题。(通过配置项jfs.cache.data-cache.enable来控制是否开启,0关闭,1开启)
image

缓存数据管理

JindoFS作为缓存系统,就是要利用本地有限的缓存资源来缓存几乎空间无限的OSS后端,所以缓存数据管理的主要功能如下:

  1. 本地缓存数据块管理
  2. 本地数据块的生命周期维护

在Storage Service中实现了数据访问信息的管理,即所有的读写都会向AccessManager进行注册,同时提供了storage.watermark.high.ratio、storage.watermark.low.ratio配置项管理缓存数据。当地磁盘中缓存的使用容量达到storage.watermark.high.ratio警戒水位时 AccessManager就会自动触发清理机制,把本地磁盘中的一些冷数据清理掉,直到storage.watermark.low.ratio水位,腾出磁盘空间给热数据。

缓存数据块自动清理

  • 目前提供基于 LRU(Least Recently Used) 淘汰策略的自动淘汰清理冷数据块。
  • 异步冷数据清理,不影响读写。

如下图所示:

image

显示指定缓存

同时提供了指定缓存(Comming soon)
通过cache/uncache指令,显式cache后端目录或文件,或释放冷数据

image

最佳实践

怎样配置集群

  • 尽量使用较长驻的节点来做缓存
  • 缓存节点的磁盘
  • 缓存节点的网络带宽

配置项为

jfs.storage.server.cache-mode:CACHE/NOCACHE

Datalocality 相关配置

  • spark.locality.wait.rack3s-> 0
  • spark.locality.wait.node3s -> 0

image

参考文献

  1. 关于云原生分布式计算和存储引擎JindoFS,看这一篇就够了
  2. 在线视频

image.png

相关实践学习
基于EMR Serverless StarRocks一键玩转世界杯
基于StarRocks构建极速统一OLAP平台
快速掌握阿里云 E-MapReduce
E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 本课程主要介绍阿里云 E-MapReduce 的使用方法。
相关文章
|
4月前
|
存储 安全 API
阿里云EMR数据湖文件系统问题之JindoFS元数据查询和修改请求的问题如何解决
阿里云EMR数据湖文件系统问题之JindoFS元数据查询和修改请求的问题如何解决
|
4月前
|
安全 对象存储
阿里云EMR数据湖文件系统问题之JindoFSOSS的单一prefix热点的问题如何解决
阿里云EMR数据湖文件系统问题之JindoFSOSS的单一prefix热点的问题如何解决
|
4月前
|
存储 缓存 算法
优化 ChunkServer 的存储性能
【8月更文第30天】在分布式文件系统中,ChunkServer 是负责存储数据块的关键组件。为了提高ChunkServer的存储性能,可以通过多种技术手段进行优化,如缓存、压缩、并行处理等。本文将详细讨论这些技术的应用,并提供具体的代码示例。
52 0
|
4月前
|
存储 运维 对象存储
阿里云EMR数据湖文件系统问题之JindoFS坏盘和坏节点的问题如何解决
阿里云EMR数据湖文件系统问题之JindoFS坏盘和坏节点的问题如何解决
|
7月前
|
存储 缓存 Java
揭秘分布式文件系统大规模元数据管理机制——以Alluxio文件系统为例
揭秘分布式文件系统大规模元数据管理机制——以Alluxio文件系统为例
|
7月前
|
存储 分布式计算 Hadoop
[hadoop3.x]HDFS存储策略和冷热温三阶段数据存储(六)概述
[hadoop3.x]HDFS存储策略和冷热温三阶段数据存储(六)概述
135 0
|
存储 Java Shell
数据存储与访问——文件存储读写
本节给大家介绍的是Android数据存储与访问方式中的一个——文件存储与读写,当然除了这种方式外,我们可以存到SharedPreference,数据库,或者Application中。
|
存储 对象存储
JindoFS Block模式
JindoFS Block模式
132 0
|
SQL 存储 缓存
数据湖实操讲解【JindoFS 缓存加速】第十三讲:Presto 访问 OSS 透明缓存加速
数据湖 JindoFS+OSS 实操干货 36讲 每周二16点准时直播! 扫文章底部二维码入钉群,线上准时观看~ Github链接: https://github.com/aliyun/alibabacloud-jindofs
数据湖实操讲解【JindoFS 缓存加速】第十三讲:Presto 访问 OSS 透明缓存加速
|
存储 缓存 分布式计算
数据湖实操讲解【JindoFS 缓存加速】第十四讲:指定表和分区来预先缓存,查询分析更高效
数据湖 JindoFS+OSS 实操干货 36讲 每周二16点准时直播! 扫文章底部二维码入钉群,线上准时观看~ Github链接: https://github.com/aliyun/alibabacloud-jindofs
数据湖实操讲解【JindoFS 缓存加速】第十四讲:指定表和分区来预先缓存,查询分析更高效