Hadoop集群(HDFS集群、YARN集群、MapReduce​计算框架)

一、 简介

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 数据备份

  1. NameNode负责管理block块的复制,它周期性地接收集群中所有DataNode的心跳数据包和Blockreport。心跳包表示DataNode正常工作,Blockreport描述了该DataNode上所有的block组成的列表。
  2. HDFS采用一种称为rack-aware的策略来决定备份数据的存放。通过一个称为Rack Awareness的过程,NameNode决定每个DataNode所属rack id。缺省情况下,一个block块会有三个备份,一个在NameNode指定的DataNode上,一个在指定DataNode非同一rack的DataNode上,一个在指定DataNode同一rack的DataNode上。这种策略综合考虑了同一rack失效、以及不同rack之间数据复制性能问题。
  3. 为了降低整体的带宽消耗和读取延时,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负责备份部分数据。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/63961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

位运算符、标记位传参

位运算符: 位运算符作用于操作数的位(bit)。 按位与(&)对应位都为1时结果为1 int a 5; // 0101 int b 3; // 0011 int result a & b; // 0001 按位或(|)对应位至少有一个为1时结…

施耐德变频器ATV320系列技术优势:创新与安全并重

在工业自动化领域,追求高效、安全与智能已成为不可阻挡的趋势。施耐德变频器ATV320系列凭借其强大的设计标准和全球认证,成为能够帮助企业降低安装成本,提高设备性能的创新解决方案。 【全球认证,品质保障】ATV320 系列秉持施耐德…

项目练习:element-ui的valid表单验证功能用法

文章目录 一、情景说明二、代码实现 一、情景说明 一般表单提交的时候,都要对表单数据进行前段验证。 比如登陆表单提交。 二、代码实现 package.json "element-ui": "2.15.14",main.js 引用ElementUI import ElementUI from element-ui; i…

【es6复习笔记】Symbol 类型及其应用(9)

一、Symbol 简介 Symbol 是 JavaScript 中的一种基本数据类型,它表示唯一的标识符。Symbol 的主要目的是防止属性名冲突,尤其是在多个代码库或模块中共享对象时。Symbol 值可以用作对象的属性名,这样可以确保属性名是唯一的,不会…

Linux挖矿程序排查

一、背景 我们收到一个阿里云安全告警,内容是服务器可能存在挖矿程序。 二、杀死挖矿程序 2.1 找到可疑服务器进程 #1.输入top命令,输入shift P会按照cpu的使用率大小从大到小进行排序,cpu使用率高的就是可疑进程。 top #2.查看运行该进程…

zabbix监控山石系列Hillstone配置模版(适用于zabbix6及以上)

监控项: 触发器: 监控数据:

PE文件结构

PE文件是Windows系统下可执行文件的总称,英文全称 Portable Executable 可移植的可执行文件,常见的有exe、dll、sys、com、ocx 对于学习反(木马、免杀、病毒、外挂、内核),了解PE文件结构是非常有必要且非常非常重要的…

C语言-08复合类型-结构体

一、结构体 1.结构体struct struct关键字,允许自定义复合数据类型,将不同类型的值组合在一起,这种类型称为结构体类型。 2.使用步骤 第一步:创建或声明结构体 第二步:定义结构体变量 第三步:调用并操作结…

Web前端基础知识(一)

前端是构建网页的一部分,负责用户在浏览器中看到和与之交互的内容。 网页是在浏览器中呈现内容的文档或页面。 通常,网页使用HTML、CSS、JavaScript(JS)组成。 HTML:定义了页面的结构和内容。包括文本、图像、链接等。 CSS:定义页面的样式…

网络安全词云图与技术浅谈

网络安全词云图与技术浅谈 一、网络安全词云图生成 为了直观地展示网络安全领域的关键术语,我们可以通过词云图(Word Cloud)的形式来呈现。词云图是一种数据可视化工具,它通过字体大小和颜色的差异来突出显示文本中出现频率较高…

fpgafor循环语句使用

genvar i;//循环变量名称 generate for(i0;i<4;ii1)begin:tx//自己定义名称 //循环内容 end endgenerate12位的16进制乘以4就是48位位宽的2进制 因为 222*2(2^4)16

【python高级】342-TCP服务器开发流程

CS模式&#xff1a;客户端-服务端模式 TCP客户端开发流程介绍&#xff08;五步&#xff09;&#xff08;C端&#xff09; 1.创建客户端套接字对象 2.和服务端套接字建立连接 3.发送数据 4.接收数据 5.关闭客户端套接字 TCP服务端开发流程&#xff08;七步&#xff09;&#xf…

es 中 terms set 使用

在 Elasticsearch 中&#xff0c;terms_set 查询通常用于在一个字段上进行多值匹配&#xff0c;并支持设置一个条件&#xff08;例如最小匹配数量&#xff09;&#xff0c;让查询结果更具灵活性。为了展示如何使用 terms_set 查询&#xff0c;我们首先会创建一个索引&#xff0…

修改采购订单BAPI学习研究-BAPI_PO_CHANGE

这里是修改采购订单BAPI&#xff0c;修改订单数量和交货日期的简单应用 文章目录 修改数量代码运行结果 修改交货日期代码运行结果 修改数量 代码 *&---------------------------------------------------------------------* *& Report Z_BAPI_PO_CHANGE *&----…

WSL2高级配置之mirrored镜像网络

WSL2高级配置之mirrored镜像网络 引言版本要求更改配置 引言 WSL2默认的网络模式为NAT。尽管WSL2原生提供了localhost转发这种能够方便地在Windows中访问子系统服务的特性&#xff0c;但如果想反过来&#xff0c;则只能通过局域网或者想办法桥接&#xff0c;这两种方法都有些许…

《ROS2 机器人开发 从入门道实践》 鱼香ROS2——第4章内容

第4章 服务和参数——深入ROS2通信 4.2 用Python服务通信实现人脸检测 4.2.1 自定义服务接口 1. 创建接口功能包 终端中输入 ros2 pkg create chapt4_interfaces --dependencies sensor_msgs rosidl_default_generators --license Apache-2.0 ros2 pkg create 功能包名称…

Linux系统编程深度解析:C语言实战指南

文章一览 前言一、gcc编译系统1.1 文件名后缀1.2 C语言编译过程1.3 gcc命令行选项 二、gdb程序调试工具2.1 启动gdb和查看内部命令2.2 显示源程序和数据2.2.1 显示和搜索源程序2.2.2 查看运行时数据 2.3 改变和显示目录或路径2.4 控制程序的执行2.4.1 设置断点2.4.2 显示断点2.…

SQL优化原理与具体实例分析

一、引言 SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是关系型数据库的核心语言。在实际应用中&#xff0c;数据库查询性能往往成为系统性能瓶颈。因此&#xff0c;掌握SQL优化技巧对于提高数据库查询效率具有重要意义。本文将围绕SQL优…

安卓蓝牙扫描流程

目录 系统广播 流程图 源码跟踪 系统广播 扫描开启广播&#xff1a;BluetoothAdapter.ACTION_DISCOVERY_STARTED "android.bluetooth.adapter.action.DISCOVERY_STARTED";扫描关闭广播&#xff1a;BluetoothAdapter.ACTION_DISCOVERY_FINISHED "android.b…

shell 编程(三)

条件测试命令 条件测试&#xff1a;判断某需求是否满足&#xff0c;需要有测试机制来实现 专用的测试表达式需要由测试命令辅助完成测试过程&#xff0c;评估布尔生命&#xff0c;以便用在条件性执行中 若真,则状态码变量$? 返回0 // echo $? 打印0 反之返回1 t…