《Spark与Hadoop大数据分析》——2.1 Apache Hadoop概述

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 本节书摘来自华章计算机《Spark与Hadoop大数据分析》一书中的第2章,第2.1节,作者 [美]文卡特·安卡姆(Venkat Ankam),译 吴今朝,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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 带来的主要是以下三个组件:

image

让我们来了解一下 Hadoop 在经济、业务和技术领域应用的驱动因素:

image

Hadoop 的典型特点如下所示:

image

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 具有较大的区块大小,从而减少了读取完整文件所需的磁盘寻道次数。

image

这样创建出的某个文件对用户来说似乎像是单个文件。不过,它是作为区块存储在数据节点上,还有元数据存储在管理节点中。如果我们由于任何原因丢失了管理节点,存储在数据节点上的区块就会变得无用,因为没有办法识别属于该文件名的区块。因此,创建管理节点的高可用性和元数据的备份在任何 Hadoop 集群中都是非常重要的。

2.1.2 HDFS 的特性

HDFS 正在成为标准的企业级大数据存储系统,因为它具有无限的可扩展性,同时提供了企业级大数据应用所需的大多数功能。下表列出了 HDFS 的一些重要特性:

image
image

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):

image

2.1.5 MapReduce v1与MapReduce v2对比

Apache Hadoop 的 MapReduce 是一个核心处理引擎,它支持大规模数据负载的分布式处理。MR 已经在 Hadoop 0.23 版本中进行了彻底的改造,现在称为 MapReduce 2.0(MR v2)或 YARN。

MapReduce v1 也称为经典 MapReduce,它有三个主要组成部分:

image

MapReduce v2 也称为 NextGen,它把资源管理转移到了 YARN,如图2-2 所示。

MapReduce v1 面临的挑战

MapReduce v1 面临三个挑战:

image
image

image

下表显示了 v1 和 v2 之间的差异:

image

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 的一部分)这样两个主要职责拆分为单独的实体:

image
image
image

资源管理器会追踪整个集群的资源的可用性,并在应用管理器发出请求时向应用程序提供资源。

应用管理器负责协商应用程序运行其任务所需的资源。应用管理器还跟踪并监控应用程序的进度。请注意,在 MR v1 中,这个监控功能是由任务追踪器和作业追踪器处理的,会导致作业追踪器需要重载。

节点管理器负责启动由资源管理器提供的容器,监控从机节点上的资源使用情况,并向资源管理器报告。

应用程序容器负责运行应用程序的任务。YARN 还具有可插拔的调度器(Fair Scheduler 和 Capacity Scheduler),用来控制不同应用程序的资源分配。YARN 应用程序生命周期的详细步骤如图2-4所示,图中的一个应用程序有两个资源请求:

我们对前面这个图的解释如下所示:

image
image
image

2.1.7 Hadoop上的存储选择

XML 和 JSON 文件是公认的行业标准格式。那么,为什么我们不能在Hadoop 上使用 XML 或 JSON 文件呢?XML 和 JSON 有许多缺点,包括以下几点:

image

当我们在 Hadoop 上存储数据和构建应用程序时,会遇到一些基本问题:什么样的存储格式对我的应用程序有用?哪种压缩编解码器(codec)适合我的应用程序?Hadoop 为你提供了针对不同用例而构建的各种文件格式。选择正确的文件格式和压缩编解码器可为你正在处理的用例提供最佳性能。让我们逐个讲解这些文件格式,并了解何时使用它们。

1. 文件格式

文件格式可以划分为两类。Hadoop 可以存储所有数据,无论数据存储的格式是怎样的。数据可以使用标准文件格式以原始形式存储,或存储为特殊的 Hadoop 容器文件格式,这些容器文件格式在某些特定用例的场景中具有优势,因为当数据被压缩时它们仍然是可以拆分的。总体而言,有两种类型的文件格式:标准文件格式和 Hadoop文件格式。

image

让我们来看一下 Hadoop 文件格式的特性及其适用的用例。

顺序文件

顺序文件把数据存储为二进制的键值对。它仅支持 Java 语言,不支持模式演进。即使数据是被压缩的,它也支持分拆文件。

让我们看一下顺序文件的用例:

image

image

image

协议缓冲区和thrift

协议缓冲区(protocol buffer)由Google开发,并于2008年开源。thrift则是由 Facebook开发的,提供了比协议缓冲区更多的功能和语言支持。它们都是在通过网络发送数据时提供高性能的序列化框架。Avro则是专为Hadoop设计的序列化专用格式。

协议缓冲区和 thrift 的一般使用模式如下:

image

Avro

Avro 是一种基于行的数据序列化系统,用于存储并通过网络高效地发送数据。Avro 具备以下的优势:

image

Avro 的一个用例如下所示:

image

Parquet

Parquet 是一种列格式,可以在不符合查询条件的列上跳过读写和解压缩(如果适用的话)。它在对列进行压缩方面通常也很有效,因为在同一列里的列数据比由行组成的区块中的数据更为相似。

Parquet 的一个用例如下所示:

image
image

RCFile 和 ORCFile

记录列文件(Record Columnar File,RCFile)是 Hive 的首选柱形格式,提供了高效的查询处理。在 Hive 0.11中引入了优化行列(Optimized Row Columnar,ORC)格式,具备比 RCFile 格式更好的压缩和效率。ORCFile 具有轻量级索引,可以利用它跳过不相关的列。

ORC 和 Parquet文件的一个用例如下所示:

image

2. 压缩格式

Hadoop 存储可以使用各种压缩格式。不过,如果 Hadoop 存储很便宜的话,为什么还需要压缩我们的数据呢?以下列表回答了你的问题:

image

不过,数据压缩和解压缩会增加 CPU 时间。了解这些权衡因素对于优化在 Hadoop 上运行的作业的性能非常重要。

标准压缩格式

下表显示了Hadoop平台上可用的标准压缩格式:

image

用于压缩的推荐使用模式如下:

image

image

相关文章
|
2月前
|
消息中间件 分布式计算 大数据
大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录
大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录
67 5
|
2月前
|
存储 SQL 分布式计算
大数据-162 Apache Kylin 全量增量Cube的构建 Segment 超详细记录 多图
大数据-162 Apache Kylin 全量增量Cube的构建 Segment 超详细记录 多图
58 3
|
25天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
86 2
|
2月前
|
Java 大数据 数据库连接
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
29 2
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
|
2月前
|
SQL 分布式计算 NoSQL
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
32 1
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
|
25天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
63 1
|
2月前
|
分布式计算 大数据 Apache
利用.NET进行大数据处理:Apache Spark与.NET for Apache Spark
【10月更文挑战第15天】随着大数据成为企业决策和技术创新的关键驱动力,Apache Spark作为高效的大数据处理引擎,广受青睐。然而,.NET开发者面临使用Spark的门槛。本文介绍.NET for Apache Spark,展示如何通过C#和F#等.NET语言,结合Spark的强大功能进行大数据处理,简化开发流程并提升效率。示例代码演示了读取CSV文件及统计分析的基本操作,突显了.NET for Apache Spark的易用性和强大功能。
39 1
|
2月前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
61 1
|
2月前
|
SQL 分布式计算 大数据
大数据-160 Apache Kylin 构建Cube 按照日期构建Cube 详细记录
大数据-160 Apache Kylin 构建Cube 按照日期构建Cube 详细记录
43 2
|
2月前
|
存储 大数据 分布式数据库
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
37 1

推荐镜像

更多
下一篇
无影云桌面