本白皮书详细介绍了如何利用公有云(AWS、Google Cloud Platform 或 Microsoft Azure等)通过将分析任务直接应用于本地数据(无需将数据拷贝和同步到云上),进行计算负载的扩展。我们会演示如何在公有云上按需运行Starburst Presto、Spark 和 Hive 等计算分析任务,并通过Alluxio对本地HDFS中的数据进行访问。
本文还包含关于纽约市一家头部对冲基金的真实案例研究。该基金在大型 Google Compute Engine VM集群上部署了Spark 和 Alluxio,并使用本地 HDFS 作为底层存储。
1、扩展本地 Hadoop 集群存在的问题
许多企业将数据存储在其本地的 Hadoop 分布式文件系统 (HDFS) 集群中。随着数据驱动转型工作的推进,数据的存储量和查询量都在快速增长,这也导致了HDFS 系统的负载加大。
在过去几年,随着数据分析框架的数量不断增加,企业的平台工程团队不得不在当前繁忙的数据湖基础上支持更新的主流框架。此外,数据湖越来越多地成为所有企业数据的“安全环境”。基于 Hadoop 的数据湖超负荷运行的情况并不少见,所有这些都会导致Hadoop 集群变得十分庞大和繁忙 。
需要采用混合云部署的场景
- 集群运行时CPU容量超过 100%
- 集群运行时 I/O容量接近 100%
- 由于master named node负载过高,Hadoop 集群无法扩展
- 集群没有额外的容量来支持新框架
尽管存在上述问题,但使用其他方法来进行跨数据中心和公有云的数据管理也让企业望而生畏。随着架构向存算分离的方向发展,我们可以更好地利用云上的计算或存储资源来减轻Hadoop集群的负载。企业可以利用数据编排技术进行混合云部署,实现二者的完美结合。
2、发挥混合云数据分析的优势
当前混合云数据管理方案中存在的问题
一般认为,混合云两端的网络延迟会妨碍在云上基于本地数据运行分析任务。因此,大多数企业会将数据拷贝到云环境中并维护这些数据副本。此外,有合规性和数据主权要求的公司甚至不允许将数据拷贝到云上。这些都意味着如果要实现本地HDFS数据可访问的效果,应用程序可能很难达到理想的性能。
跨云管理分析数据的两种方案
目前常见的跨技术栈管理混合云数据的方案有两种:
-
将数据从本地拷贝到云存储用于运行分析任务
通常,用户使用类似distCP的命令将数据从Hadoop集群拷贝到像Google Cloud Storage这样的云存储中。
尽管该方案可能更便于移动数据,但也会随之产生几个问题:
- 由于本地集群上的数据可能会发生变化,一旦数据被移动,便不再保持同步,即变为陈旧数据,而要保持数据同步并非易事。
- 用户只能对拷贝到云中的数据运行“只读”类型的分析任务,限制了混合云部署所能发挥的价值。
- 已有的分析任务可能无法直接在云存储上运行,需要更改应用程序。 此外,性能也可能明显低于本地部署。
-
使用 Netapp ONTAP等云网络服务
用户可以使用Netapp ONTAP等产品,以自动化工具驱动的方式移动文件和对象数据。但是该方法也存在一些挑战:
- 这些技术可能很昂贵,而且只能使用网络文件系统API(如NFS)等有限的API接口。
- 移动数据后,除了本地存储之外,用户还需要利用云存储来运行分析任务。
3、解决方案概述
Alluxio是一个用于分析和机器学习应用的数据编排平台。通过Alluxio数据编排技术,可实现跨混合云的高性能数据分析。那么如何实现呢?通过将本地数据存储挂载到Alluxio。Alluxio数据编排技术可以为应用提供数据缓存、API转换和统一的命名空间。
Alluxio 支持 AWS S3、Google Compute Engine 和 Microsoft Azure 等云存储,可提供企业级混合云分析策略,将跨本地存储和云存储的计算迁移上云。通过Alluxio将数据提供给分析和机器学习应用,能够达到相当于数据和计算任务同位于云上的访问性能。此外,本地数据存储将能够降低计算负载并将额外的 I/O 开销最小化。
Alluxio 将数据按需提供给计算。作为云上分析和 AI/ML 任务的数据编排平台,Alluxio 可实现数据本地化、数据可访问性和数据弹性。 Alluxio 的设计初衷并非用于持久化数据存储,而是为了解决计算框架的数据访问问题。它依赖于底层持久化存储——HDFS 或 GCS——作为溯源系统。Alluxio 提供了如下核心功能:
数据本地性
Alluxio能够让本地数据更靠近计算,直接与需要访问数据的 Apache Spark 或 Presto 执行器/节点位于同一实例中,提供高度分布式的缓存能力。
数据可访问性
当本地 Hadoop 集群中的数据缓存到 Alluxio后,该数据就可以通过许多不同的 API( 包括 HDFS API、S3 API、POSIX API等) 进行访问。这意味着所有现有针对分析和AI的应用都可以直接访问数据,而无需对应用本身进行任何修改。
数据弹性
Alluxio 可以与分析框架一起弹性扩展,包括在容器化环境中。数据也可以在 Alluxio 集群中被复制,每个文件都可以根据需要复制多个副本。
按需获取计算驱动型数据
任何文件夹或bucket都可以挂载到 Alluxio 中,并且可以根据任务需求将该位置存储的数据缓存到 Alluxio 中。部分Alluxio 可访问的文件夹本身的元数据会先被读取,而数据只有在计算框架请求特定文件时才会被拉取到Alluxio中。我们还可以根据任务需要对数据实施预加载、固定(pin)或设定过期时限(expire)等操作。
Alluxio 架构
4 、案例:对冲基金公司如何利用混合云
量化对冲基金面临的挑战
量化对冲基金依靠金融模型来管理业务并制定投资策略。如何开发出更强大的模型,从而在更短的时间内以尽可能低的成本做出明智的投资决策是该行业持续面临的挑战。投资模型的开发和测试依赖于基于海量数据的机器学习技术——数据越多,模型质量越高。数据来源于数以千计的公有和私有数据源,总规模可达到PB级。处理这些数据的速度至关重要,因为当模型运行较快时,可以实现多次迭代,进而提高决策能力。
模型运行一般是在本地执行的,在数百到数千个数据处理节点上运行一次大约需要一小时。 Apache Spark 通常用于计算框架,而Hadoop分布式文件系统 (HDFS)通常用作数据存储。工作负载量通常是变化的,当出现周期性的负载爆发时,负载量会远高于平均水平。由于基础设施过度配置和峰值负载限制带来的挑战,许多对冲基金会使用混合云数据迁移策略。
但是,在本地数据上远程运行 Apache Spark 等计算框架带来了如下挑战:
- 出于安全原因,有些数据可能不允许存储在云上,每次在模型运行之前都需要从本地数据中心上传。
- 由于数据的大小和物理传输限制,模型在云上的运行时间会显著增加,这会导致每天构建的模型数量减少。
- 对模型参数进行任何修改时都需要重新加载数据。
使用 Alluxio 和 Google Compute Platform 的混合云分析解决方案
Alluxio 在 Google Cloud Platform 上与计算框架一起运行可解决上述挑战。 Alluxio 集群可以部署在 GCP 上,数据只需加载到 Alluxio 中一次即可。应用在之后请求的数据都由 Alluxio 内存提供。
Alluxio 集群内存提供临时的、非持久化的数据存储,因此当 Alluxio 实例停机时,数据将会被有效地删除。此外,Alluxio 中的数据是(由客户端)加密的,因此即使集群被入侵,数据仍然是安全的。
头部对冲基金案例
一家管理规模超过 500 亿美元的头部对冲基金 希望Alluxio能提供将Spark 任务迁移至公有云的解决方案 ,用于实现其基于本地 HDFS 的混合云部署方案。部署Alluxio后,该基金实现了更好的性能、更高的灵活性并显著降低了成本,其中每天的模型运行数量增加了 4 倍,计算成本降低了 95%。
下图展示了该基金如何通过将计算任务迁移到Google Compute Engine VMs上,直接基于本地数据运行混合云分析任务。
部署 Alluxio 后,机器学习运行时间缩短了 75%,每天的模型迭代次数从 2 次增加到 8 次。随着数据集规模的增长,Alluxio也能够线性扩展,确保提供相同的性能。由于数据访问时间被大大缩短,使得启用spot实例变得可行,因此该基金的计算资源使用成本降低了95%。 Alluxio与现有基础设施无缝集成,为应用程序提供统一的 API,无需修改应用程序或存储。由于数据在 Alluxio 中被加密保护,并且不会被持久化存储在云上,因此所有数据安全要求都可得到满足。