用 Linux 和 Apache Hadoop 进行云计算(1)
- UID
- 1066743
|
用 Linux 和 Apache Hadoop 进行云计算(1)
云计算简介近来云计算越来越热门了,云计算已经被看作 IT 业的新趋势。云计算可以粗略地定义为使用自己环境之外的某一服务提供的可伸缩计算资源,并按使用量付费。可以通过 Internet 访问 “云” 中的任何资源,而不需要担心计算能力、带宽、存储、安全性和可靠性等问题。
本文简要介绍 Amazon EC2 这样的云计算平台,可以租借这种平台上的虚拟 Linux® 服务器;然后介绍开放源码 MapReduce 框架 Apache Hadoop,这个框架将构建在虚拟 Linux 服务器中以建立云计算框架。但是,Hadoop 不仅可以部署在任何厂商提供的 VM 上,还可以部署在物理机器上的一般 Linux OS 中。
在讨论 Apache Hadoop 之前,我们先简要介绍一下云计算系统的结构。 显示云计算的各个层以及现有的一些服务。关于云计算的各个层的详细信息,请参见 。
基础设施即服务 (Infrastructure-as-a-Service,IaaS)是指以服务的形式租借基础设施(计算资源和存储)。IaaS 让用户可以租借计算机(即虚拟主机)或数据中心,可以指定特定的服务质量约束,比如能够运行某些操作系统和软件。Amazon EC2 在这些层中作为 IaaS,向用户提供虚拟的主机。平台即服务 (Platform-as-a-Service,PaaS)主要关注软件框架或服务,提供在基础设施中进行 “云” 计算所用的 API。Apache Hadoop 作为 PaaS,它构建在虚拟主机上,作为云计算平台。
图 1. 云计算的层和现有服务Amazon EC2Amazon EC2 是一个 Web 服务,它允许用户请求具有各种资源(CPU、磁盘、内存等)的虚拟机器。用户只需按使用的计算时间付费,其他事情全交给 Amazon 处理。
这些实例 (Amazon Machine Image,AMI) 基于 Linux,可以运行您需要的任何应用程序或软件。在从 Amazon 租借服务器之后,可以像对待物理服务器一样使用一般的 SSH 工具设置连接和维护服务器。
对 EC2 的详细介绍超出了本文的范围。更多信息请参见 。
部署 Hadoop 云计算框架的最好方法是把它部署在 AMI 上,这样可以利用云资源,不需要考虑计算能力、带宽、存储等问题。但是,在本文的下一部分中,我们将在本地的 Linux 服务器 VMWare 映像中构建 Hadoop,因为 Hadoop 不仅适用于云解决方案。在此之前,我们先介绍一下 Apache Hadoop。
Apache HadoopApache Hadoop 是一个软件框架(平台),它可以分布式地操纵大量数据。它于 2006 年出现,由 Google、Yahoo! 和 IBM 等公司支持。可以认为它是一种 PaaS 模型。
它的设计核心是 MapReduce 实现和 HDFS (Hadoop Distributed File System),它们源自 MapReduce(由一份 Google 文件引入)和 Google File System。
MapReduceMapReduce 是 Google 引入的一个软件框架,它支持在计算机(即节点)集群上对大型数据集进行分布式计算。它由两个过程组成,映射(Map)和缩减(Reduce)。
在映射过程中,主节点接收输入,把输入分割为更小的子任务,然后把这些子任务分布到工作者节点。
工作者节点处理这些小任务,把结果返回给主节点。
然后,在缩减过程中,主节点把所有子任务的结果组合成输出,这就是原任务的结果。
图 2 说明 MapReduce 流程的概念。
MapReduce 的优点是它允许对映射和缩减操作进行分布式处理。因为每个映射操作都是独立的,所有映射都可以并行执行,这会减少总计算时间。
HDFS对 HDFS 及其使用方法的完整介绍超出了本文的范围。更多信息请参见 。
从最终用户的角度来看,HDFS 就像传统的文件系统一样。可以使用目录路径对文件执行 CRUD 操作。但是,由于分布式存储的性质,有 “NameNode” 和 “DataNode” 的概念,它们承担各自的责任。
NameNode 是 DataNode 的主节点。它在 HDFS 中提供元数据服务。元数据说明 DataNode 的文件映射。它还接收操作命令并决定哪些 DataNode 应该执行操作和复制。
DataNode 作为 HDFS 的存储块。它们还响应从 NameNode 接收的块创建、删除和复制命令。
JobTracker 和 TaskTracker在提交应用程序时,应该提供包含在 HDFS 中的输入和输出目录。JobTracker 作为启动 MapReduce 应用程序的单一控制点,它决定应该创建多少个 TaskTracker 和子任务,然后把每个子任务分配给 TaskTracker。每个 TaskTracker 向 JobTracker 报告状态和完成后的任务。
通常,一个主节点作为 NameNode 和 JobTracker,从节点作为 DataNode 和 TaskTracker。Hadoop 集群的概念视图和 MapReduce 的流程见图 2。
图 2. Hadoop 集群的概念视图和 MapReduce 的流程 |
|
|
|
|
|