hadoop

hadoop 概述

1、hadoop是什么

【hadoop 三大发行版本】

2、hadoop 优势

3、hadoop 组成

【hadoop1.x、2.x、3.x区别】

(1)HDFS 架构

hadoop Distributed File System,简称 HDFS,是一个分布式文件系统

(2)YARN 架构

Yet Another Resource Negotiator 简称 YARN ,另一种资源协调者,是 hadoop 的资源管理器

(3)MapReduce 架构

MapReduce 将计算过程分为两个阶段:Map 和 Reduce

(4)HDFS、YARN、MapReduce 三者关系

4、大数据技术生态体系

5、hadoop 配置文件

【默认配置文件】

【自定义配置文件】

HDFS

1、HDFS 概述

【HDFS 产生背景】

随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS 只是分布式文件管理系统中的一种。

【HDFS 定义】

HDFS(hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

HDFS 的使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。

【优点】

【缺点】

2、HDFS 组成架构

3、HDFS 文件块大小

HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在hadoop2.x/3.x版本中是128M,1.x版本中是64M。

【为什么块的大小不能设置太小,也不能设置太大】

(总结:HDFS块的大小设置主要取决于磁盘传输速率)

【数据单位】

4、HDFS 的读写流程

(1)写数据流程

  1. 客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件,NameNode 检查目标文件是否已存在,父目录是否存在。
  1. NameNode 返回是否可以上传。
  1. 客户端请求第一个 Block 上传到哪几个 DataNode 服务器上。
  1. NameNode 返回 3 个 DataNode 节点,分别为 dn1、dn2、dn3。
  1. 客户端通过 FSDataOutputStream 模块请求 dn1 上传数据,dn1 收到请求会继续调用 dn2,然后 dn2 调用 dn3,将这个通信管道建立完成。
  1. dn1、dn2、dn3 逐级应答客户端。
  1. 客户端开始往 dn1 上传第一个 Block(先从磁盘读取数据放到一个本地内存缓存), 以 Packet 为单位,dn1 收到一个 Packet 就会传给 dn2,dn2 传给 dn3;dn1 每传一个 packet 会放入一个应答队列等待应答。
  1. 当一个 Block 传输完成之后,客户端再次请求 NameNode 上传第二个 Block 的服务器。(重复执行 3-7 步)

【网络拓扑-节点距离计算】

在HDFS写数据的过程中,NameNode 会选择距离待上传数据最近距离的 DataNode 接收数据。那么这个最近距离怎么计算呢?

节点距离:两个节点到达最近的共同祖先的距离总和

【hadoop3.1.3副本节点选择】

(2)读数据流程

  1. 客户端通过 DistributedFileSystem 向 NameNode 请求下载文件,NameNode 通过查询元数据,找到文件块所在的 DataNode 地址。
  1. 挑选一台 DataNode(就近原则,然后随机)服务器,请求读取数据。
  1. DataNode 开始传输数据给客户端(从磁盘里面读取数据输入流,以 Packet 为单位来做校验)。
  1. 客户端以 Packet 为单位接收,先在本地缓存,然后写入目标文件。

(3)数据完整性校验机制

5、NameNode 工作机制

思考:NameNode 中的元数据是存储在哪里的?

首先,我们做个假设,如果存储在 NameNode 节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的 FsImage

这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新 FsImage,就会导 致效率过低,但如果不更新,就会发生一致性问题,一旦 NameNode 节点断电,就会产生数 据丢失。因此,引入 Edits 文件(只进行追加操作,效率很高)每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到 Edits 中。这样,一旦 NameNode 节点断电,可 以通过 FsImage 和 Edits 的合并,合成元数据

但是,如果长时间添加数据到 Edits 中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行 FsImage 和 Edits 的合并,如果这 个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode, 专门用于 FsImage 和 Edits 的合并

第一阶段:NameNode 启动

  1. 第一次启动 NameNode 格式化后,创建 Fsimage 和 Edits 文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
  1. 客户端对元数据进行增删改的请求。
  1. NameNode 记录操作日志,更新滚动日志
  1. NameNode 在内存中对元数据进行增删改。

第二阶段:Secondary NameNode 工作

  1. Secondary NameNode 询问 NameNode 是否需要 CheckPoint。直接带回 NameNode 是否检查结果。
  1. Secondary NameNode 请求执行 CheckPoint。
  1. NameNode 滚动正在写的 Edits 日志
  1. 将滚动前的编辑日志和镜像文件拷贝到 Secondary NameNode。
  1. Secondary NameNode 加载编辑日志和镜像文件到内存,并合并。
  1. 生成新的镜像文件 fsimage.chkpoint。
  1. 拷贝 fsimage.chkpoint 到 NameNode。
  1. NameNode 将 fsimage.chkpoint 重新命名成 fsimage。

6、DataNode 工作机制

  1. 一个数据块在 DataNode 上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
  1. DataNode 启动后向 NameNode 注册,通过后,周期性(6 小时)的向 NameNode 上报所有的块信息。
  1. 心跳是每 3 秒一次,心跳返回结果带有 NameNode 给该 DataNode 的命令如复制块数据到另一台机器,或删除某个数据块。如果超过 10 分钟没有收到某个 DataNode 的心跳, 则认为该节点不可用。
  1. 集群运行中可以安全加入和退出一些机器。

【DataNode掉线时限参数设置】

1、DataNode进程死亡或者网络故障造成DataNode 无法与NameNode通信;

2、NameNode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长

3、HDFS默认的超时时长为10分钟+30秒

4、如果定义超时时间为TimeOut,则超时时长的计算公式为:

TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval

而默认的dfs.namenode.heartbeat.recheck-interval 大小为5分钟,dfs.heartbeat.interval默认为3秒。

7、HDFS 的 Shell 操作

基本语法:hadoop fs 具体命令 | hdfs dfs 具体命令,大部分命令跟Linux命令类似;

MapReduce

1、MapReduce 概述

【MapReduce 定义】

MapReduce 是一个分布式运算程序的编程框架,是用户开发“基于 hadoop 的数据分析 应用”的核心框架。 MapReduce 核心功能是将用户编写的业务逻辑代码自带默认组件整合成一个完整的分布式运算程序,并发运行在一个 hadoop 集群上。

【优点】

【缺点】

2、MapReduce 核心思想

  1. 分布式的运算程序往往需要分成至少 2 个阶段。
  1. 第一个阶段的 MapTask 并发实例,完全并行运行,互不相干。
  1. 第二个阶段的 ReduceTask 并发实例互不相干,但是他们的数据依赖于上一个阶段 的所有 MapTask 并发实例的输出。
  1. MapReduce 编程模型只能包含一个 Map 阶段和一个 Reduce 阶段,如果用户的业 务逻辑非常复杂,那就只能多个 MapReduce 程序,串行运行。

【MapReduce 进程】

一个完整的 MapReduce 程序在分布式运行时有三类实例进程:

3、MapReduce 编程规范

用户编写的程序分成三个部分:Mapper、Reducer 和 Driver。

【常用数据序列化类型】

4、MapReduce 框架原理

(1)InputFormat 数据输入

【数据切片与MapTask 并行度决定机制】

1.1、FileInputFormat

【FileInputFormat切片机制】

1.2、TextInputFormat

TextInputFormat 是默认的 FileInputFormat 实现类。按行读取每条记录。键是存储该行在 整个文件中的起始字节偏移量, LongWritable 类型。值是这行的内容,不包括任何行终止符(换行符和回车符),Text 类型

1.3、CombineTextInputFormat

CombineTextInputFormat 用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个 MapTask 处理。

(2)MapReduce 工作流程

(3)Shuffle 机制

Map 方法之后,Reduce 方法之前的数据处理过程称之为 Shuffle

【Shuffle 过程】

  1. MapTask 收集我们的 map()方法输出的 kv 对,放到内存缓冲区中;
  1. 从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件 ;
  1. 多个溢出文件会被合并成大的溢出文件;
  1. 在溢出过程及合并的过程中,都要调用 Partitioner 进行分区和针对 key 进行排序;
  1. ReduceTask 根据自己的分区号,去各个 MapTask 机器上取相应的结果分区数据
  1. ReduceTask 会抓取到同一个分区的来自不同 MapTask 的结果文件,ReduceTask 会将这些文件再进行合并(归并排序)
  1. 合并成大文件后,Shuffle 的过程也就结束了,后面进入 ReduceTask 的逻辑运算过程(从文件中取出一个一个的键值对 Group,调用用户自定义的 reduce()方法)

(4)Partition 分区

在进行MapReduce计算时,有时候需要把最终的输出数据分到不同的文件中,比如按照省份划分的话,需要把同一省份的数据放到一个文件中。我们知道最终的输出数据是来自于Reducer任务。那么,如果要得到多个文件,意味着有同样数量的Reducer任务在运行。

Reducer任务的数据来自于Mapper任务,也就说Mapper任务要划分数据,对于不同的数据分配给不同的Reducer任务运行。Mapper任务划分数据的过程就称作Partition。负责实现划分数据的类称作Partitioner

【默认 partition 分区】

【自定义Partition】

【分区总结】

(5)WritableComparable 排序

排序是MapReduce框架中最重要的操作之一。

MapTask和ReduceTask均会对数据按照key进行排序。该操作属于 hadoop的默认行为。任何应用程序中的数据均会被排序,而不管逻辑上是否需要。

默认排序是按照字典顺序排序,且实现该排序的方法是快速排序

(6)Combiner 合并

(7)OutputFormat 数据输出

OutputFormat是MapReduce输出的基类,所有实现MapReduce输出都实现了OutputFormat 接口。默认输出格式TextOutputFormat

【ReduceTask 并行度决定机制】

ReduceTask 的并行度同样影响整个 Job 的执行并发度和执行效率,但与MapTask 的并发数由切片数决定不同,ReduceTask 数量的决定是可以直接手动设置的,默认是1

(8)MapTask 工作机制

(9)ReduceTask 工作机制

5、hadoop 数据压缩

【压缩的好处和坏处】

【压缩原则】

【常见压缩方式】

YARN

Yarn 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序。

1、Yarn 基础架构

YARN 主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等组件构成。

2、Yarn 工作机制

  1. MR 程序提交到客户端所在的节点。
  1. YarnRunner 向 ResourceManager 申请一个 Application。
  1. RM 将该应用程序的资源路径返回给 YarnRunner。
  1. 该程序将运行所需资源提交到 HDFS 上。
  1. 程序资源提交完毕后,申请运行 mrAppMaster。
  1. RM 将用户的请求初始化成一个 Task。
  1. 其中一个 NodeManager 领取到 Task 任务。
  1. 该 NodeManager 创建容器 Container,并产生 MRAppmaster。
  1. Container 从 HDFS 上拷贝资源到本地。
  1. MRAppmaster 向 RM 申请运行 MapTask 资源。
  1. RM 将运行 MapTask 任务分配给另外两个 NodeManager,另两个 NodeManager 分别领取任务并创建容器。
  1. MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个 NodeManager 分别启动 MapTask,MapTask 对数据分区排序。
  1. MrAppMaster 等待所有 MapTask 运行完毕后,向 RM 申请容器,运行 ReduceTask。
  1. ReduceTask 向 MapTask 获取相应分区的数据。
  1. 程序运行完毕后,MR 会向 RM 申请注销自己。

3、Yarn 调度器和调度算法

hadoop 作业调度器主要有三种:FIFO容量(Capacity Scheduler)和公平(Fair Scheduler)。Apache hadoop3.1.3 默认的资源调度器是容量调度器

(1)先进先出调度器(FIFO)

单队列,根据提交作业的先后顺序,先来先服务。

(2)容量调度器(Capacity Scheduler)

容量调度器是 Yahoo 开发的多用户调度器。

允许多个组织共享整个集群,每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。

队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了,在一个队列内部,资源的调度是采用的是先进先出(FIFO)策略。

【分配算法】

  1. 队列资源分配:从root开始,使用深度优先算法,优先选择资源占用率最低的队列分配资源。
  1. 作业资源分配:默认按照提交作业的优先级和提交时间顺序分配资源。
  1. 容器资源分配:按照容器的优先级分配资源, 如果优先级相同,按照数据本地性原则:

(3)公平调度器(Fair Scheduler)

公平调度器是 Facebook 开发的多用户调度器。

公平调度器设计目标是:在时间尺度上,所有作业获得公平的资源。某一 时刻一个作业应获资源和实际获取资源的差距叫“缺额”,调度器会优先为缺额大的作业分配资源

【与容量调度器相同点】

多队列、容量保证、灵活性、多租户

【与容量调度器不同点】

【队列资源分配方式】

具体资源分配流程和容量调度器一致:

(1)选择队列

(2)选择作业

(3)选择容器

以上三步,每一步都是按照公平策略分配资源:

【分配案例】

4、Yarn 常用命令

5、Yarn 的 Container 容器

Yarn 的 container 容器是 yarn 虚拟出来的一个东西,属于虚拟化的,它是由 memory + vcore 组成,是专门用来运行任务的。

vcore:指的是虚拟CPU,之所以产生虚拟CPU(CPU vCore)这一概念,是因为物理CPU的处理能力的差异,为平衡这种差异,就引入这一概念。

在 YARN 的 NodeManager 节点上,会将机器的CPU和内存的一定值抽离出来,抽离成虚拟的值,然后这些虚拟的值在根据配置组成多个Container,当application提出申请时,就会分配相应的Container资源。

生产调优

hadoop HA 高可用

1、HDFS HA

(1)脑裂

主NameNode在垃圾回收时,可能会长时间内无响应,也就无法向zk写入心跳信息,可能就会导致zk的临时节点被删除,备NameNode会切换到Active状态,这种情况可能就会导致整个集群里有两个Active状态的NameNode,这就是脑裂问题。

(2)联邦(Federation)

【基本介绍】

【优点】

【缺点】

2、YARN HA

(1)脑裂

当ActiveRM由于网络原因一段时间无法对外响应,发生“假死”,zk会删除对应的锁文件,这时其中一个StandbyRM会去重新创建一个锁文件,且状态转化为Active,这个时候就会造成多个ActiveRM的存在;

解决办法:使用ZK的ACL机制(访问控制)

(2)联邦

展开阅读全文

页面更新:2024-03-16

标签:作业   队列   分布式   节点   集群   磁盘   内存   文件   数据   资源

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top