Hadoop NameNode执行命令工作流程

news2024/11/25 7:09:57

Hadoop NameNode执行命令工作流程

      • 客户端API或者CLI与NameNode的交互命令数据的格式
      • (1) 预处理流程
      • (2) 创建NameNode与NameNodePrcServer流程
      • (3) HDFS API以及CLI的命令到NameNode的工作执行流程
      • (4) 执行命令的参数流动

客户端API或者CLI与NameNode的交互命令数据的格式

hadoop使用PB协议(protocol buffer)来传输数据与命令
ProtocolBuffer是用于序列化结构数据的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。一旦定义了你自己的数据结构,然后就可以使用特殊生成的源代码轻松的在各种数据流和使用的各种高级语言之间读写你的结构化数据。你甚至可以在不破坏根据“旧”格式编译的已部署程序的情况下更新你的数据结构。

(1) 预处理流程

PB协议使用了proto文件保存交互数据的结构,因此首先hadoop需要将proto编译成为java文件

执行maven命令打包的期间,会执行protoc命令将protopuf文件生成Java类

<plugin>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-maven-plugins</artifactId>
<executions>
  <execution>
    <id>compile-protoc</id>
    <phase>generate-sources</phase>
    <goals>
      <goal>protoc</goal>
    </goals>
    <configuration>
      <protocVersion>${protobuf.version}</protocVersion>
      <protocCommand>${protoc.path}</protocCommand>
      <imports>
        <param>${basedir}/../../hadoop-common-project/hadoop-common/src/main/proto</param>
        <param>${basedir}/src/main/proto</param>
      </imports>
      <source>
        <directory>${basedir}/src/main/proto</directory>
        <includes>
          <include>ClientDatanodeProtocol.proto</include>
          <include>ClientNamenodeProtocol.proto</include>
          <include>DatanodeProtocol.proto</include>
          <include>HAZKInfo.proto</include>
          <include>InterDatanodeProtocol.proto</include>
          <include>JournalProtocol.proto</include>
          <include>NamenodeProtocol.proto</include>
          <include>QJournalProtocol.proto</include>
          <include>acl.proto</include>
          <include>xattr.proto</include>
          <include>datatransfer.proto</include>
          <include>fsimage.proto</include>
          <include>hdfs.proto</include>
          <include>encryption.proto</include>
          <include>inotify.proto</include>
        </includes>
      </source>
      <output>${project.build.directory}/generated-sources/java</output>
    </configuration>
  </execution>
</executions>
</plugin>

(2) 创建NameNode与NameNodePrcServer流程

NameNode.main() —> MainNode.createNameNode()—>new NameNode() —> NameNode.initialize() —> createRpcServer() —> new NameNodeRpcServer(conf, this) —> BlockingService clientNNPbService = ClientNamenodeProtocol.newReflectiveBlockingService(new ClientNamenodeProtocolServerSideTransltatorPB(this)) —> new PRC.Builder(conf).setInstance(clientNNPbService ) —> NameNodePrcServer.start()

  • 在NameNode的构建方法中,PRC使用了protopuf来存储所有的协议,其中就包括ClientNamenodeProtocol.proto,其用来设定与namenode的交互数据格式,比如mkdir、delete、rename等命令。
  • protopuf协议的目录在\hadoop-hdfs-project\hadoop-hdfs\src\main\proto
    在这里插入图片描述
  • BlockingService便是与namenode交互协议的实现,将其交给NameNodePrcServer实现了对客户端使用该协议的监听,当有相关执行命令被监控到,通过协议版本信息可以适配到相应的BlockingService。

(3) HDFS API以及CLI的命令到NameNode的工作执行流程

在这里插入图片描述

  • 为了能够准确的监听与处理客户端的命令,NameNode创建了四种独立的角色,并发执行,Listener、Responder、Reader、Handler,其中Listener、Responder、Reader都是Selector。
    • Listener负责监听连接,并创建channel将其引用放置到channel队列。
    • Reader负责监听channel队列中发送的ON_READ事件并进行数据的保存、协议的解析,然后创建Call对象,并置于Call队列当中。
    • Handler负责处理Call队列,根据Call拿到具体的协议的实现,调用FSNamesystem进行具体的命令,比如mkdir,rename等命令都是在该阶段进行创建的。
    • Responder负责Handler处理之后结果的响应。

(4) 执行命令的参数流动

客户端请求执行命令 —> Reader —> Call —> ClientNamenodeProtocolTranslatorPB(implements ProtocolMetaInterface, ClientProtocol, Closeable, ProtocolTranslator)
—> ClientNamenodeProtocolServerSideTranslatorPB(implements
ClientNamenodeProtocolPB).mkdirs() —> NameNodeRpcServer(implements ClientProtocol).mkdirs() —> FSNamesystem.mkdirs() —> FSDirMkdirOp
.mkdirs()

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

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

相关文章

读高性能MySQL(第4版)笔记10_查询性能优化(上)

1. 三管齐下 1.1. 不做、少做、快速地做 1.2. 如果查询太大&#xff0c;服务端会拒绝接收更多的数据并抛出相应错误 1.3. 如果查询写得很糟糕&#xff0c;即使库表结构再合理、索引再合适&#xff0c;也无法实现高性能 1.4. 查询优化、索引优化、库表结构优化需要齐头并进&…

JS的WebAPI

WebAPI背景知识 什么是 WebAPI 前面学习的 JS 分成三个大的部分 ECMAScript: 基础语法部分 DOM API: 操作页面结构 BOM API: 操作浏览器 WebAPI 就包含了 DOM BOM. 什么是 API API 是一个更广义的概念. 而 WebAPI 是一个更具体的概念, 特指 DOMBOM&#xff0c;所谓的 API …

使用 Elasticsearch、OpenAI 和 LangChain 进行语义搜索

在本教程中&#xff0c;我将引导您使用 Elasticsearch、OpenAI、LangChain 和 FastAPI 构建语义搜索服务。 LangChain 是这个领域的新酷孩子。 它是一个旨在帮助你与大型语言模型 (LLM) 交互的库。 LangChain 简化了与 LLMs 相关的许多日常任务&#xff0c;例如从文档中提取文本…

服务网格和CI/CD集成:讨论服务网格在持续集成和持续交付中的应用。

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

混淆矩阵细致理解

1、什么是混淆矩阵 混淆矩阵&#xff08;Confusion Matrix&#xff09;是深度学习和机器学习领域中的一个重要工具&#xff0c;用于评估分类模型的性能。它提供了一个清晰的视觉方式来展示模型的预测结果与真实标签之间的关系&#xff0c;尤其在分类任务中&#xff0c;帮助我们…

浅谈应急照明系统在民用建筑的设计应用与产品选型

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 【摘要】应急照明分为备用照明、安全照明及疏散照明。文章介绍了应急照明系统的设计、灯具选择、灯具布置、配电等要求。并结合实例进行疏散照明的计算&#xff0c;以指导应急照明系统的设计与应用。 【关键词】照度&#xf…

大数据学习1.4-xShell配置Hadoop

1.创建hadoop目录 mkdir /usr/local/hadoop 2.切换到hadoop中 cd /usr/local/hadoop/ 3.将hadoop直接拖到xShell中 4.解压hadoop tar -zxvf hadoop-2.7.1.tar.gz 5.配置环境变量 vi /etc/profile export PATH$PATH:/usr/local/hadoop/hadoop-2.7.1/bin 6.加载配置文件(不能…

【刷题】蓝桥杯

蓝桥杯2023年第十四届省赛真题-平方差 - C语言网 (dotcpp.com) 初步想法&#xff0c;x y2 − z2&#xff08;yz)(y-z) 即xa*b&#xff0c;ayz&#xff0c;by-z 2yab 即ab是2的倍数就好了。 即x存在两个因数之和为偶数就能满足条件。 但时间是&#xff08;r-l&#xff09;*x&am…

Mybatis学习笔记8 查询返回专题

1.返回实体类 2.返回List<实体类> 3.返回Map 4.返回List<Map> 5.返回Map<String,Map> 6.resultMap结果集映射 7.返回总记录条数 新建模块 依赖 目录结构 1.返回实体类 如果返回多条,用单个实体接收会出异常 2.返回List<实体类> 即使返回一条记…

【软考】系统集成项目管理工程师(四)项目管理一般知识

一、 项目 1、 项目的定义 为大到特定的目的、使用一定的资源、在确定的期间内、为特定发起人而提供独特的产品、服务或成果而进行的一次性努力。 2、项目目标 分类描述成果性目标项目目标&#xff1a;满足客观要求的产品、系统、服务或者成果&#xff1b;例&#xff1a;①…

删除链表中所有含有val的节点

给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 思路1&#xff1a;遍历查找&#xf…

大数据学习1.1-Centos8网络配置

1.查看虚拟网卡 2.配置网络信息 打勾处取消 记住箭头的数字 3.修改 网络连接 4.进入虚拟网络 5.进入属性 6.修改IPv4 5.将iIP和DNS进行修改 6.配置网络信息-进入修改网络配置文件 # 进入root用户 su root # 进入网络配置文件 cd /etc/sysconfig/network-scripts/ # 修改网络配…

C. Beautiful Sets of Points(找规律杂题)

解析&#xff1b; 由于坐标必须为整数&#xff0c;并且距离不能为整数&#xff0c;则同行同列不能存在多个“好点”。 则每行每列只能放一个点&#xff0c;所以最多的点数量即为 min&#xff08;n&#xff0c;m&#xff09;1 #include<bits/stdc.h> using namespace std…

以数据为中心的安全市场快速增长

根据Adroit Market Research的数据&#xff0c;2021年全球以数据为中心的安全市场规模估计为27.6亿美元&#xff0c;预计到2030年将增长至393.48亿美元&#xff0c;2021年至2030年的复合年增长率为30.9%。 研究人员表示&#xff0c;以数据为中心的安全强调保护数据本身&#x…

arcgis栅格按某列属性导出

栅格属性如下 可以看出栅格对应很多属性值&#xff0c;我们要按其中一个属性值作为栅格值 操作如下 只需将栅格值赋值为所需属性数据

后端配置(宝塔):SSH终端设置

一、打开SSH开关 在“安全”中找到SSH管理&#xff0c;按图打开对应按钮 二、复制秘钥 点击“查看密钥”&#xff0c;对密钥进行复制 三、添加服务器 在终端页面添加新的服务器 四、进行密钥连接 输入IP地址&#xff0c;进行root登录&#xff0c;私钥即在“安全”界面复制的…

微服务保护-隔离和降级

隔离和降级 限流是一种预防措施&#xff0c;虽然限流可以尽量避免因高并发而引起的服务故障&#xff0c;但服务还会因为其它原因而故障。 而要将这些故障控制在一定范围&#xff0c;避免雪崩&#xff0c;就要靠线程隔离&#xff08;舱壁模式&#xff09;和熔断降级手段了。 线…

MFC串口通信控件MSCOMM32.OCX的安装注册

MSCOMM32.OCX是一个与Microsoft Corporation开发的MSComm控件相关联的文件。MSComm控件是软件应用程序用来与调制解调器、条形码读取器和其他串行设备等设备建立串行通信的通信控件。 下载地址1 https://download.csdn.net/download/m0_60352504/88345092 下载地址2 https://ww…

【无标题】mysql 普通用户连接报错: MySql server has gone away

1、mysql 普通用户连接报错&#xff1a; MySql server has gone away 2、进入mysql错误日志位置查看输出日志显示错误为&#xff1a; [Warning] [MY-013130] [Server] Aborted connection 47 to db: unconnected user: tjcx host: 10.195.11.4 (init_connect command failed; …

437. 路径总和 III

给定一个二叉树的根节点 root &#xff0c;和一个整数 targetSum &#xff0c;求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始&#xff0c;也不需要在叶子节点结束&#xff0c;但是路径方向必须是向下的&#xff08;只能从父节点到子节点&am…