Hadoop知识回顾一

近来心血来潮,考虑将过去两年学习的一些知识回顾一下,一来巩固知识,再来希望能够对过去的知识盲点有所领悟。本篇文章仅是对一些概念性的知识进行片面的回顾,建议有基础的同学可以多看看官方文档。

1.环境

虽然hadoop也能安装在windows环境下,不过我们无论是在生产还是工作调试,都会在linux环境下,而且linux基本知识是作为一个程序员必备也是必须熟悉的知识,因此还是建议将hadoop安装在linux环境下,精力所限,后期我会慢慢附上linux(centos)安装教程,以及hadoop的安装教程(standalone,伪分布式安装、完全分布式安装(HA))。

CentOS7安装教程:https://blog.csdn.net/m0_37298602/article/details/105187796

hadoop安装(standalone):https://blog.csdn.net/m0_37298602/article/details/105211610

2.hadoop是什么

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

这是摘自百科的词条。

Apache™Hadoop®项目开发了用于可靠,可扩展的分布式计算的开源软件。

Apache Hadoop软件库是一个框架,该框架允许使用简单的编程模型跨计算机集群对大型数据集进行分布式处理。 它旨在从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。 库本身不用于依靠硬件来提供高可用性,而是设计用于检测和处理应用程序层的故障,因此可以在计算机集群的顶部提供高可用性服务,而每台计算机都容易出现故障。

这是摘自hadoop官网

这里我不想多说,对于初学的的入门者来说,过多的解释容易对这个工具的意义混淆。我们就直接说hadoop我们最常用的基础模块HDFS,hadoop distributed file system,顾名思义,就是hadoop的分布式文件系统,说到底就是一个文件系统,不过这个文件系统有点特殊:分布式的。

我们为什么需要hdfs呢?因为在生产环境中,单机存储是非常有限的,我们面临存储瓶颈,基于这一痛点,Apache基金会开发了hadoop这个分布式文件系统。

3.hadoop的优势

HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。

Hadoop是一个能够对大量数据进行分布式处理软件框架。 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理 。

上面仍是摘自百科。

其实说到底就是hdfs对硬件的要求并不高,可伸缩能力强(即集群扩张),并且可靠性高(通过副本的形式)。

所谓的高效,则体现在数据处理的方面,通过mapreduce的方式进行并行处理大量数据(PB级别),不过mapreduce一般应用于处理离线数据。

4.hadoop的核心组件

    HDFS:Hadoop Distributed File System hadoop分布式文件系统

    YARN:Yet Another Resource Negotiator 资源调度系统

    MapReduce  分布式运算框架(映射-->归约 or 分组-->合并)

   现在也许对下面两个组件不太了解,不要紧,通过下面的文章,让你逐步了解它的用途,现在只需有这么一个概念即可。

5.HDFS架构

HDFS体系结构

上述hdfs架构图取自hadoop官方文档

 

hdfs是主/从架构。HDFS集群包含单个NameNode,NameNode运行在一个Master Service(主服务器)上,一个Master Server管理文件系统的namespace并控制客户端对文件的访问。此外,集群还有许多DataNode,通常是集群中的每个节点运行一个DataNode,它们管理存储到它们所运行的节点上的数据。通常一个文件被分成一个或多个块,这些块存储在一组DataNode中。NameNode执行文件系统名称空间操作,如打开、关闭和重命名文件和目录。它还确定块到DataNode的映射。DataNode负责处理来自文件系统客户机的读和写请求。DataNode还根据来自NameNode的指令执行块创建、删除和复制。

文件系统名称空间

HDFS支持传统的分层文件组织。用户或应用程序可以创建目录并将文件存储在这些目录中。文件系统名称空间层次结构与大多数其他现有文件系统相似;可以创建和删除文件,将文件从一个目录移动到另一个目录,或重命名文件。HDFS支持用户配额和访问权限。HDFS不支持硬链接或软链接。但是,HDFS体系结构并不排除实现这些特性。

虽然HDFS遵循文件系统的命名约定,但是某些路径和名称(例如/)。保留和.snapshot)是保留的。透明加密和快照等功能使用保留的路径。

NameNode维护文件系统名称空间。对文件系统名称空间或其属性的任何更改都由NameNode记录。应用程序可以指定HDFS应该维护的文件副本的数量。一个文件的拷贝数称为该文件的复制因子。此信息由NameNode存储。

 

数据复制

HDFS被设计成在大型集群中的机器之间可靠地存储非常大的文件。它将每个文件存储为块序列。复制文件的块是为了容错。每个文件都可以配置块大小和复制因子。

除了最后一个块之外,文件中的所有块大小都是相同的,而用户可以在append和hsync中添加可变长度块支持之后,不需要按照配置的块大小填写最后一个块,就可以启动一个新块。

应用程序可以指定文件的副本数量。复制因子可以在文件创建时指定,以后可以更改。HDFS中的文件只写一次(附加和截断除外),并且任何时候只有一个写器。

NameNode做出关于复制块的所有决定。它定期从集群中的每个datanode接收一个心跳和一个块报告。接收到心跳意味着DataNode功能正常。块报告包含DataNode上的所有块的列表。

HDFS DataNodes

上面的描述翻译自官方文档最新的3.2.1版本。

说这么多,NameNode其实是运行在主节点上的程序,它管理文件到文件存储路径的映射(其实就是一个元数据管理中心),以及文件及目录基本操作。

DataNode就是数据存储的位置了,它以block(块)为单位存储文件。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是128MB。

HDFS可以指定副本数(副本放置策略很有趣,设计的也很巧妙,有兴趣建议阅读官方文档),从而实现高可靠,以及NameNode对DataNode通过心跳进行健康监听。

HDFS还有很多巧妙的设计这里不再细讲,有兴趣请查看最新版本官方文档。

 

6.MapReduce

一个在hadoop集群上并行处理大量数据的程序。(映射-->归约 or 分组-->合并)

MapReduce作业通常将输入数据集分割成独立的块,这些块由map任务以完全并行的方式进行处理。框架对映射的输出进行排序,然后将其输入到reduce任务中。通常,作业的输入和输出都存储在hdfs文件系统中。该框架负责调度任务、监视任务并重新执行失败的任务。

如果看着不甚理解,不要紧,现在只需要有一个概念即可,后续其他文章会介绍MapReduce入门程序实现,通过程序实例运行更好理解。

MapReduce框架由单个master ResourceManager、集群的每个节点一个worker NodeManager和每个应用程序的MRAppMaster组成。

MRAppMaster是MapReduce的ApplicationMaster实现,它使得MapReduce计算框架可以运行于YARN之上。在YARN中,MRAppMaster负责管理MapReduce作业的生命周期,包括创建MapReduce作业,向ResourceManager申请资源,与NodeManage通信要求其启动Container,监控作业的运行状态,当任务失败时重新启动任务等。

应用程序通过实现适当的接口和/或抽象类来指定输入/输出位置,并提供map和reduce功能。这些和其他作业参数组成了作业配置。

然后Hadoop作业客户端将作业(jar/可执行文件等)和配置提交给ResourceManager, ResourceManager负责将软件/配置分发给工作者,安排任务并监视它们,向作业客户端提供状态和诊断信息。

MapReduce框架只在 <key, value>对上操作,也就是说,框架将作业的输入看作是一组<key, value>对,并生成一组<key, value>对作为作业的输出,可以认为是不同的类型。

键和值的类必须由框架序列化,因此需要实现Writable 接口。此外,键类必须实现WritableComparable 接口,以便根据框架进行排序。

MapReduce作业的输入和输出类型:

(input) <k1, v1> -> map -> <k2, v2> -> combine -> <k2, v2> -> reduce -> <k3, v3> (output)

combine提前对数据处理用来减少数据带宽的占用,一般逻辑与reduce相同。

 

7.YARN

YARN的基本思想是将资源管理和作业调度/监视的功能划分为单独的守护进程。其思想是拥有一个全局的ResourceManager (RM)和每个应用程序的ApplicationMaster (AM)。应用程序可以是单个作业,也可以是一组作业。

ResourceManager和NodeManager构成了数据计算框架。ResourceManager是在系统中的所有应用程序之间仲裁资源的最终权威(即资源调度中心)。NodeManager是每台机器的框架代理,它负责containers容器,监视它们的资源使用(cpu、内存、磁盘、网络),并向ResourceManager/Scheduler报告。

每个应用程序的ApplicationMaster实际上是一个特定于框架的库,它的任务是与ResourceManager协商资源,并与NodeManager一起执行和监视任务。

ResourceManager有两个主要组件:Scheduler 和ApplicationsManager。

调度器(Scheduler )负责将资源分配给各种正在运行的应用程序,这些应用程序受到容量、队列等约束。调度器是纯调度器,因为它不执行对应用程序状态的监视或跟踪。此外,它也不能保证由于应用程序故障或硬件故障而重新启动失败的任务。调度程序根据应用程序的资源需求执行调度功能;它是基于资源容器的抽象概念来实现的,其中包含了诸如内存、cpu、磁盘、网络等元素。

调度器有一个可插拔的策略,负责在各种队列、应用程序等之间对集群资源进行分区。

ApplicationsManager负责接受提交的作业,同时负责协商用来执行ApplicationMaster相关的应用程序的容器,还提供服务来支持在失败时重启ApplicationMaster容器。每个应用程序的ApplicationMaster负责从调度器协商适当的资源容器,跟踪它们的状态并监视进度。

MapReduce在hadoop-2.x版本仍然保持API和之前版本的一致性,这意味着所有的MapReduce作业仍然可以在YARN上运行,而无需修改,只需重新编译即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值