打破 HDFS 速度障碍——对象存储的首创
很少有人会认为Hadoop HDFS处于下降状态。实际上,Hadoop生态系统的HDFS部分不仅仅是下降-它是自由下落。在其诞生之初,它起着高吞吐量,容错的分布式文件系统的作用。秘密之处在于数据的局部性。
通过将计算和数据同时放置在同一节点上,HDFS克服了网络对数据访问缓慢的限制。但是,这时的含义是众所周知的。通过共置数据并进行计算,对于添加的每个存储节点,必须添加一个计算节点。鉴于数据增长迅速超过了计算增长的需求,导致了巨大的失衡。计算节点处于空闲状态。多个分析公司报告的客户在大型实例中的CPU利用率为一位数。
HDFS的限制和复制方案进一步加剧了这种情况。Hadoop供应商将每个数据节点的容量限制为最大100 TB,并且仅支持4 TB或8 TB容量的驱动器。例如,为了存储10 PB的数据,需要30 PB的物理存储(3倍复制)。这至少需要300个存储节点和300个计算节点。
不用说,这是非常低效的。
解决此问题的方法是分解存储和计算,以便可以独立扩展它们。对象存储使用密度更高的存储服务器,例如Cisco UCS S3260存储服务器或Seagate Exos AP 4U100。这些服务器每台服务器以及100 GbE网卡可以容纳超过PB的可用容量。另一方面,计算节点针对MEM和GPU密集型工作负载进行了优化。这种架构非常适合云原生基础架构,在该基础架构中,软件堆栈和数据管道可通过Kubernetes进行弹性管理。
尽管云原生基础架构具有更高的可扩展性和易于管理性,但它只是故事的一部分-就像成本只是故事的一部分一样。另一部分是性能。
HDFS得以幸存的原因之一是竞争性架构无法大规模提供其性能。
那不再是真的。现代的云原生对象存储打破了人们对性能方面的认识。这篇文章通过使用最可靠的Hadoop基准(Terasort,Sort和Wordcount)比较Hadoop HDFS和MinIO的性能来演示。结果表明,对象存储在性能方面可与HDFS媲美-并为分解的Hadoop架构提供了明确的案例。

使此比较有趣且有意义的原因在于MinIO和HDFS都在其本机环境中运行(分别分类和聚合)。
MinIO基准测试是在具有本地硬盘驱动器和25 GbE网络的AWS裸机存储优化实例(h1.16xlarge)上执行的。计算作业在通过25GbE网络连接到存储的计算优化实例(c5d.18xlarge)上运行。


MinIO的分类存储和计算架构
HDFS基准测试是在具有本地硬盘驱动器和25 GbE网络的AWS裸机实例(h1.16xlarge)上执行的。HDFS上的MapReduce具有数据局部性和2倍内存量(2.4 TB)的优势。


Hadoop HDFS的共置存储和计算架构
每个版本的软件版本如下:

HDFS实例需要进行大量调整-有关详细信息,请参见完整的基准测试文件。
由于不需要重命名操作,因此详细讨论了S3A提交程序的使用以及对Netflix目录过渡提交程序和分区过渡提交程序的评估 。该魔术提交者也进行了评估。
发现Directory登台提交程序是三个中最快的提交程序,并且在基准测试中使用了它。
基准测试分为两个阶段:数据生成和基准测试。
在数据生成阶段,生成了适当基准的数据。即使此步骤不是关键性的性能,仍需对其进行评估以评估MinIO和HDFS之间的差异。

请注意,为Sort基准生成的数据可用于Wordcount,反之亦然。
对于Terasort,HDFS生成步骤的执行速度比MinIO快2.1倍。对于排序和字数统计,HDFS生成步骤的执行速度比MinIO快1.9倍。
在生成阶段,S3暂存提交者处于不利地位,因为这些提交者将数据暂存到RAM或磁盘中,然后上传到MinIO。对于HDFS和S3A Magic提交者,暂存惩罚不存在。
尽管在生成阶段存在劣势,其他基准测试还是强烈倾向于MinIO的分类方法。


这些结果在许多方面都是重要的。
首先,这远远超出了通常归因于对象存储的性能。这个行业的定义是廉价和深度的归档和备份存储,并带有Glacier之类的品牌名称。闻所未闻的比Hadoop性能快。
其次,这完全改变了大规模高级分析的经济性。Hadoop的TCO挑战众所周知,但是使用MinIO时,价格/性能曲线完全不同。成本成分是Hadoop的一小部分,人员成本是Hadoop的一小部分,复杂性是Hadoop的一小部分,而性能则是倍数。对于大多数企业而言,接近性能就足以使他们迁移到分解的体系结构上-这远远不止这些。
第三,现代对象存储很现代。它具有现代API(Amazon S3),专为拥有容器和编排以及同类最佳的微服务的世界而设计。微服务,Kubernetes和容器这个世界是一个充满活力且不断发展的生态系统,与不断缩小的Hadoop生态系统相去甚远。对于那些正在使用云计算的人来说,这意味着未来和创新。
应当注意,这也为对象存储空间中的旧式设备供应商画了一条线。云原生技术不在他们的DNA中。他们被困在低速档。
那么,什么使MinIO更快呢?有五个主要元素:
我们只提供对象。我们从头开始构建平台,以解决该问题并使其比其他任何人都做得更好。我们没有将对象附加到文件或块体系结构上。多层会导致复杂性。复杂性导致延迟。
我们不使用元数据数据库。对象和元数据通过单个原子操作一起写入。其他方法具有多个步骤,并且多个步骤会导致延迟。
我们采用SIMD(单指令多数据)加速。通过用汇编语言(SIMD扩展)编写MinIO的核心部分,我们可以在商品硬件方面超快。
我们将Go +汇编语言结合起来,通过针对任务执行C类性能。
我们不懈地追求简单。结果是,从性能的角度来看,内联擦除代码,位保护,加密,压缩,严格一致性和同步I / O等功能是微不足道的。
最终结果是企业使用对象存储方式的转变。他们不再将其仅视为旧数据的目的地,而是将其视为高级分析的热门层(Spark,Presto,Tensorflow等)。