2.1 Apache Hadoop概述
Apache Hadoop 是一个软件框架,可以在具有数千个节点和 PB 级数据的大型集群上进行分布式处理。Apache Hadoop 集群可以使用故障率一般较高的低价通用硬件来构建。Hadoop 的设计能够在没有用户干预的情况下优雅地处理这些故障。此外,Hadoop 采用了让计算贴近数据(move computation to the data)的方法,从而显著降低了网络流量。它的用户能够快速开发并行的应用程序,从而专注于业务逻辑,而无需承担分发数据、分发用于并行处理的代码以及处理故障等繁重的工作。Apache Hadoop 主要包含四个项目:Hadoop Common、Hadoop 分布式文件系统( Hadoop Distributed File System,HDFS)、YARN(Yet Another Resource Negotiator)和 MapReduce。
简而言之,HDFS 用于存储数据,MapReduce 用于处理数据,YARN 则用来管理集群的资源(CPU 和内存)及支持 Hadoop 的公共实用程序。Apache Hadoop 可以与许多其他项目集成,如 Avro、Hive、Pig、HBase、Zookeeper 和 Apache Spark。
Hadoop 带来的主要是以下三个组件:
让我们来了解一下 Hadoop 在经济、业务和技术领域应用的驱动因素:
Hadoop 的典型特点如下所示:
2.1.1 Hadoop 分布式文件系统
HDFS 是一种分布式文件系统,能在低价通用硬件的大型集群上提供很高的可扩展性和可靠性。
HDFS 文件会划分为大区块分布在集群中,每个区块的大小通常为 128 MB。每个区块都会被复制(通常是 3 份),以便处理硬件故障以及管理节点(NameNode)体现的区块布局,并通过 MapReduce 框架把计算转移到数据上,如图2-1所示。
在图2-1中,当存储 File1 时,由于其大小(100 MB)小于默认块大小(128 MB),因此它被划分在单个区块(B1)中,并且在节点 1、节点 2 和节点 3 上被复制。区块 1(B1)被复制在第一个节点(节点 1)上,然后节点 1 复制到节点 2 上,节点 2 再复制到节点 3 上。由于 File2 的大小(150 MB)大于块大小,所以 File2 被分成两个区块,然后区块 2(B2)和区块 3(B3)都会在三个节点( B2 复制到节点 1、节点 3 和节点 4,B3 复制到节点 1 、节点 2 和节点 3 )上进行复制。区块的元数据(文件名、区块、位置、创建的日期和大小)会存储在管理节点中,如上图所示。HDFS 具有较大的区块大小,从而减少了读取完整文件所需的磁盘寻道次数。
这样创建出的某个文件对用户来说似乎像是单个文件。不过,它是作为区块存储在数据节点上,还有元数据存储在管理节点中。如果我们由于任何原因丢失了管理节点,存储在数据节点上的区块就会变得无用,因为没有办法识别属于该文件名的区块。因此,创建管理节点的高可用性和元数据的备份在任何 Hadoop 集群中都是非常重要的。
2.1.2 HDFS 的特性
HDFS 正在成为标准的企业级大数据存储系统,因为它具有无限的可扩展性,同时提供了企业级大数据应用所需的大多数功能。下表列出了 HDFS 的一些重要特性:
2.1.3 MapReduce
MapReduce(MR)是一个框架,用于针对存储在 HDFS 上的 TB 级或 PB 级数据编写批量处理模式的分析应用程序。MR任务通常会利用映射器任务以并行方式处理 HDFS 中的输入文件的每个区块(不包括复制的副本)。MR 框架对映射器的输出进行排序和混排,并将其汇总到化简器任务,从而产生输出。该框架负责计算所需任务的数量、调度任务、监控它们,并在出现故障时重新执行它们。开发人员只需要专注于编写业务逻辑,所有繁杂的工作都由 HDFS 和 MR 框架完成。
例如,在图2-1 中,如果提交了一个处理 File1 的 MR 任务,则将创建一个映射器任务并在节点1、2 或 3 的其中任何一个运行,以实现数据的本地化。对于 File2 的处理,会根据资源的可用性创建两个映射器任务,其中映射器任务 1 会在节点 1、3 或 4 上运行,而映射器任务 2 在节点 1、2 或 3 上运行。映射器的输出会被排序和混排后交给化简器任务。默认情况下,化简器的数量为 1。但是,化简器任务的数量也可以增加,这样就可以在化简器的级别进行并行处理。
2.1.4 MapReduce 的特性
MR为你提供了构建大数据应用程序所需的卓越功能。下表描述了 MR 的主要特性和技术,如排序和连接(join):
2.1.5 MapReduce v1与MapReduce v2对比
Apache Hadoop 的 MapReduce 是一个核心处理引擎,它支持大规模数据负载的分布式处理。MR 已经在 Hadoop 0.23 版本中进行了彻底的改造,现在称为 MapReduce 2.0(MR v2)或 YARN。
MapReduce v1 也称为经典 MapReduce,它有三个主要组成部分:
MapReduce v2 也称为 NextGen,它把资源管理转移到了 YARN,如图2-2 所示。
MapReduce v1 面临的挑战
MapReduce v1 面临三个挑战:
下表显示了 v1 和 v2 之间的差异:
2.1.6 YARN
YARN 是一套资源管理框架,它让企业能够同时以多种方式处理数据,对共享的数据集进行批处理、交互式分析或实时分析。HDFS 为大数据提供了可扩展、具备容错能力且经济实用的存储,而 YARN 为集群提供了资源的管理。图2-3 显示了如何在 Hadoop 2.0 中的 HDFS 和 YARN 框架上运行多个框架的典型情况。YARN 就像一个用于 Hadoop 的操作系统,它可以高效地管理集群中的资源(CPU 和内存)。像 MapReduce 和 Spark 这样的应用程序会请求 YARN 为它的任务分配资源。YARN 会在节点可用的资源总量中按照所请求的内存和虚拟 CPU 数量,在节点上分配容器。
YARN 起初的目的是将作业追踪器 JobTracker / 任务追踪器 TaskTracker (它们是 MapReduce v1 的一部分)这样两个主要职责拆分为单独的实体:
资源管理器会追踪整个集群的资源的可用性,并在应用管理器发出请求时向应用程序提供资源。
应用管理器负责协商应用程序运行其任务所需的资源。应用管理器还跟踪并监控应用程序的进度。请注意,在 MR v1 中,这个监控功能是由任务追踪器和作业追踪器处理的,会导致作业追踪器需要重载。
节点管理器负责启动由资源管理器提供的容器,监控从机节点上的资源使用情况,并向资源管理器报告。
应用程序容器负责运行应用程序的任务。YARN 还具有可插拔的调度器(Fair Scheduler 和 Capacity Scheduler),用来控制不同应用程序的资源分配。YARN 应用程序生命周期的详细步骤如图2-4所示,图中的一个应用程序有两个资源请求:
我们对前面这个图的解释如下所示:
2.1.7 Hadoop上的存储选择
XML 和 JSON 文件是公认的行业标准格式。那么,为什么我们不能在Hadoop 上使用 XML 或 JSON 文件呢?XML 和 JSON 有许多缺点,包括以下几点:
当我们在 Hadoop 上存储数据和构建应用程序时,会遇到一些基本问题:什么样的存储格式对我的应用程序有用?哪种压缩编解码器(codec)适合我的应用程序?Hadoop 为你提供了针对不同用例而构建的各种文件格式。选择正确的文件格式和压缩编解码器可为你正在处理的用例提供最佳性能。让我们逐个讲解这些文件格式,并了解何时使用它们。
1. 文件格式
文件格式可以划分为两类。Hadoop 可以存储所有数据,无论数据存储的格式是怎样的。数据可以使用标准文件格式以原始形式存储,或存储为特殊的 Hadoop 容器文件格式,这些容器文件格式在某些特定用例的场景中具有优势,因为当数据被压缩时它们仍然是可以拆分的。总体而言,有两种类型的文件格式:标准文件格式和 Hadoop文件格式。
让我们来看一下 Hadoop 文件格式的特性及其适用的用例。
顺序文件
顺序文件把数据存储为二进制的键值对。它仅支持 Java 语言,不支持模式演进。即使数据是被压缩的,它也支持分拆文件。
让我们看一下顺序文件的用例:
协议缓冲区和thrift
协议缓冲区(protocol buffer)由Google开发,并于2008年开源。thrift则是由 Facebook开发的,提供了比协议缓冲区更多的功能和语言支持。它们都是在通过网络发送数据时提供高性能的序列化框架。Avro则是专为Hadoop设计的序列化专用格式。
协议缓冲区和 thrift 的一般使用模式如下:
Avro
Avro 是一种基于行的数据序列化系统,用于存储并通过网络高效地发送数据。Avro 具备以下的优势:
Avro 的一个用例如下所示:
Parquet
Parquet 是一种列格式,可以在不符合查询条件的列上跳过读写和解压缩(如果适用的话)。它在对列进行压缩方面通常也很有效,因为在同一列里的列数据比由行组成的区块中的数据更为相似。
Parquet 的一个用例如下所示:
RCFile 和 ORCFile
记录列文件(Record Columnar File,RCFile)是 Hive 的首选柱形格式,提供了高效的查询处理。在 Hive 0.11中引入了优化行列(Optimized Row Columnar,ORC)格式,具备比 RCFile 格式更好的压缩和效率。ORCFile 具有轻量级索引,可以利用它跳过不相关的列。
ORC 和 Parquet文件的一个用例如下所示:
2. 压缩格式
Hadoop 存储可以使用各种压缩格式。不过,如果 Hadoop 存储很便宜的话,为什么还需要压缩我们的数据呢?以下列表回答了你的问题:
不过,数据压缩和解压缩会增加 CPU 时间。了解这些权衡因素对于优化在 Hadoop 上运行的作业的性能非常重要。
标准压缩格式
下表显示了Hadoop平台上可用的标准压缩格式:
用于压缩的推荐使用模式如下: