掌握excel固定单元格技巧,让数据管理更高效
790
2022-05-29
1.1.2 Hadoop简介
Hadoop是一个数据存储与数据处理平台,项目起源于数据本地化的核心概念。数据本地化(data locality)指在数据存储的地方处理数据,让计算靠近数据,而不是像数据库管理系统那样向数据存储请求数据,发到远端数据处理系统或者主机进行计算。
由于网络应用快速发展导致大数据的出现,在计算时通过网络传输大量数据的传统方式不再高效、实用,有时甚至无法实现。
Hadoop让大型数据集可以在各节点上通过无共享(shared nothing)的方式在本地处理,每个节点可以独立处理比整个数据集小得多的一个子集,而无须与其他节点通信。这种特性是通过分布式文件系统实现的。
Hadoop在执行写操作时是没有结构信息的。这就是所谓的读时模式(schema-on-read)系统。这意味着Hadoop可以存储和处理各种各样的数据,无论是无结构的文本文档,还是半结构化的JSON(JavaScript Object Notation)文档或XML文档,又或是从关系型数据库中提取的完全结构化的数据。
读时模式系统和我们所熟知的关系型数据库有着本质区别。关系型数据库通常被认为属于写时模式(schema-on-read),数据一般具有强结构性,表结构是预定义的,并且在INSERT、UPDATE和UPSERT等操作时要求结构完全匹配。
类似HBase或者Cassandra这样的NoSQL平台也属于读时模式系统。你会在第6章了解到更多NoSQL平台相关的内容。
由于在Hadoop的写操作时并没有明确的结构信息,所以写出的文件并没有索引、统计信息,或是数据库系统常用的其他一些用于优化查询操作、筛选或减少返回到客户端的数据量的数据结构。这进一步凸显了数据本地化的必要性。
Hadoop的设计思路是通过对大型问题分而治之的方法,运用数据本地化与无共享的概念,将大型问题切分成一系列小规模的问题,实现“大海里捞针”。Spark也使用了非常相似的概念。
1.Hadoop核心组件
Hadoop包含两个核心组件:HDFS(Hadoop分布式文件系统)和YARN(Yet Another Resource
Negotiator,另一个资源协调器)。HDFS是Hadoop
的存储系统,而YARN可以当作Hadoop处理或者资源调度的子系统(如图1.1所示)。
这两个组件相互独立,可以各自运行在自己的集群上。当HDFS集群和YARN集群部署在一起时,我们把这两个系统的组合称为一个Hadoop集群。Hadoop的这两个核心组件都可以被Spark利用起来,本章的后续部分会进一步讨论。
集群术语
集群(cluster)指一组协同工作执行诸如计算或处理功能的系统。集群中的单个服务器称为节点(node)。
集群可以有多种拓扑和通信模型。其中一种模型为主-从模型。主-从模型是由一个进程控制其他至少一个进程的通信方式。在某些系统中,直到运行时或处理任务时,主节点才从一组可用的进程中选出来的。但在其他情况下,比如HDFS集群或者YARN集群里,主进程和从进程的角色都是预先分配好的,在集群整个生命周期里不会发生变化。
任何以某种方式与Hadoop交互或者整合的项目都称为Hadoop“生态圈”项目,比如Flume、Sqoop等数据接入项目,或者Pig、Hive等数据分析工具。Spark可以当作一个Hadoop生态圈项目,不过这有一些争议,因为Spark无须Hadoop也能运行。
2.HDFS:文件、数据块、元数据
HDFS是一种虚拟文件系统,其中的文件由分布在集群中至少一个节点上的数据块(block)组成。在把文件上传到文件系统的时候,文件会按照配置好的数据块大小进行分割,这样的过程称为数据接入(ingestion)。分割后得到的数据块分布在整个集群的节点上,每个数据块会重复出现在几个节点上,以此实现容错,并提高本地处理数据的概率(设计目的是“让计算靠近数据”)。HDFS数据块由HDFS集群从节点的DataNode进程存储和管理。
DataNode进程是HDFS从节点守护进程,运行在HDFS集群中至少一个节点上。DataNode负责管理数据块存储和数据读写访问,还有数据块复制,这也是数据接入过程的一部分,如图1.2所示。
图1.2 HDFS数据接入、数据块分布和复制
文件系统的元数据中存储着文件系统的信息,还有其中的目录、文件信息,以及组成文件的物理数据块信息。HDFS的主节点进程称为NameNode,文件系统元数据就存储在NameNode进程的常驻内存里。HDFS集群的NameNode通过类似于关系型数据库事务日志的日志功能为元数据提供持久性。NameNode负责为HDFS客户端提供读写数据块的具体位置,这样客户端就可以直接和DataNode通信并进行数据操作。图1.3呈现了HDFS读操作的示意图,而图1.4解析了HDFS写操作的过程。
3.用YARN进行应用调度
YARN管理并协调着Hadoop里的数据处理。在这种场景下,数据一般都以HDFS作为输入输出源。YARN集群架构使用的是与HDFS类似的主从集群框架,主节点守护进程称为ResouceManager,而从节点守护进程称为NodeManager,至少有一个,运行在集群的从节点上。
图1.3 HDFS读操作解析
图1.4 HDFS写操作解析
ResourceManager负责为集群上运行的应用分配集群计算资源。资源以容器作为单位分配,容器有预定义好的CPU核心数和内存限制。容器分配的最大最小阈值等都可以在集群中进行配置。使用容器可以保障进程间的资源隔离。
ResourceManager也会在随应用退出并释放所占资源时维护集群剩余可用的资源量,同时还跟踪集群上当前运行的应用的状态。ResourceManager默认会在所运行主机的8088端口上提供内嵌的网页版用户交互界面,这对于查看应用状态很有用,无论应用正在运行、运行完成或是运行失败,如图1.5所示。这个用户界面在管理YARN集群上运行的Spark应用状态时需要经常用到。
图1.5 YARN资源管理器ResourceManager用户界面
客户端把应用(比如一个Spark应用程序)提交到ResourceManager,然后ResourceManager首先从集群中一个可用的NodeManager里分配出应用的第一个容器,作为应用的委托进程,这个进程就是ApplicationMaster。然后ApplicationMaster继续为应用申请运行任务所需的其余容器。
NodeManager是YARN从节点守护进程,管理从节点主机上运行的容器。容器用于执行应用里的任务。回想一下无共享的概念,Hadoop解决大规模问题的思路是“分而治之”,大规模问题被分解为一堆小规模任务,很多任务可以并发执行。这些任务都运行在容器里,该容器由运行着NodeManager进程的主机分配。
大多数容器只是运行任务。不过,ApplicationMaster会额外负责管理整个应用。前面介绍过,ApplicationMaster是由ResourceManager从NodeManager上分配的第一个容器。它的任务是规划整个应用,包括决定需要什么资源(通常基于要处理多少数据)以及为应用的各阶段(稍后会介绍)安排资源。ApplicationMaster代表应用向ResourceManager申请这些资源。ResourceManager从NodeManager上(可以是同一个NodeManager,也可以是其他的NodeManager)给ApplicationMaster分配资源以供该应用使用,直到该应用退出。后面会详细介绍,对于Spark而言,ApplicationMaster会监控任务、阶段(一组可以并发执行的Spark任务)还有依赖的进度。综述信息会传给ResouceManager,展示在前面介绍过的用户界面中。图1.6展示了YARN应用提交、调度和执行的过程的概况。
图1.6描述的过程如下所述:
1)客户端把应用提交给ResourceManager。
2)ResourceManager在一个拥有足够容量的NodeManager上分配出一个ApplicationMaster进程。
3)ApplicationMaster向ResourceManager申请容器用于在NodeManager上运行任务(运行着ApplicationMaster的NodeManager也可以再分配任务容器),并且把应用的处理任务分发到这些NodeManager提供的任务容器里。
4)各NodeManager把任务尝试的状态和进度汇报给ApplicationMaster。
图1.6 YARN中的应用提交、调度,以及执行(Hadoop 2.6)
5)ApplicationMaster向ResourceManager汇报应用的进度和状态。
6)ResourceManager向客户端汇报应用进度、状态以及执行结果。
我们会在第3章中探索如何利用YARN来调度和协调运行在Hadoop集群上的Spark程序。
Hadoop MapReduce(映射-归约)
谷歌在2003年发布的白皮书《The Google File System》影响了HDFS项目,紧接着谷歌又在2004年12月发布了题为《MapReduce: Simplified Data Processing on Large Clusters》的白皮书。MapReduce的白皮书从高层描述了谷歌的数据处理方式,尤其是搜索引擎中的海量文本数据的索引和排位。MapReduce成为了Hadoop的核心编程模型,最终也启发并影响了Spark项目。
Spark python spark Python
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。