具有Alluxio,Mesos和MinIO的可扩展基因组学数据处理管道
Guardant Health是全面液体活检的全球领导者。肿瘤学家命令我们进行血液检查,以帮助确定他们的晚期癌症患者是否有资格使用靶向肿瘤DNA特定基因组改变的某些药物。每次测试都会产生大量的基因组数据,我们会将其处理成易于解释的测试结果。因此,我们需要一个端到端的数据处理解决方案,该解决方案是:
●灵活部署在内部和云中:基因组数据高度分散,涉及异构格式。我们需要具有灵活性,可以在本地和云中跨不同的存储系统存储数据。Mesos,Alluxio和MinIO提供了灵活的部署,因为它们都是云原生应用程序,并且与许多存储系统(例如Amazon S3)兼容。
●可扩展性:基因组学是最大的数据生成领域之一。我们正在以EB级规模工作,因此可伸缩性和成本效率是重要的考虑因素。我们需要一个将计算与存储解耦的解决方案,以便每个解决方案都可以独立扩展。在我们的解决方案中,Alluxio和MinIO使这成为可能,我将在本文中进一步解释。
●绩效:为了向医疗保健提供者及时提供信息,至关重要的是我们必须通过数据处理来实现高性能。我们以前的解决方案有一个基于磁盘的存储系统,无法满足我们的性能需求。不管我们的数据处理引擎有多快;处理受基础存储层速度的限制。即使当数据处理引擎将数据池化到本地内存中以克服I / O瓶颈时,可用内存的总量仍然是一个限制因素。Alluxio,MinIO和Apache Spark都积极利用内存资源,并且我们一起能够实现比以前更高数量级的性能。
Guardant Health如何通过Alluxio,Minio和Spark驯服基因组数据
通过利用Alluxio,Mesos,MinIO和Spark,我们创建了性能,可伸缩性和成本最佳的端到端数据处理解决方案。我们将Alluxio用作统一存储层,以连接不同的存储系统并提高内存性能,并将MinIO作为底层存储安装到Alluxio,以保持冷数据(不经常访问)并将数据同步到AWS S3。Apache Spark充当计算引擎。

让我们了解一下这些组件中的每一个。
Apache Mesos从计算机(物理或虚拟)中提取CPU,内存,存储和其他计算资源,从而使容错和弹性的分布式系统易于构建和有效运行。
MinIO是云原生,与AWS S3兼容的对象存储服务器。传统上认为存储很复杂,但MinIO凭借其原生于云的容器友好型架构改变了这一点。部署MinIO就像拉官方Docker映像并启动容器一样容易。容器化部署意味着您只需在每个租户中启动一个新的MinIO实例,即可在多租户环境中扩展MinIO部署。
MinIO仅专注于具有生产能力的弹性存储,其功能包括使用擦除编码,分布式模式和共享模式的位保护。这使基础架构与存储脱钩,使您处于完美的位置,可以在容器编排环境中利用最新技术。
现代应用程序需要不同的存储系统来处理不同的数据类型。但是,随着数据处理的兴起,多个存储系统变得难以管理。您要么需要将数据处理引擎与每个存储系统集成在一起,要么将它们耦合得太紧密而无法独立扩展。或需要先收集数据并将其传输到公共位置,这会增加开销和交付时间。
Alluxio通过提供分布在计算节点的本地存储介质(理想情况下为RAM)上的统一文件系统来解决此问题。这意味着Alluxio创建了从存储系统到计算节点的按需管道—您的所有数据都在一个名称空间和一个接口中。
现在,您已经了解了所有组件,下面让我们概述一下如何进行设置。
前提条件
●按照Mesos上Alluxio的这些指南设置Mesos群集
●按照这些有关“群集模式”的指南进行Alluxio群集设置。
●已知端点的accessIO和secretKey的MinIO服务器设置。
● Apache Spark设置。
在存储下将MinIO设置为Alluxio
要将MinIO配置为Alluxio的底层存储,请打开conf / alluxio-site.properties文件并添加配置详细信息。
alluxio.master.hostname=localhost alluxio.underfs.address=s3a://testbucket/test alluxio.underfs.s3.endpoint=http://localhost:9000/ alluxio.underfs.s3.disable.dns.buckets=true alluxio.underfs.s3a.inherit_acl=false alluxio.underfs.s3.proxy.https.only=false
请注意,您需要添加MinIO服务器端点,访问密钥和秘密密钥。接下来,您需要格式化Alluxio日志和worker存储目录,以准备启动master和worker。您可以使用
./bin/alluxio format
最后启动Alluxio
./bin/alluxio-start.sh local
使用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.jar spark.executor.extraClassPath /pathToAlluxio/core/client/target/alluxio-core-client-1.4.0-jar-with-dependencies.jar
有关高级设置,请参阅Alluxio文档。
集群配置
上述架构已通过以下配置在生产环境中部署-
群集大小= 50个以上的节点,每个节点约有60个核心,每个节点的内存在512GB至1TB之间
Alluxio Ram大小> 20TB
Alluxio HDD大小> 200TB
MinIO档案存储池〜1.2PB +(并且每天都在增长;)
结论
我们的数据需求迅速增长,因此,我们的基因组数据处理解决方案具有高性能,可扩展性和成本可选性至关重要。借助Alluxio,MinIO和Spark,我们能够创建高性能,健壮但可扩展的系统,以云原生方式执行大规模数据处理。MinIO提供了可在商品硬件上运行的可扩展,强大,多租户的存储选项; Alluxio提供了统一的界面来管理所有数据,同时还提供了进一步的性能提升; Spark利用Alluxio提供的内存中数据来确保快速的数据处理。通过这种数据处理解决方案,我们对继续提供产品以帮助医疗保健机构抗击癌症的能力充满信心。