分享嘉宾:吴维伟 京东 架构工程师
编辑整理:陈妃君 深圳大学
出品社区:DataFun
导读:随着业务调整和集群资源整合需求,大数据系统中集群数据迁移复杂混乱。本文将以京东大数据平台为例,介绍京东近一年在数据分布式存储和分层存储上的探索和实践。
今天的介绍会从下面三点展开:
--
京东数据平台的整体架构主要由六部分组成,其中数据存储作为计算存储层的底层组件支撑着上游的计算引擎调度,以及更高层的工具层、服务层和应用层。在整个数据平台架构中,底层数据存储起到了基建的作用,是整个大数据平台的基础。
该数据存储系统的体量是数EB(1EB=1024PB),有数万个节点,三地多中心,每天的吞吐量是百PB级别。面对如此大的数据量,京东大数据平台采用了可视化管理,通过监控系统可快速方便地定位到集群问题,保证了集群的稳定性和服务的高可用。
--
在跨域存储架构应用之前,跨机房数据的同步主要通过业务方在不同机房之间进行Distcp实现,这种方式便会存在一些隐患问题:
基于以上,京东大数据平台在底层存储模块设计了一个跨域数据同步功能来解决历史数据存储同步带来的问题。选择在底层解决该问题不仅可以把控跨域数据的一致性,还提供了业务无感知的跨域数据同步与分享功能,以减少业务方重复工作,使存储系统具备跨域迁移和跨域容灾的能力。
该京东跨域存储架构的主要思路是通过“全量存储+全网拓扑”,实现跨机房故障域,最终实现大数据关键数据异地容灾及跨机房存储能力。
这个项目的主要挑战有:
该方案的主要优势有:
在实现跨域存储过程中,采用了两种数据流方式:
将数据先写到本地机房,再通过namenode(NN)自动进行跨域同步。该数据传输方式写入性能与现有未跨域场景一致,同步时延优于 distcp 方案。
建立pipeline数据管道,串联机房全部datanode(DN),一次将数据同步。该种传输方式针对数据一致性和可靠性要求高的业务。
拓扑与机房感知是解决“节点定位”这一跨域存储核心问题的关键模块。基于该模块可控制数据块分布和控制客户端流量。该模块主要从两个方面解决问题:
通过改造节点的拓扑方式,在拓扑管理中增加一个机房维度,同时选块逻辑要基于全网拓扑模块进行适配,以兼容多机房。
针对跨域版本的客户端,可通过在RPC头部携带机房信息,以便识别和检索;针对不支持跨域版本的客户端,可通过京东网络服务团队提供的ip映射到机房的服务, 实现客户端对应机房的检索和查询。
跨域标识模块是解决“数据跨机房存放”问题的关键设计,我们采用一个支持副本和EC的属性标签来描述数据的跨域属性。例如A:3,B:2,C:2,A,status,[period],[start,end],即表示在A机房有3个副本;B机房有2个副本;C机房有2个副本;A机房是跨域传输的主机房;[status]为标识存量数据内部流转的状态,包括“init、processing、done、invalid”四个状态;[period]用于跨域机房配置的时间戳,描述跨域数据的生命周期策略;[start,end]是另外一种数据共享生命周期配置方式,数据共享起止时间可通过绝对时间指定。
EC包含数据块和校验块两种类型, 相对于副本模式其跨域同步的支持更加复杂,需要支持在同机房内的数据重构和重构条件不具备时的跨域数据拷贝,以减少 EC 数据在跨域场景下的跨域同步流量。
加快整体跨域数据处理的速度,采用了三种方法:
针对跨域补块和流控,采用了三种方法保证了性能:
跨域补块的逻辑如右图所示。对于增量的数据,分为两个模块,同机房块的增量数据通过原有的RedundancyMonitor进行补块,对于跨域块会放置到 CrossRegionRedundancyMonitor模块进行补块。新增的更新器主要处理跨域配置和目录变更等跨域标签变更场景,经过跨域要求判断后加入到CrossRegionRedundancyMonitor模块进行补块处理。
跨域流控分为四个部分:
--
数据分层存储是为了解决原有框架所存在的问题:
针对以上问题,我们需要在分层存储上完成以下功能要求:实现数据自动整理,将冷热数据通过打标签进行分级处理——分为Hot、Warm、Cold。将不同硬件机型也进行分级处理——分为SSD、HDD、高密存储。将实时热数据与性能较好的DN相匹配,存储在SSD的硬件上,而冷数据则存储在高密存储硬件上,实现资源合理搭配。
针对上述数据分层存储的实现方案,主要有以下三个应用场景:
对热数据和核心数据提供加速手段,分时分层。例如在夜晚核心时间段,将其分为三个时间段,在对应时段将该时段的热数据搬移到高性能的存储机器上,这种处理方法可以在核心时段赋能更多的业务数据。
僵冷数据存储到高密存储机器上,优化单位存储成本。业务方通过配置集群维度的动态规则,完成冷热数据的自动分配,将冷数据存储到高密数据上,对于过度僵冷的数据会直接转化为EC(Erasure Coding),进一步降低存储成本。
支持按业务/目录维度划分逻辑子集群,实现数据隔离。针对新上线的机型,可采用该逻辑去摸索其性能;针对服务器扩容,可对新服务器增加写权重,提高存入数量。对于应急情况,可快速分离出故障机器,不影响整体的存量数据可靠性。
上面介绍了分层存储的逻辑和应用场景,下面将介绍分层存储的架构,整个框架主要是在NN内部实现的:
分层存储的核心设计,可以分为两个模块,一个是元数据上根据目录树进行标签管理,对数据进行冷热数据分配;另一块是节点拓扑树,采用虚拟多拓扑树在逻辑上将不同标签的节点进行区分,不同标签类型会有自己独立的拓扑树,实现更高效的选节点性能。虚拟拓扑树有两种更新方式,分别为根据节点权重进行异步更新和上下线数据进行同步更新。
增量数据和存量数据在处理流程上有以下差异:
--
A1:我们是基于分层功能来实现数据迁移,整体的处理逻辑是基于动态规则的设定,将数据分为冷、温、热三种类型。针对温数据采用类 Balancer 的实现方式,将数据搬移到高密存储上;针对冷数据我们是在 HDFS 内部实现一套简单的调度系统,将扫描发现的冷数据发送给DN,由 DN实现数据的搬移和原地转EC。
A2:计费功能也是我们下一步要重点投入的方向,整体的思路是通过计费功能指导业务方更合理高效的使用存储集群。目前我们将写操作和读操作进行分级,因为写操作对NN的压力比较大,因此写操作的计费权重会超过读操作计费权重,比例大概是 10 倍左右。在NN侧会将计费信息汇总到HDFS Router,做一个统一全集群的计费汇总统计。HDFS Router会定期将统计信息下发给NN,NN基于统计信息对用户访问进行分级处理,超过预设额度的业务方访问会被降级处理。
A3:在NameNode 内部新增模块时,会实时统计各模块对 NameNode 内部核心锁的占用时间,当新增模块的占锁时间超过设定阈值,程序会动态缩减模块的占锁时间,保证不影响NameNode对外的吞吐量。
今天的分享就到这里,谢谢大家。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。