阳江建设网站,画册排版设计模板,个人网站怎么做联盟推广,用单位的服务器做网站一、 简介
Hadoop主要在分布式环境下集群机器#xff0c;获取海量数据的处理能力#xff0c;实现分布式集群下的大数据存储和计算。
其中三大核心组件: HDFS存储分布式文件存储、YARN分布式资源管理、MapReduce分布式计算。
二、工作原理
2.1 HDFS集群
Web访问地址…一、 简介
Hadoop主要在分布式环境下集群机器获取海量数据的处理能力实现分布式集群下的大数据存储和计算。
其中三大核心组件: HDFS存储分布式文件存储、YARN分布式资源管理、MapReduce分布式计算。
二、工作原理
2.1 HDFS集群
Web访问地址http://hadoop1:9870
HDFS由NameNode(主节点)、SecondaryNameNode辅助节点、DataNode从节点构成
其中NameNode负责管理整个HDFS集群SecondaryNameNode辅助NameNode管理元数据DataNode负责存储实际的数据块(一个block块默认大小128MB)和对数据块的读、写操作。
2.1.1 block数据块
基本存储单位一般64M一个大文件会被拆分成多个block块然后存储到不通机器上每块会备份到其他机器上保证数据安全性防止数据丢失(默认备份3份)。
2.1.2 NameNode
管理文件系统命名空间和客户端对文件访问保存文件具体信息文件信息、文件拆分block块信息、以及block和DataNode的信息接收用户请求
2.1.3 DataNode
保存具体的block数据负责数据的读写操作和复制操作向NameNode报告当前存储或者修改的数据信息DataNode之间进行相互通信复制数据块
2.1.4 Secondary NameNode
定时与NameNode进行同步合并fsimage和edits文件当NameNode失效时需要手工将其设置成主机
2.1.5 文件写入步骤 1. Client(客户端)请求namenode保存文件。 2. NameNode接收到客户端请求后, 会校验客户端针对该文件是否有写的权利文件是否存在校验通过后告知客户端可以上传。 3. 接收到可以上传的指令后, 客户端会按照128MB(默认)对文件进行切块。 4. Client(客户端)再次请求namenode, 第1个Block块的上传位置。 5. namenode会根据副本机制, 负载均衡, 机架感知原理及网络拓扑图, 返回给客户端存储该Block块的DataNode列表。 例如: node1, node2, node3 6. Client(客户端)会先连接就近的datanode机器, 然后依次和其他的datanode进行连接, 形成传输管道(Pipeline) 7. 采用数据报包(DataPacket)的形式传输数据, 每个包的大小不超过64KB, 并建立反向应答机制(ACK机制) 8. 具体的上传动作: node1 - node2 - node3, ACK反向应答机制: node3 node2 node1。 9. 重复上述的步骤, 直至第1个Block块上传完毕。 10. 第一个Bloc上传完毕客户端(Client)重新请求第二个Block的上传位置, 重复上述动作, 直至所有的Block块传输完毕。
至此, HDFS写数据流程结束。
2.1.6 文件读取步骤 1. Client(客户端)请求namenode, 读取文件。 2. NameNode校验该客户端是否有读权限, 及该文件是否存在, 校验成功后, 会返回给客户端该文件的块信息。 例如: block1: node1, node2, node5 block2: node3, node6, node8 block3: node2, node5, node6 这些地址都是鲜活的 ...... 3. Client(客户端)会连接上述的机器(节点), 并行的从中读取块的数据。 4. Client(客户端)读取完毕后, 会循环NameNode获取剩下所有的(或者部分的块信息), 并行读取, 直至所有数据读取完毕。 5. Client(客户端)根据Block块编号, 把多个Block块数据合并成最终文件即可。
2.1.7 数据备份
NameNode负责管理block块的复制它周期性地接收集群中所有DataNode的心跳数据包和Blockreport。心跳包表示DataNode正常工作Blockreport描述了该DataNode上所有的block组成的列表。HDFS采用一种称为rack-aware的策略来决定备份数据的存放。通过一个称为Rack Awareness的过程NameNode决定每个DataNode所属rack id。缺省情况下一个block块会有三个备份一个在NameNode指定的DataNode上一个在指定DataNode非同一rack的DataNode上一个在指定DataNode同一rack的DataNode上。这种策略综合考虑了同一rack失效、以及不同rack之间数据复制性能问题。为了降低整体的带宽消耗和读取延时HDFS会尽量读取最近的副本。如果在同一个rack上有一个副本那么就读该副本。如果一个HDFS集群跨越多个数据中心那么将首先尝试读本地数据中心的副本。
2.1.8 HDFS工作原理
1、NameNode初始化时会产生一个edits文件和一个fsimage文件。 2、随着edits文件不断增大当达到设定的阀值时1个小时或写入100万次SecondaryNameNode把edits文件和fsImage文件复制到本地同时NameNode会产生一个新的edits文件替换掉旧的edits文件这样以保证数据不会出现冗余。 3、SecondaryNameNode拿到这两个文件后会在内存中进行合并成一个fsImage.ckpt的文件这个过程称为checkpoint合并完成后再将fsImage.ckpt文件推送给NameNode。 4、NameNode文件拿到fsImage.ckpt文件后会将旧的fsimage文件替换掉并不会立刻替换而是达到一定阈值后被替换掉并且改名成fsimage文件。
通过以上几步则完成了edits和fsimage文件的合并依此不断循环从而到达保证元数据的正确性。在紧急情况下, SecondaryNameNode可以用来恢复namenode的元数据。
2.2 YARN集群
Web访问地址http://hadoop1:8088
YARN是一个资源调度平台负责为运算程序提供服务器运算资源相当于一个分布式的操作平台而Mapreduce等运算程序相当于运行在操作系统之上的应运程序。
YARN组成由ResourceManager、AppMaster进程、NodeManager组成
2.2.1 ResourceManager主节点
ResourceManager是master上的进程负责整个分布式系统的资源管理和调度。他会处理来自client端的请求包括提交作业/杀死作业启动/监控Application Master监控NodeManager的情况比如可能挂掉的NodeManager。
2.2.2 NodeManager从节点
负责接收并执行ResourceManager分配的计算任务。相对应的NodeManager时处在slave节点上的进程他只负责当前slave节点的资源管理和调度以及task的运行。他会定期向ResourceManager回报资源/Container的情况heartbeat接受来自ResourceManager对于Container的启停命令。
2.2.3 AppMaster进程
每一个提交到集群的作业都会有一个与之对应的Application Master来负责应用程序的管理。他负责进行数据切分为当前应用程序向ResourceManager去申请资源也就是Container并分配给具体的任务与NodeManager通信用来启停具体的任务任务运行在Container中而任务的监控和容错也是由Application Master来负责的。 1个计算任务1个AppMaster进程 由该AppMaster进程来监控和管理该计算任务
2.2.4 Container
它包含了Application Master向ResourceManager申请的计算资源比如说CPU/内存的大小以及任务运行所需的环境变量和队任务运行情况的描述。
2.3 MapReduce工作原理
MapReduce是一种分布式计算框架。MR的执行流程 1. MR任务分为MapTask任务 ReduceTask任务两部分, 其中MapTask任务负责分 ReduceTask任务负责合。 1个切片(默认128MB) 1个MapTask任务 1个分好区, 排好序, 规好约的磁盘文件 2. 先对文件进行切片, 每个切片对应1个MapTask任务, 任务内部会逐行读取数据, 交由MapTask任务来处理。 3. MapTask对数据进行分区,排序,规约处理后, 会将数据放到1个 环形缓冲区中(默认大小: 100MB, 溢写比: 0.8), 达到80MB就会触发溢写线程。 4. 溢写线程会将环形缓冲区中的结果写到磁盘的小文件中, 当MapTask任务结束的时候, 会对所有的小文件(10个/次)合并, 形成1个大的磁盘文件。 5. ReduceTask任务会开启拷贝线程, 从上述的各个结果文件中, 拉取属于自己分区的数据, 进行分组、统计、聚合。 6. ReduceTask将处理后的结果, 写到结果文件中
1个分区 1个ReduceTask任务 1个结果文件
2.4 三者之间的关系 客户端Client提交任务到资源管理器ResourceManager,资源管理器接收到任务之后去NodeManager节点开启任务ApplicationMaster, ApplicationMaster向ResourceManager申请资源, 若有资源ApplicationMaster负责开启任务即MapTask。开始干活了即分析任务每个map独立工作各自负责检索各自对应的DataNode将结果记录到HDFS, DataNode负责存储NameNode负责记录2nn负责备份部分数据。