ProgramerFangL 发表于 2017-11-15 14:53

【笔记】Hadoop学习笔记

HDFS的设计特点:
1、大数据文件:非常适合上T级别的大文件或者一堆大数据文件的存储
2、文件分块存储:HDFS会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多得都。
3、流式数据访问:一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。
4、廉价硬件:HDFS可以应用在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。
5、硬件故障:HDFS认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。
HDFS的关键元素:
1、block块:将一个文件进行分块。hadoop2中的默认分块大小为128M
2、Namenode:负责存储hdfs上的元数据信息,以及DataNode的元数据信息。在hadoop2中支持active-standby模式,即有一台主机作为备用的namenode,当主namenode损毁,备用的namenode代替主namenode的功能
3、DataNode:分布在廉价的计算机上,用于存储block数据
Hadoop中yarn的工作流程
yarn是hadoop2.x版本中提出来的新概念,主要的作用是为Jobtracker分散任务。资源管理任务由资源管理器负责,作业启动,运行和检测则交由application负责
Yarn的组成部分:
ResourceManager:一个集群只有一个,负责资源的调度以及资源的分配
NodeManager:运行在DataNode节点上,负责启动application以及资源的管理
JobHistoryServer:负责查询job运行进度以及元数据的管理
Containers:通过resourceManager进行分配,包括CPU内存等资源
Application Master:由resourceManager指派,运行在nodemanager,resourceManager会将任务首先下发给ApplicationMaster,然后由ApplicationMaster将resourceManager的命令下发给各个nodemanager,每一个application只有一个applicationMaster
job:也可以叫做application,是一个mapper,reduce,或一个进程的输入列表
Task:一个具体做mapper或reduce的独立的工作单元,运行在Containers中
Client:提交给resourceManager的一个application程序
Yarn的工作流程:
用户向yarn中提交任务,resourceManager为作业分配第一个Containers,并与对应的nodemanager通信,要求它在该Containers中启动ApplicationMaster。
ApplicationMaster首先向ResourceManager注册,这样用户就可以直接通过ResourceManager查看作业的运行情况。
ApplicationMaster为各个任务申请资源,并监控任务的运行状况,直到任务结束
Application通过rpc协议向ResourceManager请求资源
ApplicationMaster要求对应的nodemanager启动任务,启动任务之后去做ResourceManager制定的mapTask任务
在map Task做完之后,由ApplicationMaster告知resourceManager,ResourceManager分配新的资源给ApplicationMaster,ApplicationMaster通知nodemanager启动新的Containers,执行reduce任务。
等各个节点上的reduce任务都执行结束后,将干活的nodemanager的结果进行同步,做最后的reduce任务。
将输出结果保存到hdfs
Hadoop中map reduce的相关原理
MapReduce作为hadoop中与hdfs同等重要的组件,主要作用是对大规模数据集的分布式并行处理
用两句最简短的英文解释mapreduce
We want to count all books in the library . You count up shelf #1,I count up shelf #2.
That's map.The most people we get, the faster it goes.
(我们要数图书馆的所有书,你数一号书架,我数二号书架,这就是map。我们人越多,数的就越快)
Now we get together and add our individual counts. That’s reduce.
(现在我们到一起,把所有人统计的都加到一块儿,这就是reduce)
mapreduce的工作原理:
首先要说明mapreduce中的角色:
1、client:作业提交的发起者
2、Jobtracker:初始化作业,分配作业,与Tasktracker进行通信,协调整个作业
3、Tasktracker:保持JobTracker通信,在分配的数据片段上执行MapReduce任务。
mapreduce运行流程:
当一个job被提交时Jobtracker接收到提交job的任务信息以及配置信息,Jobtracker会将该任务加入队列
Jobtracker和Tasktracker之间的通信和任务分配是通过心跳机制来完成的
Tasktracker会主动向Jobtracker询问是否有任务需要执行,如果它可以完成这个任务,那么这个Tasktracker就会申请到这个任务,这个任务可能是map任务或者是reduce任务
当Tasktracker申请到任务后,它会将代码拷贝到本地,然后启动jvm运行任务
以上是从Client、Jobtracker、Tasktracker的层面说明的,然后我们继续从mapreduce任务的层面来讲解
五个阶段:
第一阶段,输入分片:根据split的分片数(在没有设置分片的范围的时候,默认的分片大小是由block块的大小决定的,即有几个block块即有几个分片),每一个split分片都会对应一个map任务,并且作为map任务的输入。
第二阶段,map阶段:对应于相应代码的map函数,因为一般map操作都是数据本地化操作也就是在数据存储节点上进行操作,所以相对而言较好操作
第三阶段,combiner:combiner相当于一个本地的reduce操作,是可以选择的。它是map阶段的后续操作,主要是在map计算出中间文件之前做一个简单的合并重复key值的操作。主要是为了提高传输效率,节约宽带资源。当然有些操作是不适合做combiner的,例如求一组数据的平均值,这样会导致最后的计算结果出错
第四阶段,shuffle:
第五阶段,reduce:对应于相应代码的reduce函数,数据最后存储在hdfs上
HDFS文件下载原理
第一步是client向namenode发送读取文件的请求
第二步,namenode返回有关文件的block的信息(副本数,block,每个block对应的DataNode)
第三步,client从存储有关文件的block的DataNode上读取有关数据
HDFS文件上传原理
HDFS的上传写入操作共涉及到hadoop中的三个角色:
1、Client
2、Namenode
3、DataNode
首先是第一步,client向namenode提出一个上传写入数据的请求
第二步,namenode返回有关属于它管理的可用的DataNode的信息
第三步,client请求上传第一个block块(hadoop默认存储为3个副本,存储原则为一个最                                  近,一个最远,一个内部存储空间最大)
第四步,namenode返回可以存储block块的DataNode的信息
第五步,client与DataNode1建立连接,将block块按64k的大小切分成一个个package
client向DataNode1发送第一个package
DataNode1接收完后向DataNode2发送package,同时client开始
向DataNode1发送第二份package
DataNode2在接收完package后向DataNode3发送第一份package,
同时DataNode2接收DataNode1发送的第二份package
以此类推,直到block块传输完毕
第六步,DataNode1,2,3向namenode,DataNode1向client发送报告,说“我写完了”
client在接收到DataNode1发送的报告后,向namenode发送报告,上传完毕。

ProgramerFangL 发表于 2017-11-16 10:56

疯狂的诅咒 发表于 2017-11-16 10:44
楼主有java的hadoop代码模板吗

应该有,一会儿找找,是需要那种上传下载的功能?

ProgramerFangL 发表于 2018-6-20 15:22

wnvchina 发表于 2018-6-20 14:48
哪个行业的大数据? 我也在学习

能源行业的,现在主要是一些偏向于安全方面了

ShadowY 发表于 2017-11-15 19:45

大数据啊、

ProgramerFangL 发表于 2017-11-16 09:39

ShadowY 发表于 2017-11-15 19:45
大数据啊、

嗯嗯,现在是在干大数据的活

ProgramerFangL 发表于 2017-11-16 09:39

liu8501 发表于 2017-11-15 23:11
看得不是很懂,支持一下

就是一个大数据的组件

疯狂的诅咒 发表于 2017-11-16 10:44

楼主有java的hadoop代码模板吗

9152pojie 发表于 2017-11-21 13:33

来来来,我们可以谈心~~~~~

ProgramerFangL 发表于 2017-11-22 12:54

9152pojie 发表于 2017-11-21 13:33
来来来,我们可以谈心~~~~~

什么意思?

9152pojie 发表于 2017-11-22 13:35

ProgramerFangL 发表于 2017-11-22 12:54
什么意思?

我们可以沟通学习一下,我也搞这玩意儿~

wnvchina 发表于 2018-6-20 14:48

哪个行业的大数据? 我也在学习
页: [1] 2
查看完整版本: 【笔记】Hadoop学习笔记