[Hadoop] 期末答辩问题准备

0.相关概念

1.什么是NameNode?

NameNode是整个文件系统的管理节点,它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。并接收用户的操作请求。

2.SecondaryNameNode的主要作用?

SecondaryNameNode定期合并fsimage和edits日志,将edits日志文件大小控制在一个限度下。

1.HDFS写入流程(hdfs dfs -put /a.avi /aaa/bbb)

  • (0)HDFS的客户端可以创建FileSystem对象实例,该类中封装了HDFS文件系统操作的相关操作。
  • (1)客户端Client通过调用FileSystem对象的create()方法,通过RPC向NameNode发起文件上传请求,NameNode执行各种检查判断:目标文件是否存在,父目录是否存在以及客户端是否具有创建文件的权限,并返回是否可以上传,可以则会返回FSDataOutputStream输出流对象给客户端用于写数据。
  • (2)客户端Client将文件进行切分,切分为几个数据块
  • (3)客户端请求第一个数据块block该传到哪些DataNode服务器上。
  • (4)NameNode会返回可用的DataNode的地址
  • (5)客户端通过FSDataOutputStream开始请求向第一个DataNode上传数据,第一个DataNode收到请求后会向第二个DataNode请求,直到整个通信管道pipeline的建立。
  • (6)通信管道pipeline建立后,客户端开始向第一个DataNode上传第一个数据块,在上传的过程中会将数据拆分为一个个数据包packet,默认大小为64k,第一个DataNode收到packet后会传给第二个DataNode,再传给第三个DataNode。
  • (7)数据以packet大小在通信管道上传输着,在传输的反方向上,会通过ACK应答机制校验数据包是否传输成功,最后由pipeline第一个DataNode结点将ack消息发送给客户端Client。
  • (8)当一个 block 传输完成之后,client 再次请求 NameNode 上传第二个 block 到服务器,待所有的数据块传输完成后,FSDataOutputStream调用close()方法关闭输出流。

 1.HDFS读取流程(hdfs dfs -get /aaa/bbb/a.avi /)

  • (1)Client会向NameNode发起RPC请求,NameNode接收读取的请求,然后检查用户是否具有读取数据的权限以及判断在指定路径下是否存在这个文件。
  • (2)NameNode会视情况返回文件的部分或者全部的block列表,对于每个block,NameNode都会返回含有该block副本的DataNode地址,这些返回的DataNode地址会按照集群拓扑结构计算出DataNode与客户端的距离,然后进行排序。
  • (3)客户端Client选取排序靠前的DataNode读取block,底层本质上是通过类FSDataInputStream建立Socket Stream,重复地调用父类DataInputStream的read方法,直到这个块上的数据读取完毕。
  • (4)最终读取来的所有的block会合并成一个完整的文件。

2.NameNode和SecondaryNameNode工作机制

2.1 名词熟悉:

1、元数据

·元数据必须存储在内存当中(保证快速检索);

·元数据必须持久化(保证数据的安全持久);

·将元数据信息保存在fsimage镜像文件当中

2.fsimage文件

·保存元数据信息的文件

·是NameNode中关于元数据的镜像

·包含了NameNode管理下的所有DataNode中文件以及文件Block以及block所在的DataNode的元数据信息

3.Edits文件

·edits编辑日志文件记录了客户端操作元数据的信息

 2.2 NameNode端的工作流程

  • (0)首先得明白:Namenode始终在内存中保存metadata元数据,用于处理客户端对元数据的增删改查的请求,而Hadoop会维护一个fsimage文件,也就是NameNode中元数据metadata的镜像,但是fsimage并不会随时都与NameNode内存中的元数据metadata保持一致,而是每隔一段时间通过合并edits文件来更新内容。
  • (1)第一次启动NameNode格式化后,会创建fsimage镜像文件和edits编辑日志文件(若不是第一次启动,则直接加载fsimage镜像文件和edits编辑日志文件到内存)。
  • (2)客户端对元数据发起增删改查的请求。
  • (3)NameNode记录操作日志,更新滚动日志
  • (4)NameNode对内存中的数据进行增删改查操作。

2.3 Secondary NameNode工作流程

  • (1)Secondary NameNode询问NameNode是否需要执行checkpoint检查点(默认Edits记录的修改次数达到一定值,或者距离上个checkpoint时间间隔了一定时间) 
  • Secondary NameNode请求执行check point
  • NameNode的edit_inprogress_001(edits_inprogress_xxx 存储的是还没有更新到 edits中的数据)中存储的改变向量滚动写入到Edits,如果客户端此时有向NameNode发出改变元数据的请求,那么新的改变向量会被暂时写入到edit_inprogress_002中。
  • 将NameNode中的Edits和fsimage拷贝到SecondaryNameNode
  • Secondary NameNode将Edits、fsimage信息加载到自己的内存当中,在fsimage基础上顺序执行Edits中改变向量。
  • 将内存中的计算结果生成新的镜像文件fsimage.checkpoint
  • 将fsimage.checkpoint拷贝给NameNode
  • NameNode将fsimage.checkpoint重命名为fsimage,覆盖原有的fsimage

Mapreduce流程

  • (1)首先会进行分片与格式化数据,将源文件划分成大小相等的数据块,也就是分片spilt,Hadoop会为每一个分片构建一个Map任务,并由该任务运行自定义的map函数,来处理分片里每一条记录.
  • (2)格式化操作就是将划分好的分片spilt格式化成键值对<key,value>的形式,其中key代表着偏移量,value代表着每一行的内容,将处理的键值对<key,value>传给mapper函数进行输入
  • (3)mapper对传入的键值对<key,value>进行逻辑运算,然后将输出的结果通过context.write输出给outputcollector.
  • (4)mapper的输出结果会写到内存当中的环形缓冲区中,在写入环形缓冲区中会按照一定的规则对mapper的输出的键值对进行分区(partitioner),默认情况下是一个分区,那么就只会开启一个reduceTask.
  • (5)因此存入环形缓冲区的数据会带有分区的信息,当环形缓冲区的数据达到80%后,会进行溢写操作,在溢写前会进行排序,采取的是快排的方式.
  • (6)每次数据量达到环形缓冲区的80%时,就会产生一次溢写,每一次溢写就会产生一个溢写文件,虽然有多个分区,但是这些分区都存储在一个溢写文件当中,只是会将他们分隔开来
  • (7)对产生大量的溢写文件会进行合并和排序,由于每一个溢写文件都是有序的,因此溢写文件的内部是有序的,再对这些文件排序时会使用归并排序.
  • (8)在进入到reduce之前还可以采用预聚合的方式,对分区内具有相同key的键值对进行聚合.
  • (9)reducetask主动拉去指定分区的数据,由于reducetask可能拉取多个分区的,因此还需要对数据进行归并和排序.

Reduce join和map join

reduce join

Map端的主要工作:是通过Mapper阶段将两张表共有的字段作为key,同时处理两张表,通过设置标签Flag的方式来标注不通过数据的来源,将其余字段和新加的标志作为value,最后进行输出.

recude端的主要工作:是在reduce之前,通过共有字段连接连接两张表的工作已经完成,此时在reduce端只需要将不同的来源再分开,最后进行逻辑业务编写就行了.

缺点:这种方式很明显会造成map和reduce端也就是shufflle阶段出现大量的数据传输,效率很低,此外最后的拆分再合并的操作都在reduce阶段完成,reduce端的处理压力很大,而map节点的运算负载很低,资源利用率不高,在reduce阶段极易产生数据倾斜.

map join

map join适用于一张小表和一张大表的场景

使用map join可以将全部的操作都在map阶段执行,不需要使用reduce,所有的工作都在map阶段完成,极大地减少了网络传输和io的代价

  • (1)在driver中设置加载缓存文件,这样子每个maptask就都可以获取到该文件,设置reducetask的个数为0,去除掉reduce阶段
  • (2)mapper在setup()方法中读取缓存文件,并将结果以kv的形式存入到hashmap当中,方便查找
  • (3)在map中正常读取大表,通过hashmap找到对应所需要替换的信息,进行替换,写出结果.

Yarn的工作流程

Yarn是用于进行任务调度和资源管理的框架

Yarn的主要组件为

  • ResourceManager:资源管理
  • Application Master:任务调度
  • NodeManager:节点管理,负责执行任务

 工作流程:

  • (1)首先客户端Client向ResourceManager提交作业job,调用job.waitForApplication申请作业id
  • (2)Resource Manager返回作业id以及作业资源提交路径
  • (3)客户端需要上传计算所需资源至ResouceManager指定的路径.
  • (4)Client提交完资源后会向Resource Manager发送执行作业请求,ResouceManager收到资源后会创建Application manager来管理这个作业job
  • (5)新创建的Application Manager会将job作业添加到Resource Scheduler资源调度器单中,Resource Scheduler内部维护了一个队列,所有需要执行的job都会保存到此队列当中,并按照一定的规则等待执行
  • (6)当轮到job执行时,Resource Scheduler会通知Application Manager,Application Manager就会调用分配给它的NodeManager,在NodeManager中会开辟一个容器,并在这个container启动对应所需要执行的job的Application Master
  • (7)Application Master会通过HDFS活区之前提交的文件,根据分片信息生成Task
  • (8)Application Master会向Resource Manager申请运行Task的任务资源
  • (9)Resource Manager会将Task任务分配给空闲的NodeManager
  • (10)NodeManager启动Task计算

Hive的工作流程

  • (1)Hive通过客户端,包括命令行界面,编程API)等一系列交互接口,接收用户的指定SQL
  • (2)使用Hive Driver驱动器解析并转换为内部的数据结构(抽象语法树AST)
  • (3)Hive Driver与元数据metastore交互,获取表的元数据信息,包括表的索引,分区和存储位置等
  • (4)Hive Driver将AST发送给查询解析器,解析器根据HIveSQL语法和语义规则,生成查询计划,根据查询计划转化成一系列的任务,可以交给mapreduce执行

优缺点
1.优点
1)操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。
2)避免了去写MapReduce,减少开发人员的学习成本。
3)Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合。
4)Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。
5)Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

2.缺点
1.Hive的HQL表达能力有限
(1)迭代式算法无法表达(MapReduce本身就不支持)
(2)数据挖掘方面不擅长
2.Hive的效率比较低
(1)Hive自动生成的MapReduce作业,通常情况下不够智能化
(2)Hive调优比较困难,粒度较粗
 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习Angular的编程之旅

目录 1、简介 2、特点 2.1 横跨多种平台 2.2 速度与性能 2.3 美妙的工具 3、Angular 应用&#xff1a;知识要点 3.1 组件 3.2 模板 3.3 依赖注入 4、与其他框架的对比 1、简介 Angular 是一个应用设计框架与开发平台&#xff0c;旨在创建高效而精致的单页面应用。 A…

别再用查询count,判断数据是否存在了

目录 一、目前多数人的写法 二、优化方案 三、总结 大家在实际的开发过程中&#xff0c;会根据某些条件&#xff0c;从数据库表中查询出是否存在符合该条件的数据。无论是刚入行的程序员小白&#xff0c;还是久经沙场多年的程序员老白&#xff0c;都是一如既往的SELECT count(*…

【探索 Kubernetes|作业管理篇 系列 11】控制器的核心功能

前言 大家好&#xff0c;我是秋意零。 上一篇结束了 Pod 对象的内容。 今天要探讨的内容是 “控制器”&#xff0c;它是 Kubernetes 编排最核心的功能。理解了 “控制器”&#xff0c;你就能理解 Deployment、StatefulSet、DaemontSet、Job、CroJob 控制器对象。 最近搞了一…

数据结构之复杂度分析

1、大 O 复杂度表示法 算法的执行效率&#xff0c;粗略地讲&#xff0c;就是算法代码执行的时间 这里有段非常简单的代码&#xff0c;求 1,2,3…n 的累加和。看如何来估算一下这段代码的执行时间 int cal(int n) {int sum 0;int i 1;for (; i < n; i) {sum sum i;}ret…

pg报错attempted to delete invisible tuple

问题描述 postgresql数据库执行delete报错&#xff1a;attempted to delete invisible tuple&#xff0c;执行同样条件的select不报错 delete from lzltab1; select count(*) from lzltab1;执行全表删除和全表查询的结果&#xff1a; M# delete from lzltab1; ERROR: 5500…

【Unity之IMGUI】—位置信息类和控件基类的封装

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a; ⭐…

从0开始,手写MySQL事务

说在前面&#xff1a;从0开始&#xff0c;手写MySQL的学习价值 尼恩曾经指导过的一个7年经验小伙&#xff0c;凭借精通Mysql, 搞定月薪40K。 从0开始&#xff0c;手写一个MySQL的学习价值在于&#xff1a; 可以深入地理解MySQL的内部机制和原理&#xff0c;Mysql可谓是面试的…

大数据Doris(五十):Export导出原理

文章目录 Export导出原理 一、原理 二、查询计划拆分 三、查询计划执行 Export导出原理 Doris Export、Select Into Outfile、MySQL dump三种方式数据导出。用户可以根据自己的需求导出数据。此外数据还可以以文件形式通过Borker备份到远端存储系统中&#xff0c;之后可以…

idea打的包字符集为GBK

1.最近对接一个打印机厂家的机器&#xff0c;他们对与打印数据要求字符集是UTF-8的&#xff0c;做完程序在自己idea上运行是是能够打印的&#xff0c;但是打包后&#xff0c;就不能够打印了。然后问了设备方是否是他们机器的原因&#xff0c;后面他们问了我这报错码&#xff0c…

【单片机】STM32单片机的各个定时器的定时中断程序,标准库

文章目录 定时器1_定时中断定时器2_定时中断定时器3_定时中断定时器4_定时中断定时器5_定时中断 高级定时器和普通定时器的区别&#xff08;https://zhuanlan.zhihu.com/p/557896041&#xff09;&#xff1a; 定时器1_定时中断 TIM1是高级定时器&#xff0c;使用的时钟总线是R…

Methodot低代码开发教程——玩转表格增删改查分页

目录 1、背景介绍 2、连接数据源 2.1 新增数据源 2.2 填写数据源信息 3、表格数据的展示 3.1 新增查询&#xff0c;编写查询语句 3.2 使用表格组件 3.3 同步数据源与表格列名 4、表格的数据新增 4.1 新增查询&#xff0c;编写新增语句 4.2 表格配置新增一行&#xff0…

探索嵌入式开发领域:单片机、ARM、Android底层的紧密联系

作为一个曾编写ARM教程和参与Android产品开发的专家&#xff0c;我发现单片机、ARM、嵌入式开发和Android底层开发之间存在紧密的联系。对于那些希望在嵌入式开发领域发展的人来说&#xff0c;了解这些领域的知识至关重要。为了帮助你更好地学习这些内容&#xff0c;我总结了一…

Git指南 - 刚提的commit 怎么找不到了(游离分支)?

在有一次使用git时&#xff0c;我提交commit后&#xff0c;并未push&#xff0c;然后直接切到了当前分支的某个tag&#xff0c;最后我想切回来的时候&#xff0c;竟然找不到我刚才提交commit的节点了… 关联篇 Git指南 - 你该掌握的那些基础认知和首次配置Git指南 - 项目实战中…

青大数据结构【2018】【综合应用】

关键字&#xff1a; 二叉排序树、先序中序排列、平均查找长度ASL、快速排序、堆排序 &#xff08;3&#xff09; 采用堆排序&#xff1b; 因为快速排序在基本有序&#xff08;逆序&#xff09;的情况下&#xff0c;达到最坏的时间复杂度O(n2)。

如何支持研发对CSDN个性化推荐系统重构

目录 大地图工具构建数据治理保持发布重视测试小结引用 一个以内容服务为主的软件&#xff0c;它的推荐系统在数据侧对软件产生着举足轻重的作用。数据的三个方面决定了这个内容软件的档次。 数据的质量好坏数据和用户需求的相关性好坏数据的层次体系好坏 通常&#xff0c;我…

如何使用ChatGPT处理excel

用ChatGPT处理excel&#xff0c;我们需要用到的主要工具是ChatGPT和vba代码。 VBA代码是一种用于Excel&#xff0c;Word&#xff0c;PPT的Microsoft Office软件的编程语言。 可以让用户通过编写一些简单的指令和操作&#xff0c;实现自动化、自定义和数据处理等功能。 就像你编…

2023亚马逊云科技中国峰会之Serverless

序言 Amazon Web Services&#xff0c;是Amazon.com推出的一系列云计算服务。 它提供了一系列的基础设施服务、平台服务和软件服务&#xff0c;希望可以帮助我们更轻松地构建和管理基于云的应用程序。 今天来学习一下 Serverless 本文会介绍以下六个模块&#xff1a; 为什么会…

如何画时序图

10年产品经理教你3步画好UML时序图&#xff0c;轻松掌握流程分析利器【建议收藏】 - 知乎 转自知乎 上次介绍了活动图&#xff0c;这次分享 UML 中&#xff0c;另一种流程分析利器——时序图。 以前每次要分析流程&#xff0c;我都会用活动图。直到有一次&#xff0c;我面对…

使用VuePress生成静态网站并部署到github

目录 第一步 安装VuePress第二步 书写博客第二步 部署到github 第一步 安装VuePress VuePress是一个基于Vue驱动的静态网站生成器 相关资料 文档&#xff1a;https://v1.vuepress.vuejs.org/zh/github: https://github.com/vuejs/vuepressvuepress-deploy: https://github.c…

什么是RabbitMQ?

RabbitMQ是一个由erlang开发的消息队列。消息队列用于应用间的异步协作。 2.RabbitMQ的组件 Message&#xff1a;由消息头和消息体组成。消息体是不透明的&#xff0c;而消息头则由一系列的可选属性组成&#xff0c;这些属性包括routing-key、priority、delivery-mode&#xff…
最新文章