HashData云数仓元数据服务设计及实现

在这里插入图片描述
元数据是数据库系统中描述对象的数据,相当于数据使用的“说明书”,是决定数据库性能的重要抓手。

在大数据时代,海量的数据规模和复杂的数据类型,意味着对元数据处理提出了更高的要求。

HashData云数仓作为一款面向多种数据分析场景的高性能分析型数据库,采用元数据、计算和存储三者分离的架构,能够更好地适应跨集群、跨中心以及跨云中心的数据访问。

在提供高性能数据仓库业务的同时,HashData拥有更好的资源配置能力,并且通过元数据服务的分离和共享,让所有的数据集群系统保证数据的一致性。
传统MPP数据库使用“痛点”
传统的Greenplum、Teradata等MPP 架构的数据库,存储、计算是紧耦合的,数据存储在本地系统,存储能力的扩展通过增加集群节点实现,这样会导致计算资源严重浪费,无法满足业务的发展。

在使用过程中,随着数据量的增长,传统MPP架构数据库每个集群的数据都保存在计算节点本地磁盘,集群之间的数据无法做到有效共享,形成“数据孤岛”现象。同时,大量数据拷贝操作,造成数据严重冗余。

当出现用户的计算需求大于单套节点的容量限制时,用户往往需要被迫去采用集群切割,然后再通过一些其他的技术进行同步。这样做一方面会增加流量负载,同时还会引起元数据的不一致,加剧“数据孤岛”现象。

传统数据库在进行动态扩容、缩容、升级、故障处理等操作时,需要把用户数据重新做一个resharding。但对分布式系统来说,元数据都是存储在本地的,所以任何一个节点要恢复或者扩容,都要拷贝一份元数据,会大幅增加停机时间。

此外,传统MPP 架构数据库,动辄几百台甚至上千台服务器的规模,系统运维工作量大。
在这里插入图片描述
HashData云数仓:基于共享存储的元数据服务
HashData 云数仓元数据设计初衷,是希望能够为用户提供统一的共享存储解决方案。

从整体架构来看,HashData元数据集群为计算集群提供管理服务,同时用户可以通过云管平台实现元数据集群操作。

依托对象存储服务,HashData 可以更加高效地在用户的核心的数据上面提供计算服务,能够有效提高MPP 架构集群的并发能力。

同时,相比传统MPP 架构,HashData 从物理层面直接实现资源隔离,可以更好地帮助用户把资源和应用类型进行互补。

为了做到在共享存储环境下,提供多套不同的计算资源的隔离,就需要提供统一的元数据的管理,这样可以方便不同的集群独立、准确、并发地去操作对象存储上的共享数据。

在这种情况下,HashData 云数仓对元数据进行了大量优化,包括存储服务、调度接入、云管平台等。

hashData元数据服务分成三个层次:一层是调度层,一层是无状态服务。还有一层是元数据持久层。
在这里插入图片描述
调度层主要解决两类问题。第一是帮助计算集群去找到元数据节点。调度层需要把元数据节点以及它的角色发布到ETCD ,然后计算集群通过订阅 ETCD 上这些角色位置的变更信息,它们可以自动地去找到更新的 catalog,为不同的角色提供了不同的服务。

计算集群在计算的应用层来通过服务发现找到服务对象,尽可能地避免所有的节点去访问同一个catalog。

调度层还具有服务负载均衡的功能。调度层在 catalog 上会同时就一个角色注册多个入口,又可以允许计算机去通过 catalog 推送给调度层的负载情况,避免某些 catalog 出现热点。

无状态服务层是一组能够互相通信,也会跟FDB ETCD 和计算集群通信的一组进程,这组进程主要作用就是回答计算集群的请求。

HashData的元数据服务通过全球可访问的分布式系统提供,负责数据持久化的对象存储通过RESTFUL接口提供数据访问能力,中间的计算层则实现了完全无状态化。

为避免出现“数据孤岛”和冗余,HashData采用共享存储架构,任何一个计算集群都可以去访问同一份数据,所有集群共享同一份元数据,彻底消除“数据孤岛”和冗余,确保数据的实时性和一致性。

由于采用云原生架构,HashData云数仓多个集群共享统一的元数据、统一的数据存储,集群间不竞争CPU、内存和IO资源,可以根据业务需求无限地创建集群。为了提高并发数量,只需要增加计算集群,来满足弹性、高并发的要求,代价显著降低。

同时,得益于存算分离的架构,HashData通过一致性哈希来避免数据重新逻辑分组,通过共享存储避免数据重新物理分布,可以实现集群的秒级自动扩缩容。整个过程中,包括master节点、segment节点在内的计算集群都是无状态的。

此外,HashData的计算集群没有存储任何的实体数据,所有的数据都是依托缓存系统来工作。

通过统一共享的元数据集群,HashData可以确保用户在管理数据资产的时候,元数据的 schema 和计算节点的状态是完全一致的。

除此之外,HashData的每个计算集群本质上又是完全相等的。从任何一个集群出发进行 SQL 查询或者数据计算,实际上都是完全等价的。在任何的时候,应用都可以把作业动态地调度到不同的集群上面,这样能够帮助用户安全、平滑实现应用在集群间的迁移。

HashData可以根据业务需求,动态地对数据仓库集群进行纵向伸缩和横向伸缩。同时,由于是完全托管的云服务,HashData数据仓库承担了所有的集群资源配置、数据库管理、持续监控、健康检查、错误恢复、高可用和扩缩容等纷繁复杂、极易出错的运维工作,让用户安心专注于业务分析上面。

目前,HashData已经在金融、电信、能源、交通、互联网等行业实现大规模商用。以某国有大型银行为例,HashData为超过20000节点提供数据分析服务,支持上百个业务场景。其中,元数据的节点每天处理约70 亿次请求。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
判断JSON数据是否有重复,可以按照以下步骤进行: 1. 读取JSON文件,并将JSON数据解析为一个对象数组。 2. 对于每个JSON对象,将其转换为字符串,并计算其哈希值(可以使用C#的SHA256Managed类),将哈希值存储到一个HashSet中。 3. 如果HashSet中已经存在该哈希值,则说明该JSON数据是重复的。 示例代码: ```csharp using Newtonsoft.Json; using System.Collections.Generic; using System.IO; using System.Security.Cryptography; using System.Text; public static bool HasDuplicateJson(string filePath) { HashSet<string> hashSet = new HashSet<string>(); using (StreamReader reader = new StreamReader(filePath)) { while (!reader.EndOfStream) { string line = reader.ReadLine(); object jsonObject = JsonConvert.DeserializeObject(line); string jsonString = JsonConvert.SerializeObject(jsonObject, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); byte[] jsonData = Encoding.UTF8.GetBytes(jsonString); byte[] hashData = new SHA256Managed().ComputeHash(jsonData); string hashString = Encoding.UTF8.GetString(hashData); if (hashSet.Contains(hashString)) { return true; } hashSet.Add(hashString); } } return false; } ``` 该函数接受一个文件路径作为输入,返回一个布尔值,表示文件中是否存在重复的JSON数据。函数内部遍历文件中的每一行JSON数据,并计算其哈希值,判断是否存在重复。函数可以根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值