概述 Hadoop / MapReduce / HBase 框架及其当前在生物信息学中的应用外文翻译资料

 2022-12-19 18:08:57

英语原文共 6 页,剩余内容已隐藏,支付完成后下载完整资料


Taylor BMC Bioinformatics 2010, 11(Suppl 12):S1

http://www.biomedcentral.com/1471-2105/11/S12/S1

会议记录 开放存取

概述 Hadoop / MapReduce / HBase 框架及其当前在生物信息学中的应用

Ronald C Taylor

来自美国马萨诸塞州波士顿举行的第11届年度生物信息学开源会议(BOSC)。2010年7月9日至10日

摘要

背景: 生物信息学研究人员现在面临着对超大规模数据集的分析,而这个问题在未来几年内只会以惊人的速度增长。开源软件的最新发展,即 Hadoop 项目和相关软件,为在 Linux 集群上扩展到 PB 级数据仓库提供了基础,并使用名为 MapReduce 的编程风格为这些数据提供容错并行化分析。

说明: 概述了 Hadoop 的生物信息学社区,一个顶级 Apache 软件基金会项目以及相关的开源软件项目的当前用法。并定义了 Hadoop 背后的概念和相关的 HBase 项目,并描述了使用 Hadoop 的当前生物信息学软件。 关注的要点主要是下一代测序,并作为迄今为止的主要应用领域。

结论: Hadoop和MapReduce 编程范例已经在生物信息学社区中具有相当大的基础应用,特别是在下一代测序分析领域,并且这种使用率正在增加。这是因为基于Hadoop和Linux 集群分析的商品的成本效益,以及数据上传到云中已使用Hadoop / HBase的云供应商的成本效益。 并且由于 MapReduce 方法在许多数据分析算法的并行化中的有效性和易用性。

Hadoop / MapReduce / HBase的背景

由于新的计算挑战(例如,在下一代测序 [1,2] 中),高性能计算(HPC)在生物信息学数据分析中变得越来越重要。HPC通常包括跨机器群集分配工作,并用这些机器访问托管在存储区域网络上的共享文件系统。工作并行化通过消息传递接口(MPI)等编程API以及最近的 Hadoop MapReduce API 实现。现在正在探索的另一种计算机体系结构/服务模型是云计算 [3-5]。简而言之,云计算等于HPC和Web界面和快速按比例增加和减少这种按需使用的能力。服务器端在集群上运行的数据中心中实现,远程客户端可以上载可能大量的数据集,以便在 Hadoop 框架或在数据中心运行的其他并行化环境中进行分析。

Hadoop

Hadoop [6-9] 是一个软件框架,它可以安装在 Linux 集群商品上,并允许大规模分布式数据分析。除了可能需要的更改之外,不需要进行任何硬件修改,就可以满足每个节点的最小建议 RAM,磁盘空间等要求(例如,参见Cloudera 的指南 [10])。Hadoop 的初始版本是由 Doug Cutting于2004年创建的(以他儿子的填充大象玩具命名)。Hadoop于2008年1月成为Apache 软件基金会的顶级项目。它拥有许多贡献者,包括学术和商业(雅虎是最大的贡献者),并且Hadoop 拥有广泛且快速增长的用户社区 [11,12]。

组成部分— Hadoop提供了强大的、容错的、受Google的文件系统 [13]启发的Hadoop 分布式文件系统(HDFS),以及基于Java的 API,并允许使用 MapReduce 范例跨集群节点进行并行处理。Hadoop可以通过 Hadoop Streaming来使用以其他语言编写的代码,例如 Python和C,该实用程序允许用户使用任何可执行文件创建和运行作为mapper或者和 reducer 的作业。此外,Hadoop 还带有 Job 和 Task Trackers,它们可跟踪程序在群集节点上的执行情况。

数据局部性 - Hadoop 尝试自动将数据与计算节点共存。也就是说,Hadoop 将 Map 任务安排接近于它们将工作的数据,“接近” 意味着相同的节点,或者至少是同一个机架。这是影响 Hadoop 性能的主要因素。2008年4月,在 910 节点集群上运行的 Hadoop 程序打破了世界纪录,在不到3.5分钟的时间内完成了数 TB的数据分类。随着 Hadoop 的成熟,速度的提升仍在继续 [14]。

容错,无共享架构任务必须彼此不依赖,除了在 Hadoop 控制下提供给 reducer 的mapper。Hadoop可以自动检测任务故障并在其他正常节点上重新启动该程序。也就是说,节点故障会自动处理,并根据需要重新启动任务。 单点故障目前仍保留在HDFS文件系统的一个节点上。

可靠性——数据可以跨多个节点复制;不需要RAID存储。

编程支持——与使用 MPI 的并行编程不同,数据流是隐式的并能自动处理;它不需要编码。对于适合 MapReduce 范例的任务,Hadoop 简化了(可能是异构的)商用机器群集上大规模、容错、分布式应用程序的开发。

MapReduce范例——Hadoop使用 Map / Reduce执行引擎 [15-17] 使存储在集群分布式文件系统中的大数据集上实现其容错的分布式计算系统。这种MapReduce方法已经在谷歌上推广使用,最近由谷歌申请专利,用于集群并授权给 Apache [18],现在正由广泛的研究人员社区进一步开发 [19]。

它们有单独的 Map 和 Reduce 步骤,每个步骤并行完成,每个步骤都按照键值对进行操作。因此,程序执行分为 Map 和 Reduce 阶段,分别由集群中节点之间的数据传输分开。所以有这个工作流程:输入Map()Copy()/ Sort()Reduce()Output。在第一阶段,节点在输入数据的一部分上执行 Map 函数。Map输出的是键值对形式的一组数据记录,并存储在该节点上。使可能分布在任何节点上的任何给定密钥的记录数据可以在运行该密钥的 Reducer的节点上聚合。这包括机器之间的数据传输。一直到 Map 阶段的所有数据都已传输到正确的机器之前,第二个Reduce阶段都将被阻止进行,这个Reduce 阶段将产生另一组键值对,并作为最终输出结果。这只是一个简单的编程模型,并仅限于使用键值对,但是有令人惊讶数量的任务和算法将适用于这个框架。此外,虽然 Hadoop 目前主要用于非常大的数据集的批量分析,但是不能排除使用 Hadoop 去进行计算密集型的分析,例如下面描述的 Mahout 机器学习项目。

HDFS 文件系统——HDFS的使用还有一些缺点。HDFS在处理连续更新时(写入很多的时候),比不上传统的关系数据库管理系统。 此外,HDFS 还无法直接安装到现有操作系统上。 因此,将数据输入和输出 HDFS 文件系统可能就会很尴尬。

除了Hadoop本身,还有多个基于Hadoop 构建的开源项目。主要项目如下所述。

Hive

Hive [20] 是一个建立在Hadoop之上的数据库框架,并在Facebook上开发,使用了SQL类型查询语言进行临时查询,并也用于更复杂的分析。用户自定义表和列,数据通过这些表来加载和检索。Hive QL是一种类似SQL的查询语言,用于创建摘要,报告和分析数据。Hive查询使用 MapReduce来执行。Hive是专为批处理而非为在线事务处理而设计的——所以与 HBase(见下文)不同,Hive 不提供实时查询。

Pig

Pig [21] 是一种高级数据流语言(Pig Latin)和执行框架,其编译器生成 Map / Reduce 程序序列,以便于在 Hadoop 中执行。Pig是专为了批量处理数据而设计。Pig的基础设施层是由一个编译器组成,该编译器将(相对较短的)Pig Latin 程序转换为 MapReduce 程序的序列。 Pig是一个使用 Java 客户端应用程序,用户在本地安装——所以Hadoop 集群本身并没有任何改变。Grunt是Pig交互式shell。

Mahout 与其他扩展到 Hadoop 编程功能

Hadoop并不仅仅只适用于大规模数据处理。 Mahout [22]是一个 Apache 的项目,用于构建可扩展的机器学习库,其大多数算法都基于 Hadoop。Mahout的当前算法的重点关注领域是:聚类、分类、数据挖掘(频繁项集)和进化编程。显然,Mahout聚类和分类算法在生物信息学中具有直接相关性,例如,用于大型基因表达数据集的聚类,和以及用于生物标记物鉴定的分类。关于聚类,我们可能会注意到,基于Hadoop MapReduce 的聚类工作也已经由 M. Ngazimbi(2009 年 MS 论文 [23])和 谷歌的K. Heafield (Hadoop 设计和 k-Means 聚类[24])中进行了探索。使用 R 的许多生物信息学家可能对 “R 和 Hadoop 集成处理环境”(RHIPE)和S.Guhi 的 Java 包 [25] 感兴趣,它们将 R 环境与 Hadoop 集成在一起,因此可以在 R 中使用并编写 MapReduce 算法。(另请注意基于 IBM R 的 Ricardo 项目 [26])。对于生物信息学中不断增长的Python 用户社区,他们可以使用 Pydoop [27]。Pydoop是一个用于 Hadoop的Python MapReduce 和 HDFS API,并允许用 Python 来编写完整的 MapReduce 应用程序。这些都是来自大量开发 Hadoop 附加库的开发人员的样本,在这个有限的样本中的最后一个例子是:新的编程语言 Clojure [28],它主要是一种函数式语言,例如,以 Java 虚拟机为目标的 Lisp 语言,它已被赋予了一个库(作者 S. Sierra [29] )来帮助编写 Hadoop 工作。

Cascading

Cascading [30] 是一个提供编程 API 的项目,用于在 Hadoop 集群上定义和执行容错数据处理工作流。Cascading 是一个较小众的开源 Java库,它位于Hadoop MapReduce层之上。Cascading提供了一个查询处理API,允许程序员在比 MapReduce 更高的级别上运行,并能更快地组装复杂的分布式进程,且根据依赖性对它们进行调度。

HBase

最后,一个基于 Apache Hadoop重要的项目是HBase [31],它是以 Google 的 BigTable 数据库为模型[32]。Hbase比Google的BigTable增加了一个分布式的、可容错的扩展数据库,它基于 HDFS 文件系统建立,并具有对数据的随机实时读/写访问。每个HBase表数据都存储为多维稀疏映射并包含行和列,每个单元都有一个时间戳。给定行和列的单元格值由(表,行,列族:列,时间戳)唯一标识值。Hbase拥有自己的Java客户端 API,在HBase中的表可以通过 TableInput / TableOutputFormat 来用作输入源和 MapReduce 作业的输出目标。Hbase无法直接用来管理单点故障。 HBase 可以使用另一个 Hadoop 子项目 Zookeeper [33] 来管理部分故障。

所有表都是通过主键访问,并且通过附加索引表可以获得二级指数; 程序员需要非规范化和复制。在基本HBase中没有SQL查询语言。但是,还有一个Hive / HBase 集成项目 [34,35] 允许 Hive QL 语句访问 HBase 表以进行读取和插入。 此外,还有独立的 HBql 项目(作者 P. Ambrose [36])为 HBase 添加 SQL 和 JDBC 绑定的专用用语。

表格由区域组成。每个区域由 startKey 和 EndKey 定义,它们可以位于不同的节点上,且由多个 HDFS 文件和块组成,每个文件和块都由 Hadoop 复制。列可以随时添加到表中,且只有父列系列在该模式中得到修复。每个单元格都按照列族和列名称来标记,因此程序始终可以识别给定单元格中包含的数据项类型。除了能够扩展到PB级的数据集之外,我们还可以注意到将不同数据源集成到少量HBase表中以便于构建数据工作空间的简易性,同一个表中的不同行,可以定义不同的列(在运行中)。这样的设置也非常重要。(参见下面的生物整合讨论。)

除了HBase之外,现在还有其他可扩展的随机访问数据库。HadoopDB [37,38] 是MapReduce和标准关系数据库系统的混合体。HadoopDB使用 PostgreSQL 作为数据库层(每个节点、每个数据块都有一个PostgreSQL 实例),Hadoop 用于通信层,扩展版本的 Hive 用于转换层。此外,也有基于非 Big Hadoop 的可扩展替代方案同样基于Google BigTable 的概念,例如Hypertable [39]和Cassandra [40]。还有其他可能感兴趣的叫做 noSQL可扩展的数据库:Project Voldemort,Dynamo(用于亚马逊的简单存储服务(S3))和 Tokyo Tyrant 等。但是,这些非 Hadoop和非 BigTable 的数据库系统不在我们的讨论范围之内。

在生物信息学中使用 Hadoop 和 Hbase

用于下一代测序

Cloudburst 软件[41]将下一代

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[19761],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

发小红书推广免费获取该资料资格。点击链接进入获取推广文案即可: Ai一键组稿 | 降AI率 | 降重复率 | 论文一键排版