终于有人把 Hadoop 生态的核心讲明白了!

大数据 Hadoop
Hadoop是一个由Apache基金会开发的分布式系统基础架构。开发人员可以在不了解分布式底层细节的情况下开发分布式程序,充分利用集群的威力进行高速并行运算以及海量数据的分布式存储。

[[423200]]

Hadoop是一个由Apache基金会开发的分布式系统基础架构。开发人员可以在不了解分布式底层细节的情况下开发分布式程序,充分利用集群的威力进行高速并行运算以及海量数据的分布式存储。Hadoop大数据技术架构如图1所示。

图1 Hadoop大数据技术架构

然而,Hadoop不是一个孤立的技术,而是一套完整的生态圈,如图2所示。在这个生态圈中,Hadoop最核心的组件就是分布式文件系统HDFS和分布式计算框架MapReduce。HDFS为海量的数据提供了存储,是整个大数据平台的基础,而MapReduce则为海量的数据提供了计算能力。在它们之上有各种大数据技术框架,包括数据仓库Hive、流式计算Storm、数据挖掘工具Mahout和分布式数据库HBase。此外,ZooKeeper为Hadoop集群提供了高可靠运行的框架,保证Hadoop集群在部分节点宕机的情况下依然可靠运行。Sqoop与Flume分别是结构化与非结构化数据采集工具,通过它们可以将海量数据抽取到Hadoop平台上,进行后续的大数据分析。

图2 Hadoop大数据生态圈

Cloudera与Hortonworks是大数据的集成工具,它们将大数据技术的各种组件集成在一起,简化安装、部署等工作,并提供统一的配置、管理、监控等功能。Oozie是一个业务编排工具,我们将复杂的大数据处理过程解耦成一个个小脚本,然后用Oozie组织在一起进行业务编排,定期执行与调度。

01分布式文件系统

过去,我们用诸如DOS、Windows、Linux、UNIX等许多系统来在计算机上存储并管理各种文件。与它们不同的是,分布式文件系统是将文件散列地存储在多个服务器上,从而可以并行处理海量数据。

Hadoop的分布式文件系统HDFS如图3所示,它首先将服务器集群分为名称节点(NameNode)与数据节点(DataNode)。名称节点是控制节点,当需要存储数据时,名称节点将很大的数据文件拆分成一个个大小为128MB的小文件,然后散列存储在其下的很多数据节点中。当Hadoop需要处理这个数据文件时,实际上就是将其分布到各个数据节点上进行并行处理,使性能得到大幅提升。

图3 分布式文件系统HDFS

同时,每个小文件在存储时,还会进行多节点复制(默认是3节点复制),一方面可以并行读取数据,另一方面可以保障数据的安全,即任何一个节点失效,数据都不会丢失。当一个节点宕机时,如果该节点的数据不足3份,就会立即发起数据复制,始终保持3节点的复制。正因为具有这样高可靠的文件存储,Hadoop的部署不需要备份,也不需要磁盘镜像,在Hadoop集群的各个节点中挂载大容量的磁盘并配置Raid0就可以了。

02分布式计算框架

Hadoop的另一个关键组件是分布式计算框架MapReduce,它将海量数据的处理分布到许多数据节点中并行进行,从而提高系统的运行效率。

MapReduce计算词频的处理过程如图4所示。在这个过程中,首先输入要处理的数据文件,经过Splitting将其拆分到各个节点中,并在这些节点的本地执行Mapping,将其制作成一个Map。不同的任务可以设计不同的Map。譬如,现在的任务是计算词频,因此该Map的key是不同的词,value是1。这样,在后续的处理过程中,将相同词的1加在一起就是该词的词频了。

图4 分布式计算框架MapReduce

Mapping操作执行完以后,就开始Shuffling操作。它是整个执行过程中效率最差的部分,需要在各个节点间交换数据,将同一个词的数据放到同一个节点上。如何有效地降低交换的数据量成为优化性能的关键。接着,在每个节点的本地执行Reducing操作,将同一个词的这些1加在一起,就得到了词频。最后,将分布在各个节点的结果集中到一起,就可以输出了。

整个计算有6个处理过程,那么为什么它的名字叫MapReduce呢?因为其他处理过程都被框架封装了,开发人员只需要编写Map和Reduce过程就能完成各种各样的数据处理。这样,技术门槛降低了,大数据技术得以流行起来。

03优缺点

与传统的数据库相比,MapReduce分布式计算虽然有无与伦比的性能优势,但并不适用于所有场景。MapReduce没有索引,它的每次计算都是“暴力全扫描”,即将整个文件的所有数据都扫描一遍。如果要分析的结果涉及该文件80%以上的数据,与关系型数据库相比,能获得非常优异的性能。如果只是为了查找该文件中的某几十条记录,那么它既耗费资源,性能也没有关系型数据库好。因此,MapReduce的分布式计算更适合在后台对批量数据进行离线计算,即一次性对海量数据进行分析、整理与运算。它并不适用于在前台面向终端用户的在线业务、事务处理与随机查询。

同时,MapReduce更适合对大数据文件的处理,而不适合对海量小文件的处理。因此,当要处理海量的用户文档、图片、数据文件时,应当将其整合成一个大文件(序列文件),然后交给MapReduce处理。唯有这样才能充分发挥MapReduce的性能。

 

本文摘编自《架构真意:企业级应用架构设计方法论与实践》,经出版方授权发布。

 

责任编辑:武晓燕 来源: 数仓宝贝库
相关推荐

2021-10-09 00:02:04

DevOps敏捷开发

2021-06-13 12:03:46

SaaS软件即服务

2022-03-27 20:32:28

Knative容器事件模型

2021-06-29 11:21:41

数据安全网络安全黑客

2020-11-30 08:34:44

大数据数据分析技术

2022-01-05 18:27:44

数据挖掘工具

2021-03-03 21:31:24

量化投资利润

2021-02-14 00:21:37

区块链数字货币金融

2022-07-31 20:29:28

日志系统

2022-04-12 18:29:41

元数据系统架构

2022-04-22 11:26:55

数据管理架构

2022-06-26 18:52:02

Hadoop大数据系统

2021-10-17 20:38:30

微服务内存组件

2020-11-03 07:04:39

云计算公有云私有云

2021-03-25 11:24:25

爬虫技术开发

2021-10-12 18:31:40

流量运营前端

2021-12-03 18:25:56

数据指标本质

2022-04-27 18:25:02

数据采集维度

2022-05-01 22:09:27

数据模型大数据

2020-10-29 06:09:37

数据中台数据大数据
点赞
收藏

51CTO技术栈公众号