基于Alluxio,Mesos和Minio构建可扩展基因组数据处理流水线

来源:互联网 发布:免费vpn软件下载 编辑:程序博客网 时间:2024/06/05 08:28

本文由南京大学顾荣、姜茜翻译整理自Alluxio公司技术博客,由Alluxio公司授权CSDN首发(联合),版权归Alluxio公司所有,未经版权所有者同意请勿转载。

Guardant Health在综合液体活检方面处于世界领先水平。肿瘤学家收集整理我们的血液测试结果来帮助确定他们的晚期癌症患者是否适合使用某些药物,这些药物只对特定的肿瘤DNA基因变异有效。每个测试产生大量的基因组数据,我们将其处理成易于解释的测试结果。因此,我们需要一个端到端的数据处理方案:

  • 在云端和私有云上灵活部署:基因组数据是高度分布的,涉及异构形式。我们需要灵活地将数据存储在不同存储系统的云端和私有云上。Alluxio,Mesos和Minio提供灵活的部署,因为它们都是云原生的应用,并且与许多存储系统(如Amazon S3)兼容。
  • 可扩展性:基因组学是最大的数据生成领域之一。我们正致力于ExaByte规模的工作,因此可扩展性和性价比是重要的考虑因素。我们需要一种将计算与存储分离的解决方案,这样计算和存储都可以独立扩展。 在我们的解决方案中,Alluxio使这成为可能,下面将在文章中进一步解释。
  • 高性能:为了向医护人员提供最及时的信息,实现高性能的数据处理至关重要。我们以前的解决方案有一个基于磁盘的存储系统,它无法满足性能需求。不管我们的引擎能达到多快的速度,数据处理仍然受到底层存储层的速度限制。即使引擎将数据汇集到本地内存中以克服I / O瓶颈,然而可用内存的总量仍然是一个限制因素。 Alluxio,Minio和Apache Spark都积极地利用分布式内存资源,与之前相比,我们在性能上能得到指数级的提升。

利用Alluxio,Mesos,Minio和Spark,我们创建了一个端到端的数据处理方案,它性能优异,可扩展,而且成本最优。 我们使用Alluxio作为统一的存储层来连接不同的存储系统,这带来了内存上的优异表现。Minio作为Alluxio的底部存储,以保持冷(不常访问)数据,并将数据同步到AWS S3。 Apache Spark则作为计算引擎。

这里写图片描述

让我们了解一下这些组件具体为平台带来了什么。

Apache Mesos将CPU、内存、存储和其他计算资源从机器(物理或虚拟)中抽取出来,使用户能够轻松有效地构建和运行能够容错和弹可扩展的分布式系统。

Minio是云本地的AWS S3兼容对象存储服务器。尽管存储器一直被认为是复杂的,Minio使用了云原生的容器友好的架构。部署Minio就像下载官方Docker Image和启动容器一样简单。集装箱式部署意味着用户可以通过为每个租户启动一个新的Minio实例,从而在多租户环境中扩展Minio部署。

Minio专注于弹性、生产级的存储,具有使用纠删编码、分布式模式和共享模式的比特衰减保护(bit rot protection)等功能。这将基础架构与存储脱钩,使用户能够使用最新的容器组排技术。

现代应用需要不同的存储系统来处理不同的数据类型。然而,随着数据处理的发展,多存储系统变得难以管理。要么用户需要将数据处理引擎与每个存储系统集成在一起,从而将它们耦合得太紧密以进行独立扩展;要么数据需要首先被收集并传输到公共位置,这会增加开销和处理时间。

Alluxio提供了一个统一文件系统来解决此问题,它分布在计算节点的本地存储介质(理想情况下为RAM)。这意味着Alluxio创建了一个从存储系统到计算节点的按需分配的流水线:用户所有的数据都在一个命名空间和一个接口中。

下面,我们将简介所有组件并介绍如何配置它们。

1. 预先工作

  • 根据Mesos上Alluxio的指南,配置Mesos集群。
  • 根据集群模式指南,配置Alluxio集群。
  • 已知终端、访问密钥和密钥,配置Minio服务器。
  • 配置Apache Spark。

2. 将Minio配置为Alluxio的底层存储

要将Minio配置为Alluxio的底层存储,打开conf/alluxio-site.properties文件并添加参数:

alluxio.master.hostname=localhostalluxio.underfs.address=s3a://testbucket/testalluxio.underfs.s3.endpoint=http://localhost:9000/alluxio.underfs.s3.disable.dns.buckets=truealluxio.underfs.s3a.inherit_acl=falsealluxio.underfs.s3.proxy.https.only=false

请注意,用户需要添加Minio服务器终端,访问密钥和密钥。 接下来,用户需要格式化Alluxio日志和从节点的存储目录,以备主节点和从节点启动。 用户可以这样做:

./bin/alluxio format

最后,启动Alluxio:

./bin/alluxio-start.sh local

3. 用Alluxio配置Spark

用户需要使用Spark特定的配置文件编译Alluxio客户端。为此,请使用以下命令从Alluxio根目录构建整个项目:

mvn clean package -Pspark -DskipTests

将以下语句添加到spark/conf/spark-defaults.conf。

spark.driver.extraClassPath /pathToAlluxio/core/client/target/alluxio-core-client-1.4.0-jar-with-dependencies.jarspark.executor.extraClassPath /pathToAlluxio/core/client/target/alluxio-core-client-1.4.0-jar-with-dependencies.jar

更多的配置参数,请查看 Alluxio Documentation。

4. 集群参数

上述架构已在生产中部署完毕,参数如下。

集群大小:节点数50+,每个节点拥有约60个核和512 GB到1 TB的内存
Alluxio的RAM大小:>20 TB
Alluxio的HDD大小:>200 TB
Minio的数据库存储池 :~ 1.2 PB+(每天递增)

5. 总结

我们的数据需求正在迅速增长,因此,高性能、可扩展性和成本可选性对于我们的基因组数据处理方案是至关重要的。 使用Alluxio、Mesos、Minio和Spark,我们能够创建一个高性能、鲁棒的且可扩展的系统,以云原生的方式执行大规模数据处理。Minio提供了一个可扩展的、鲁棒的多租户存储选项,可以在商用硬件上运行,Alluxio提供了一个统一的接口来管理所有数据,同时提供更多的性能提升,Spark利用Alluxio提供的内存数据来确保快速的数据处理。通过这种数据处理方案,我们有信心继续提供解决方案来帮助医护人员与癌症进行抗争。

扩展阅读:

  • Alluxio和Mesosphere的伙伴,使用Alluxio和DC / OS实现快速按需分析
  • 使用Alluxio的高效 Spark DataFrames
阅读全文
0 0
原创粉丝点击