使用 Alluxio 提高 HDFS 集群的性能和一致性

Alluxio 是世界上第一个内存速度的虚拟分布式存储系统,它连接了应用程序和底层存储系统,提供比现有解决方案快几个数量级的统一数据访问。 Hadoop分布式文件系统(HDFS)是一种用于存储大量数据的分布式文件系统。 HDFS 普及了将计算带入数据的范式以及位于同一位置的计算和存储架构。

在这篇博客中,我们重点介绍了 Alluxio 为与 HDFS 共存的计算集群带来的两个关键优势。

  • 性能可预测性允许更轻松地满足 SLA
    • 例如:作业的运行时间范围从 100+ 秒减少到不到 2 秒
  • 性能提升高达 10 倍

我们使用 Spark 2.0 进行计算并比较了 2 个堆栈的性能,一个堆栈的 Spark 作业直接在 HDFS 中的数据上运行,另一个堆栈作业在 HDFS 支持的 Alluxio 文件系统中的数据上运行。

为什么使用Alluxio

在共享计算集群中,用户经常在相似的数据集上运行作业。 例如,许多数据科学家可能正试图从上周收集的数据中获得见解。 同时,少数用户可能会访问不常用的数据集,例如上个月的数据以生成报告。 为了优化作业的性能,可以将数据存储在内存中。 然而,集群的内存有限,无法存储所有数据,这自然意味着需要分布式内存管理系统。 有一些易于实施的选择。

Alluxio

通过使用 Alluxio,您可以获得基于访问频率等特征来管理数据的能力。 这使系统能够将热数据保留在内存中,从而大大加快了访问该数据的作业。 此外,Alluxio 提供可预测的性能,使系统能够保证一定的服务质量。

操作系统缓冲区/页面缓存

操作系统将自动尝试利用机器的内存加速磁盘 I/O。 当在适合内存的同一数据集上重复运行作业时,这种方法是有效的,并且可以提供与 Alluxio 相似的性能优势。 然而,对于更大的数据集或更多不同的工作负载,性能变化很大,平均而言,效率远低于像 Alluxio 这样的数据感知系统。

Spark 持久化

Spark 提供了在不使用任何其他系统的情况下临时保存数据以供后续使用的选项。 但是,这些机制仅限于单个 Spark 上下文,这会阻止多个用户从一个用户的持久数据中获益。 因此,每个 Spark Context 都会为自己的内存或磁盘存储消耗资源,这在共享环境中效率低下,尤其是在不必要地消耗大量内存时。

Alluxio 在共享环境中的优势

为了模拟具有不同数据热点的多租户环境,我们设置了以下实验:

  • 在任何给定时间,集群上都会运行两个作业,每月作业和每周作业。
  • 每个作业使用一半的可用 CPU 和计算内存资源。
  • 一个新的作业会在前一个相同类型的作业完成后立即运行。
  • 预先在每周数据上运行一个简单的作业,以预热 OS 缓存或 Alluxio 内存存储。

由于每个作业都是独立的,因此实验不适用于使用 Spark 持久化策略。 因此,我们将 Alluxio 与操作系统的内存管理进行比较。

image.png

使用两种不同的堆栈进行了相同的实验,一种使用 Alluxio (Spark + Alluxio + HDFS),另一种没有 (Spark + HDFS)。 该实验使用 c4.2xlarge 实例在 Amazon EC2 上运行。 总数据集大小是集群可用内存的三倍。

场景1

image0535f0c1cb3c4cee.png

在第一种情况下,每月作业和每周作业都在运行 I/O 密集型工作负载。 Alluxio 极大地提高了这两种工作负载的性能。 对于每周任务,保证热点数据在Alluxio中,我们享受内存速度读取,大大加快了工作量。 事实上,您会注意到以前受 I/O 限制的工作负载现在将受计算限制。 如果没有 Alluxio,性能会有很大差异(请参见图中红色的最小、最大范围),并且可能比使用 Alluxio 的性能差 10 倍以上。

这是由于从 OS 页面缓存中数据的不可预测性。 每月工作的优势更加微妙。 虽然我们能够通过 Spark 静态划分 CPU 和内存资源(由 Spark 任务使用,不要与 Alluxio 内存混淆),但我们无法对 I/O 资源进行精细控制,例如磁盘。

由于在没有 Alluxio 的情况下,每周和每月的作业都是 I/O 绑定的,当数据从 OS 缓存中不可用时,资源瓶颈被共享,从而降低了性能。 使用 Alluxio,每月作业可以充分利用磁盘带宽,因为每周作业始终从内存中读取。

场景2

image4fb886b005fe2024.png

在第二种情况下,每月作业仍然是 I/O 密集型作业,但每周作业会变成 CPU 密集型作业。 在这种情况下,Alluxio 令人惊讶地仍然提高了两种工作负载的性能。 每周任务受益于 Alluxio 的内存速度 I/O,但与之前的 I/O 密集型工作负载相比,其程度要小得多。

性能提升将直接关系到机器可以处理的 CPU 吞吐量。 然而,Alluxio 的月度作业仍然表现得更好,因为在场景 1 中提高月度作业性能的所有因素仍然适用。 此外,每周的 CPU 作业对操作系统缓存的利用效率较低,这会导致更多的磁盘资源争用,从而进一步减慢每月作业的速度。

场景3

imagedf295b7627d6ce62.png

在第三种情况下,每月作业是 CPU 密集型的,而每周作业是 I/O 密集型的。 Alluxio 为每周工作提供了显着的好处,因为数据完全在内存中。 先前受 I/O 限制的工作负载被加速到受 CPU 限制的程度。 我们还看到了 CPU 密集型月度作业的好处,因为 Alluxio 防止了周度作业与月度作业争夺磁盘资源。

场景4

image39372e04191c4e7d.png

在最后一种情况下,每月和每周的作业都是 CPU 密集型的。 在这种情况下,Alluxio 无法提供显着的好处,因为这两个作业的性能都与 I/O 吞吐量无关。 然而,Alluxio 仍然通过持续管理数据集的内存部分来提供性能稳定性。

结论

Alluxio 提供可预测的资源分区和利用,使系统管理员能够提供性能保证。 此外,Alluxio 甚至对于与存储共存的计算集群也带来了显着的性能提升。 使用 Alluxio 的优势被集群中访问数据的作业数量放大了。 总体而言,在计算和存储并置的环境中使用 Alluxio 时,用户可以获得两个关键的性能优势。

  • 性能可预测性允许更轻松地满足 SLA
  • 性能提升高达 10 倍
0 0 投票数
文章评分

本文为从大数据到人工智能博主「xiaozhch5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://lrting.top/backend/4152/

(0)
上一篇 2022-03-22 11:02
下一篇 2022-03-22 21:52

相关推荐

订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x