1.大数据概述

1.列举Hadoop生态的各个组件及其功能、以及各个组件之间的相互关系,以图呈现并加以文字描述。


Hadoop的生态圈如图1所示:
图1 Hadoop生态圈

从图上我们可以很直观的发现,在hadoop生态中有着大大小小不同的组件,例如HDFS、Yarn、Zookeeper、Sqoop、Flume等多个组件。随着我们需要处理的任务不同,各种组件之间的联系和新组件的出现愈加频繁。

(1)HDFS---分布式文件系统

 HDFS是Hadoop组件的核心之一,是整个hadoop体系的基础,是用来负责数据的存储与管理功能的。
HDFS是高度容错设计和适合在低成本的硬件上部署。HDFS能够提供高吞吐量访问应用程序数据,所以其适用于大型数据集的应用程序。其运行原理如图2所示。

HDFS最初建造的基础设施 Apache Nutch web搜索引擎项目。 HDFS现在是一个Apache Hadoop子项目。


图2 HDFS原理图

(图片来源:HDFS官网

client:用来切分文件,会在访问HDFS时,先与NameNode交互,获取目标文件的位置信息,然后与DataNode交互后来读写数据

NameNode:也就是常说的Master节点,每个HDFS集群只有一个,作为HDFS中的主节点,其作用是用来管理HDFS的名称空间和数据块映射信息,配置信息和负责去处理Client的请求。

DataNode:也就是slave节点,存储实际数据,数量没有进行限制,作为HDFS的子节点,能够发送状态信息到Master节点,在HDFS中,默认一个文件会备份3份在不同的DataNode中,实现高可靠性和容错性。

Secondary NameNode:辅助NameNode,实现高可靠性,定期合并fsimage和fsedits,推送给NameNode;紧急情况下辅助和恢复NameNode,但Secondary NameNode并非NameNode的热备份。

(2)Yarn---资源管理框架

 Yarn是一种新的Hadoop资源管理器,因为原始的Hadoop不支持多计算框架而提出的,也可以看成是MapReduce的第二代,是由第一代MapReduce的基础上演变而来的。YARN的基本思想就是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离,创建个全新的资源管理,和大量的ApplicationMaster。每个应用程序的ApplicationMaster实际上是一个框架具体的图书馆,负责谈判资源从ResourceManager和处理NodeManager执行和监控任务。

在古老的 Hadoop1.0 中,MapReduce 的 JobTracker 负责了太多的工作,包括资源调度,管理众多的 TaskTracker 等工作。这自然是不合理的,于是 Hadoop 在 1.0 到 2.0 的升级过程中,便将 JobTracker 的资源调度工作独立了出来,而这一改动,直接让 Hadoop 成为大数据中最稳固的那一块基石。,而这个独立出来的资源管理框架,就是 Yarn 。


图3 Hadoop Yarn

(图片来源:Yarn官网

ResourceManager:也就是上图中中间的那个RM,是用来负责资源管理的,在整个系统有且只有一个RM,用来调控资源额度

ApplicationMaster:每当Client提交一个Application时候,就会新建一个AM。由这个 AM去与RM申请容器资源,获得资源后会将要运行的程序发送到容器上启动,然后进行分布式计算。

NodeManager:NodeManager是RM在每台机上的代理,用来负责容器的管理,并监控他们的资源使用情况


(3)Mapreduce---分布式计算框架

 HadoopMapReduce是针对谷歌MapReduce的开源实现。MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算,它将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数一一Map和Reduce上,并且允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,并将其运行于廉价计算机集群上,完成海量数据的处理。通俗地说MapReduce的核心思想就是“分而治之”。其架构如图4所示,运行过程如图5所示。


图4 Mapreduce架构


图5 Mapreduce 执行过程

(图片来源:Mapreduce执行过程

Jobtracker:master节点,只有一个,管理所有作业,任务/作业的监控,错误处理等,将任务分解成一系列任务,并分派给Tasktracker。

Tacktracker:slave节点,运行 Map task和Reduce task;并与Jobtracker交互,汇报任务状态。

Map task:解析每条数据记录,传递给用户编写的map()函数并执行,将输出结果写入到本地磁盘(如果为map—only作业,则直接写入HDFS)。

Reduce task:从Map 它深刻地执行结果中,远程读取输入数据,对数据进行排序,将数据分组传递给用户编写的Reduce()函数执行。


(4)Sqoop---数据同步工具

 Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据。

图6 Sqoop 工作原理

(图片来源:Sqoop 工作原理

sqoop1 import原理:从传统数据库获取元数据信息(schema、table、field、field type),把导入功能转换为只有Map的Mapreduce作业,在mapreduce中有很多map,每个map读一片数据,进而并行的完成数据的拷贝。


sqoop1 export原理:获取导出表的schema、meta信息,和Hadoop中的字段match;多个map only作业同时运行,完成hdfs中数据导出到关系型数据库中。

(5)Hbase---分布式列存数据库

 HBase利用MapReduce来处理HBase中的海量数据,实现高性能计算;利用 Zookeeper 作为协同服务,实现稳定服务和失败恢复;使用HDFS作为高可靠的底层存储,利用廉价集群提供海量数据存储能力,当然,HBase也可以在单机模式下使用,直接使用本地文件系统而不用 HDFS 作为底层数据存储方式,不过,为了提高数据可靠性和系统的健壮性,发挥HBase处理大量数据等功能,一般都使用HDFS作为HBase的底层数据存储方式。此外,为了方便在HBase上进行数据处理,Sqoop为HBase提供了高效、便捷的RDBMS数据导入功能,Pig和Hive为HBase提供了高层语言支持。

图7 Hbase架构

(图片来源:Hbase架构

(6)Zookeeper---分布式协作服务

 在分布式系统中如何就某个值(决议)达成一致,是一个十分重要的基础问题。ZooKeeper 作为一个分布式的服务框架,解决了分布式计算中的一致性问题。

在此基础上,ZooKeeper 可用于处理分布式应用中经常遇到的一些数据管理问题,如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

ZooKeeper 常作为其他 Hadoop 相关项目的主要组件,发挥着越来越重要的作用。

图8 Zookeeper 数据结构

(图片来源:Zookeeper 数据结构

(7)Hive---基于Hadoop的数据仓库

 Hive是—个基于Hadoop的数据仓库工具,可以用于对Hadoop文件中的数据集进行数据整理、特殊查询和分析存储。Hive的学习门槛比较低,因为它提供了类似于关系数据库SQL语言的查询语言——HiveQL,可以通过HiveQL语句快速实现简单的MapReduce统计,Hive自身可以将HiveQL语句转换为MapReduce任务进行运行,而不必开发专门的MapReduce应用,因而十分适合数据仓库的统计分析。

图9 Hive原理

(图片来源:Design - Apache Hive

(8)Flume---日志收集工具

 Flume是一个可扩展、适合复杂环境的海量日志收集系统。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。

同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。

Flume以Agent为最小的独立运行单位,一个Agent就是一个JVM。单个Agent由Source、Sink和Channel三大组件构成

图9 Hive原理

(图片来源:Apache Flume

Source:从客户端收集数据,并传递给Channel。

Channel:缓存区,将Source传输的数据暂时存放。

Sink:从Channel收集数据,并写入到指定地址。

Event:日志文件、avro对象等源文件。

(9)Oozie---作业流调度系统

 Oozie是一个管理 Apache Hadoop 作业的工作流调度系统。Oozie的 workflow jobs 是由 actions 组成的 有向无环图(DAG)。Oozie的 coordinator jobs 是由时间 (频率)和数据可用性触发的重复的 workflow jobs 。
Oozie与Hadoop生态圈的其他部分集成在一起,支持多种类型的Hadoop作业(如Java map-reduce、流式map-reduce、Pig、Hive、Sqoop和Distcp)以及特定于系统的工作(如Java程序和shell脚本)。
Oozie是一个可伸缩、可靠和可扩展的系统。

图10 Oozie组件架构图

(图片来源:Oozie组件架构图)


Workflow:工作流,由我们需要处理的每个工作组成,进行需求的流式处理。

Coordinator:协调器,可以理解为工作流的协调器,可以将多个工作流协调成一个工作流来进行处理。

Bundle:捆,束。将一堆的coordinator进行汇总处理。

(10)Spark---内存计算

 Spark 是用于大规模数据处理的统一分析引擎。它提供 Java、Scala、Python 和 R 中的高级 API,以及支持通用执行图的优化引擎。它还支持一组丰富的高级工具,包括用于 SQL 和结构化数据处理的Spark SQL 、用于机器学习的MLlib、用于图形处理的 GraphX 以及用于增量计算和流处理的结构化流。

图11 Hive原理

(图片来源:Spark简介以及架构)

SparkCore:将分布式数据抽象为弹性分布式数据集,实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。

SparkSQL:Spark Sql 是用来操作结构化数据的,可以使用sql语句来查数据,同时它也支持多种数据源(Hive表,parquest以及JSON等)。

SparkStreaming: 实时数据进行流式计算。

MLlib:提供机器学习算法的库。

GraphX:提供分布式图计算框架,能进行图计算。

BlinkDB:用于在海量数据SQL的查询。

Tachyon:以内存为中心高容错的的分布式文件系统。


2.对比Hadoop与Spark的优缺点。

Hadoop:
Hadoop是Java构建的,可通过多种编程语言访问,用于通过Thrift客户端编写 MapReduce 代码,例如Python等。我们常说Hadoop有缺陷,这个缺陷指的是它里面的MapReduce框架问题太多,所以Hadoop的缺陷也可以理解成MapReduce框架的缺陷。

优点:
MapReduce里会把我们所有的复杂的业务逻辑都分解成Map函数和Reduce函数。写来写去就只写这两个函数,这个特性无疑是会降低了分布式应用开发的复杂性,无论多复杂的应用,都能给你抽象成这两个函数。

缺点:
而它的劣势是,有时候实际中我们的需求,有时候是无法通过Map函数和Reduce函数来简单解释的,所以它第一个缺陷就是,限制了表达能力
其次就是MapReduce的磁盘IO开销特别大,在计算过程会不断生成中间结果,这些中间结果会不断的写入磁盘。
第三点就是延迟特别高,我们都知道MapReduce分为两个阶段,也就是Map阶段和Reduce阶段,所有的任务map一下,得到中间结果让reduce处理,由于数据集较大,会分成多个Map和多个Reduce,可以并行处理。但这里,会做完所有的Map操作,才会开启Reduce操作。导致Reduce必须等待Map处理结果。
第四点就是其衔接的IO开销大。因为Map后的结果不是直接给Reduce的,而是由Map后的结果写入磁盘后,Reduce再从磁盘中读取。

Spark:
Spark是有人通过发现MapReduce的缺陷后加以改进后形成的。所以可以看成是对Hadoop进行缺陷改进的继承。
优点:
它对整个的MapReduce的两个函数进行了扩充,不进map和reduce继承下来,还扩充了filter、join、groupby等操作。使得其表达能力提升了很多。
第二点,他可以人为的通过语句让结果缓存在内存里,在第二次访问的时候获得中间结果的延迟就大大降低了。尤其对迭代运算非常关键。运行效率高很多。例如在逻辑斯蒂回归和模拟退火算法中需要反复迭代的时候,用MapReduce去迭代效率就会非常低。
第三点,能很大程度的避免数据落地。不写磁盘,可以形成一个有向无关图,然后形成流水线优化,就是一个操作的结果马上作为第二个操作的输入,就可以直接完成数据的交换,就例如图12所示。而MapReduce的执行结果如图13所示。

图12 Spark执行流程

图13 hadoop MapReduce执行流程

3.如何实现Hadoop与Spark的统一部署?

由于Hadoop生态系统中的一些组件所实现的功能,目前还是无法由Spark取代的。例如Spark无法做到毫秒级响应。另一方面,企业许多现有应用是基于Hadoop开发的,技术转换成用Spark开发需要一定成本。所以可以把Hadoop MapReduce、spark都部署在YARN资源管理框架上。实现Hadoop和spark的统一部署。如图14所示。

图14 Hadoop和spark的统一部署

posted @ 2022-02-24 20:39  Yeav  阅读(178)  评论(0编辑  收藏  举报