赞
踩
本文是尚硅谷Hadoop教程的学习笔记,由于个人的需要,只致力于搞清楚Hadoop是什么,它可以解决什么问题,以及它的原理是什么。至于具体怎么安装、使用和编写代码不在我考虑的范围内。
大数据的特点:
是一个分布式系统基础架构
HDFS(Hadoop Distributed File System)是一个分布式文件系统
YARN(Yet Another Resource Negotiater):另一种资源协调者,是Hadoop的资源管理器。
说明:
MapReduce将计算拆成两个阶段:Map和Reduce
优点:
缺点:
NameNode(NN):就是Master,它是一个主管、管理者,其功能是:
DataNode(DN):就是Slave,NameNode下达命令,DataNode执行具体操作,其功能是:
Secondary NameNode(2NN):并非NameNode的热备,当NameNode挂掉时,它并不能马上替换NameNode并提供服务,其功能是:
Client:就是客户端,其功能是:
在Hadoop1.x中文件块大小默认为64M,而在2.x和3.x中为128M。当寻址时间为传输时间的1%时为最佳状态。文件块的大小太小,则会导致大文件被分割成太多块,增加寻址时间。而文件块大小太大,则会使得传输时间远大于寻址时间。文件块的大小主要取决于磁盘的传输速率。
节点距离:两个节点到达最近公共祖先的距离之和
第一个副本存储在客户端所在的节点上,如果客户端在集群外,则随机选一个。
第二个副本在另一个机架的随机节点上。
第三个副本在第二个副本所在机架的随机节点上。
fsimage文件:HDFS文件系统元数据的一个永久性检查点,其中包含HDFS文件系统所有的目录和文件innode的序列号信息
edits文件:存放HDFS文件系统所有更新操作的路径,文件系统客户端所执行的所有写操作首先会被记录在edits文件中
seen_txid文件:保存的是一个数字,就是最后一个edits_的数字
MapReduce是一个分布式运算程序的编程框架
MapReduce核心思想:
优点:
缺点:
用户编写的程序分为3个部分:Mapper、Reducer和Driver
相当于Yarn集群的客户端,用于提交整个程序到Yarn集群,提交的是封装了MapReduce程序相关运行 参数的job对象
切片与MapTask并行度决定机制:MapTask的并行度决定Map阶段任务处理并发度,进而影响到整个job的处理速度。
数据块(block)是物理上把数据分成一块一块的,数据块是HDFS数据存储单位。
数据切片只是在逻辑上对输入数据进行分片,数据切片是MapReduce程序计算输入数据的单位。一个切片会对应启动一个MapTask。
TextInputFormat切片机制
一个job的map阶段并行度由提交job时的切片数决定。
每一个切片分配一个MapTask并进行处理
默认情况下切片大小等于块大小
切片时不考虑数据集整体,而是对每个文件单独切片
CombineTextInputFormat切片机制
框架默认的TextInputFormat切片机制是对任务按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给一个MapTask, 这样如果有大量小文件,就会产生大量的MapTask,处理效率极其低下。
应用场景:
Combine TextInputFormat用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个MapTask处理。
生成切片过程包括虚拟存储过程和切片过程二部分。首先判断虚拟存储的文件大小是否大于setMaxInputSplitSize值,大于等于则单独形成一个切片。如果不大于则跟下一个虚拟存储文件 进行合并,共同形成一个切片。
MapReduce工作流程:
map方法之后,reduce方法之前的数据处理过程称为shuffle(混洗)。
Combiner是MR程序中Mapper和Reducer之外的一种组件
Combiner和Reducer的区别在于运行的位置不同,Combiner在每个MapTask所在的节点运行,Reducer是接收全局所有Mapper的输出结果
Combiner的意义是对每个MapTask的输出进行局部汇总,以减小网络传输量
Combiner能够应用的前提是不能影响最终业务逻辑
MapTask工作机制:
ReducerTask工作机制;
ReduceTask的并行度同样影响整个Job的执行并发度和执行效率,但与MapTask的并发数由切片数决定不同,ReduceTask 数量的决定是可以直接手动设置
(1) ReduceTask=0, 表示没有Reduce阶段, 输出文件个数和Map个数一 致
(2) ReduceTask默认值就是 1,所以输出文件个数为一个
(3)如果数据分布不均匀,就有可能在Reduce阶段产生数据倾斜
(4) Reduce Task数量并不是任意设置,还要考虑业务逻辑需求,有些情况下,需要计算全局汇总结果,就只能有1个Reduce Task
(5)具体多少个ReduceTask, 需要根据集群性能而定
(6)如果分区数不是1,但是ReduceTask为1, 是否执行分区过程。答案是:不执行分区过程。因为在MapTask的源码中,执行分区的前提是先判断ReduceNum个数是否大于1。不大于1肯定不执行
“ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(Extract)、转换(Transform) 、加载(Load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库在运行核心业务MapReduce程序之前,往往要先对数据进行清洗,清理掉不符合用户要求的数据。清理的过程往往只需要运行Mapper程序,不需要运行Reduce程序。
1、Input Format
2、Mapper
3、分区
4、排序
5、Combiner
6、Reducer
7、Output Format
Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。
YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成
目前,Hadoop作业调度器主要有三种:FIFO、 容量(Capacity Scheduler)和公平(Fair Scheduler)。 Apache Hadoop3.1.3默认的资源调度器是容量调度器。CDH框架默认调度器是公平调度器。
FIFO调度器(First In First Out):单队列,根据提交作业的先后顺序,先来先服务。
容量调度器是一个多用户调度器
一个队列中只要资源够,就可以按提交顺序分配给先来的job
容量调度器资源分配算法:
公平调度器是一个多用户调度器
公平调度器资源分配方式:
FIFO策略:公平调度器每个队列资源分配策略如果选择FIFO的话,此时公平调度器相当于上面讲过的容量调度器。
Fair策略:Fair策略(默认)是一种基于最大最小公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源。这意味着,如果一个队列中有两个应用程序同时运行,则每个应用程序可得到1/2的资源;如果三个应用程序同时运行,则每个应用程序可得到1/3的资源。
具体资源分配流程和容量调度器一致;
以上三步,每一步都是按照公平策略分配资源
DRF策略:DRF(Dominant Resource Fairness),我们之前说的资源,都是单一标准,例如只考虑内存(也是Yarn默认的情况)。但是很多时候我们资源有很多种,例如内存,CPU,网络带宽等,这样我们很难衡量两个应用应该分配的资源比例。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。