《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月前
|
消息中间件 分布式计算 Hadoop
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
37 3
|
5天前
|
存储 分布式计算 资源调度
两万字长文向你解密大数据组件 Hadoop
两万字长文向你解密大数据组件 Hadoop
26 11
|
12天前
|
存储 分布式计算 分布式数据库
深入理解Apache HBase:构建大数据时代的基石
在大数据时代,数据的存储和管理成为了企业面临的一大挑战。随着数据量的急剧增长和数据结构的多样化,传统的关系型数据库(如RDBMS)逐渐显现出局限性。
69 12
|
1月前
|
存储 大数据 数据挖掘
【数据新纪元】Apache Doris:重塑实时分析性能,解锁大数据处理新速度,引爆数据价值潜能!
【9月更文挑战第5天】Apache Doris以其卓越的性能、灵活的架构和高效的数据处理能力,正在重塑实时分析的性能极限,解锁大数据处理的新速度,引爆数据价值的无限潜能。在未来的发展中,我们有理由相信Apache Doris将继续引领数据处理的潮流,为企业提供更快速、更准确、更智能的数据洞察和决策支持。让我们携手并进,共同探索数据新纪元的无限可能!
82 11
|
2月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
101 0
|
2月前
|
分布式计算 大数据 Apache
跨越界限:当.NET遇上Apache Spark,大数据世界的新篇章如何谱写?
【8月更文挑战第28天】随着信息时代的发展,大数据已成为推动企业决策、科研与技术创新的关键力量。Apache Spark凭借其卓越的分布式计算能力和多功能数据处理特性,在大数据领域占据重要地位。然而,对于.NET开发者而言,如何在Spark生态中发挥自身优势成为一个新课题。为此,微软与Apache Spark社区共同推出了.NET for Apache Spark,使开发者能用C#、F#等语言编写Spark应用,不仅保留了Spark的强大功能,还融合了.NET的强类型系统、丰富库支持及良好跨平台能力,极大地降低了学习门槛并拓展了.NET的应用范围。
52 3
|
2月前
|
分布式计算 资源调度 Hadoop
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!
|
2月前
|
存储 SQL 分布式计算
Hadoop生态系统概述:构建大数据处理与分析的基石
【8月更文挑战第25天】Hadoop生态系统为大数据处理和分析提供了强大的基础设施和工具集。通过不断扩展和优化其组件和功能,Hadoop将继续在大数据时代发挥重要作用。
|
2月前
|
Java Spring API
Spring框架与GraphQL的史诗级碰撞:颠覆传统,重塑API开发的未来传奇!
【8月更文挑战第31天】《Spring框架与GraphQL:构建现代API》介绍了如何结合Spring框架与GraphQL构建高效、灵活的API。首先通过引入`spring-boot-starter-data-graphql`等依赖支持GraphQL,然后定义查询和类型,利用`@GraphQLQuery`等注解实现具体功能。Spring的依赖注入和事务管理进一步增强了GraphQL服务的能力。示例展示了从查询到突变的具体实现,证明了Spring与GraphQL结合的强大潜力,适合现代API设计与开发。
59 0
|
2月前
|
SQL 分布式计算 数据可视化
基于Hadoop的大数据可视化方法
【8月更文第28天】在大数据时代,有效地处理和分析海量数据对于企业来说至关重要。Hadoop作为一个强大的分布式数据处理框架,能够处理PB级别的数据量。然而,仅仅完成数据处理还不够,还需要将这些数据转化为易于理解的信息,这就是数据可视化的重要性所在。本文将详细介绍如何使用Hadoop处理后的数据进行有效的可视化分析,并会涉及一些流行的可视化工具如Tableau、Qlik等。
65 0

推荐镜像

更多
下一篇
无影云桌面