10分钟了解Hadoop存算分离在DataSimba的应用 | StartDT Tech Lab 03

​写在前面

这是奇点云全新技术专栏「StartDT Tech Lab」的第3期。

在这里,我们聚焦数据技术,分享方法论与实战。一线的项目经历,丰富的实践经验,真实的总结体会…我们畅想未来大趋势,也关注日常小细节。

本篇由奇点云数据平台后端架构专家「纯粹」带来:

作者:纯粹

阅读时间:约10分钟

 

众所周知传统的Apache Hadoop的架构存储和计算是耦合在一起的,HDFS(Hadoop Distributed File System)作为其分布式文件系统也面临一些问题。如:存储空间或者计算资源不足时,两者只能同时扩容、扩容效率低、额外增加成本、灵活性差等。

 

本文会和大家回顾Hadoop的传统架构来分析上述问题,介绍Hadoop实现存算分离的方案,并分享我们DataSimba对于Hadoop存算分离的最佳实践。

 

Hadoop分布式文件系统

(HDFS)架构和问题

 

HDFS的架构(图源:Hadoop)

 

上图是Hadoop官方对于HDFS的架构图,我们重新回顾一下,一个HDFS集群由一个Namenode和一定数目的Datanode组成。Namenode是中心服务器,负责整个文件系统的namespace和客户端的访问,比如打开、关闭、重命名文件或目录,同时Namenode也负责数据块和具体Datanode节点的映射。

 

01

HDFS的设计目标

回顾完了HDFS的整体架构,我们来想一下HDFS的设计目标:

 

首先,建立错误监测和快速自动的恢复能力

HDFS常用来部署在低廉的(low-cost)硬件上,并且机器的硬件错误常态化,所以让HDFS具有错误检测和快速、自动的恢复能力,是最核心的架构目标。HDFS处理的关键在于数据访问的高吞吐量,但是POSIX标准有很多硬性约束,所以HDFS一些关键方面对POSIX的语义做了一些修改。

 

其次,“移动计算”

我觉得Hadoop对海量数据计算最巧妙的实现思想是“移动计算”的思想。在海量数据的情况下,Hadoop将计算逻辑移动到存储节点,因为请求计算和数据的距离越近就越高效。

 

02

HDFS的问题

HDFS作为优秀的分布式文件系统,目前来看还是存在一些问题,我总结为以下几点:

 

1. 计算存储耦合

上文介绍过HDFS采用移动计算的思想,计算的时候只需要将计算代码推送到存储节点上,即可在存储节点上完成数据本地化计算。所以Hadoop中的集群存储节点也是计算节点。

 

2. 扩容问题

正因为上文谈到的计算存储耦合问题,当存储空间或计算资源不足时,只能同时对两者进行扩容。如果用户的计算需求远远大于存储需求,此时扩容集群会造成存储的浪费,相反则是计算资源被浪费。集群节点增多,扩容成本增加,风险也增加了。

 

3. HDFS性能问题

HDFS NameNode的全局锁存在性能瓶颈。

 

4. HDFS成本问题

在HDFS文件系统中,典型文件大小一般都在G字节至T字节。由于HDFS的副本特性,一份文件至少会存储3份,这也会带来存储成本额外的提高。

 

针对上面一些问题,现在Hadoop采用存算分离架构的方案趋势越来越明显。

 

Hadoop 实现存算分离方案

 

方案一

Hadoop 兼容的文件系统

下图是Hadoop3.X 目前兼容的文件系统,支持AWS S3、腾讯云COS、阿里云OSS存储。可以看到用户在上传数据时候,需要调用对应云服务厂商的SDK进行数据的写入,下载文件也是一样的原理。 

图源:纯粹

 

为什么现在可以使用这种方式实现Hadoop的计算存储分离呢?


举一个例子,这是日常生活中遇到的经历:家里的带宽自从升级到100Mbps,从来不用保存电影,要看直接下载,基本几分钟就好了。这在几年前不可想象。

 

带宽的速度,特别是机房内的速度,已经从1000Mbps、2000Mbps提升到了10000Mbps,甚至100000Mbps。但是磁盘的速度基本没有太大的变化。带宽的提高带来了软件架构的变化。

 

方案二

云原生的Hadoop文件系统

虽然方案一可以实现计算存储分离,但是基本架构上还是存在问题:虽然带宽能增加,但如果Hadoop集群机房和对应的对象存储机房距离较远,网络抖动等原因会加大传输失败的几率;另外,比如判断一个目录需要多次的refs请求才能完成操作,多次请求会对性能造成影响。所以我们提出了方案二——DataSimba的文件缓存层

图源:纯粹

 

上图是目前DataSimba的存算分离架构。

 

DataSimba的文件缓存层是一个java开发的jar包,兼容Hadoop文件系统,按照Hadoop FileSystem API规范来实现。

 

DataSimba的文件缓存层主要实现了Hadoop FileSystem的list、delete、rename、mkdir等接口,其中SimbaInputStream和SimbaOutputStream主要实现了对文件读写优化相关的功能(预读、缓存读、异步写、批量写、文件压缩)。Simba文件缓冲层通过JNI(Java Native Interface)技术转换为本地SimbaFs.so的调用实现相关方法,完成文件的上传/下载操作,作为中间缓存层实现计算存储分离。

 

目前基于这个方案,已经帮助某知名的视频创作工具和服务公司实现AWS EMR到S3的存算分离。

 

压测情况
DataSimba的文件缓存层对“读”做了预读和缓存操作,对“写”的操作通过异步写和批量写的优化,让其性能足够优秀。

 

性能到底咋样?看压测:

我们在发行版本为cdh5的集群、hdfs版本为2.6的情况下做了测试,使用3台阿里云4核14G的ECS做压力测试,对象存储选择的是OSS,并且保证集群节点和OSS在同一机房。下面是关于create_write、open_read、rename、delete 等操作的压测结果。

可以看到DataSimba的文件缓存层的性能在open_read、create_write、rename是远好于HDFS的。

 

小结

本文回顾了传统Hadoop分布式文件系统的架构和问题,我们认为,Hadoop采用存算分离架构的方案是势不可挡的。因此我们介绍了实现Hadoop存算分离的方案,并分享了DataSimba文件缓存层存算分离实现原理和压测情况。真心希望对你所有帮助。

 

本期作者 | 纯粹

奇点云数据平台后端架构专家,奇点云数据中台云原生后端研发负责人,曾在多家互联网科技公司担任PaaS骨干。

世界地图矢量数据可以通过多种网站进行下载。以下是一些提供免费下载世界地图矢量数据的网站: 1. Open Street Map (https://www.openstreetmap.org/): 这个网站可以根据输入的经纬度或手动选定范围来导出目标区域的矢量图。导出的数据格式为osm格式,但只支持矩形范围的地图下载。 2. Geofabrik (http://download.geofabrik.de/): Geofabrik提供按洲际和国家快速下载全国范围的地图数据数据格式支持shape文件格式,包含多个独立图层,如道路、建筑、水域、交通、土地利用分类、自然景观等。数据每天更新一次。 3. bbbike (https://download.bbbike.org/osm/): bbbike提供全球主要的200多个城市的地图数据下载,也可以按照bbox进行下载。该网站还提供全球数据数据格式种类齐全,包括geojson、shp等。 4. GADM (https://gadm.org/index.html): GADM提供按国家或全球下载地图数据的服务。该网站提供多种格式的数据下载。 5. L7 AntV (https://l7.antv.antgroup.com/custom/tools/worldmap): L7 AntV是一个提供标准世界地图矢量数据免费下载的网站。支持多种数据格式下载,包括GeoJSON、KML、JSON、TopJSON、CSV和高清SVG格式等。可以下载中国省、市、县的矢量边界和世界各个国家的矢量边界数据。 以上这些网站都提供了世界地图矢量数据免费下载服务,你可以根据自己的需求选择合适的网站进行下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值