Hadoop面试题总结

一 、介绍一下hadoop

综述:hadoop是一个适合海量数据的分布式存储和分布式计算的平台
分述:hadoop包含三大组件,分别是HDFS、MapReduce和YARN	--HDFS(分布式文件系统)
HDFS集群由NameNode,DataNode,SecondaryNameNode构成NameNode:主要负责接受用户请求、存储元数据(描述文件的数据,如文件名、文件大小、目录名、文件创建时间等)DataNode:主要负责存储数据,管理用户的block,文件默认会按照每128M切分为block块存储在DataNode上,每个block块默认会有三个副本存放在不同的DataNode上,DataNode会通过心跳机制定期向NameNode汇报自身所保存的文件block块信息SecondaryNameNode:主要负责辅助NameNode,定期合并fsimage(快照文件)和edits(日志文件),并同步一份给NameNode--MapReduce: 分布式计算系统 	
MapReduce分为map阶段和reduce阶段,map阶段与reduce阶段中间的过程被称为shufferMapReduce流程:
1.文件被上传到HDFS中,默认以128M切分为一个block块
2.每个block块数据会进行逻辑上的切片,切片的大小默认与block块大小一致,为128M
3.之后根据切片的数量产生相同数量的Map任务
-------------------------------------------shuffer----------------------------------------------------------
4.Map任务会进入环形缓冲区,根据Reduce数量(默认是一个)以及数据本身的值进行分区编号(底层与哈希值有关)并进行快速排序,当写入环形缓冲区的数据达到环形缓冲区的80%,向磁盘溢写一个小文件
5.之后将溢写的小文件使用归并算法合并产生Map任务的结果文件
6.然后Reduce从结果文件拉取对应的分区编号的数据,去掉编号后,对拉取的文件数据进行归并排序
------------------------------------------------------------------------------------------------------------
7.执行Reduce逻辑,产生Reduce合并之后的结果文件--YARN: 分布式资源调度系统
YARN:yarn由4部分组成。
1. ResourceManager主要功能是:
(1)接收用户请求
(2)管理调度资源
(3)启动管理am
(4)管理所有nm,处理nm的状态汇报,向nm下达命令。
2.Container:yarn的应用都是运行在容器上的,容器包含cpu,内存等信息。
3.NodeManager:NM是每个节点上的资源和任务管理器,它会定时地向RM汇报本节点上的资源使用情况和各个容器的运行状态;同时负责对容器的启动和停止。
4. ApplicationMaster:管理应用程序。向RM获取资源、为应用程序分配任务、 监控所有任务运行状态。

二、HDFS读写数据流程

HDFS写数据流程

1.客户端使用rpc通信框架向NameNode发送请求,NameNode接收并处理用户的请求。
2.NameNode审核用户文件的操作权限,文件路径,磁盘空间是否可用,审核通过后,NameNode会返回成功状态给DFS(分布式文件系统)
3.如果DFS接收到成功的状态,会创建一个FSDataoutputStream的对象给客户端使用
4.客户端向NameNode获取文件存储在HDFS中所需要的所有DataNode节点
5.NameNode对客户端划分的block块分配好所有的DataNode
6.客户端通过机架感知与最近的DataNode建立联系,将block块划分为2048个packet进行发送,直到所有的packet发送完毕后,则当前的block块传输完毕,开始传输下一个block块中的packet
7.DataNode之间会形成pipeline通道传输这些packet
8.传输完毕后发送确认值给客户端
9.当最后一个block中的最后一个packet传输完毕后,释放FSDataoutputStream对象,关闭DataNode之间的pipeline通道,至此,写数据完成。

HDFS读数据流程

1.使用HDFS提供的client,向远程的NameNode发起RPC请求
2.namenode会视情况返回文件的部分block块信息列表或者全部block,对于每个block,namenode都会返回该block副本的DataNode地址
3.client会选取离最近的DataNode读取block块
4.建立socket流,DataNode发送数据,以packet的单位接收,先在本地缓存,然后写入目标文件。读取完block,关闭当前的datanode连接,再寻找下一个block最佳的datanode。
5.读取完block后且文件没有读取完,client继续向namenode获取下一批block块
6.后面的block块相对于append到前面的block块,最后合成最终需要的文件
7.读取一个block都会进行checksum验证。如果读取DataNode出现错误,client会通知NameNode,然后再从下一个拥有block的DataNode继续读。

三、 HDFS的federation(联邦机制)

HDFS Federation设计可解决单一命名空间存在的以下几个问题:
(1)HDFS集群扩展性。多个NameNode分管一部分目录,使得一个集群可以扩展到更多节点。
(2)性能更高效。多个NameNode管理不同的数据,且同时对外提供服务,将为用户提供更高的读写吞吐率。
(3)良好的隔离性。用户可根据需要将不同业务数据交由不同NameNode管理,这样不同业务之间影响很小。

四、 yarn执行流程

yarn执行流程:
1. 作业提交
首先我们将任务提交给JobClient,JobClient会向RM获取一个appId。 然后我们的JobClient会对作业进行处理, 切分InputSplit, 将作业的Jar包, 配置文件和拷贝InputSplit信息拷贝到HDFS。 最后, 通过调用RM的submitApplication()来提交作业。2. 作业初始化
当RM收到submitApplciation()的请求时, 就将该请求发给调度器, 调度器分配第一个容器, 然后RM在该容器内启动applicationmaster进程。该进程上运行着一个MRAppMaster的Java应用。其通过创造一些bookkeeping对象来监控作业的进度。 然后通过hdfs得到由JobClient已经处理好的作业信息。为每个Inputsplit创建一个map任务, 并创建相应的reduce任务。然后applicationmaster会对整个作业量进行判断,如果作业量很小, applicationmaster会选择在其自己的JVM中运行任务, 这种作业称作是uber task的方式。在任务运行之前, 作业的setup方法被调用来创建输出路径。3. 任务分配
如果不是小作业, 那么applicationmaster向RM请求更多的容器来运行所有的map和reduce任务,每个容器只能对应一个任务。这些请求是通过心跳来传输的, 包括每个map任务的数据位置, 比如Inputsplit的主机名和机架。调度器利用这些信息来调度任务, 尽量将任务分配给有存储数据的节点, 或者分配给和存放Inputsplit的节点相同机架的节点。4. 任务运行
当一个任务由RM的调度器分配了一个容器后, applicationmaster与NM通信来启动容器。任务由一个为YarnChild的Java应用执行。在运行任务之前首先本地化任务需要的资源, 比如作业配置, JAR文件, 以及hdfs中保存的任务所需的所有文件。最后, map任务或者reduce运行在一个叫YarnChild的进程当中。5. 进度和状态更新
每个NM会想applicationmaster汇报自己的工作状态,JobClient会每秒轮训检测applicationmaster,这样就能随时收到更新信息。 6. 作业完成
除了向applicationmaster请求作业进度外, JobClient每5分钟都会通过调用waitForCompletion()来检查作业是否完成。作业完成之后,applicationmaster和NM会清理工作状态, OutputCommiter的作业清理方法也会被调用. 作业的信息会被作业历史服务器存储以备之后用户核查.yarn对异常task的处理(推测执行)?推测执行是在分布式环境下,因为某种原因造成同一个job的多个task运行速度不一致,有的task运行速度明显慢于其他task,则这些task拖慢了整个job的执行进度,为了避免这种情况发生,Hadoop会为该task启动备份任务,让该speculative task与原始task同时处理一份数据,哪个先运行完,则将谁的结果作为最终结果。推测执行优化机制采用了典型的以空间换时间的优化策略,它同时启动多个相同task(备份任务)处理相同的数据块,哪个完成的早,则采用哪个task的结果,这样可防止拖后腿Task任务出现,进而提高作业计算速度,但是,这样却会占用更多的资源。

五、 yarn执行策略

yarn调度器的策略?yarn默认是计算能力调度FifoScheduler:根据先进先出排队,最简单的调度器。CapacityScheduler(计算能力调度)、FairScheduler(公平调度):相同点:(1)都是多队列。(2)都有资源最大最小上线限制。(3)都是资源共享,每个队列剩余的资源可以给其他队列使用。不同点:(1)队列排序算法不同:计算能力调度资源使用量小的优先。公平调度根据公平排序算法排序。(2)应该用选择算法不同:计算能力调度是先进先出。公平调度先进先出或者公平排序算法。(3)资源抢占:公平调度如果当前队列有新应用提交后,会把共享出去的资源抢夺回来。

六、shuffle优化:

配置方面:(1)增大map阶段的缓冲区大小。(2)map阶段输出结果使压缩;压缩算法使用lzo。(3)增加reduce阶段copy数据线程数。(4)增加副本数,从而提高计算时的数据本地化。
程序方面:(1)在不影响计算结果的情况下建议使用combiner。(2)输出结果的序列化类型尽量选择占用字节少的类型。架构方面:将http改为udp,因为http还要进行3次握手操作。

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

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

相关文章

XML 应用程序

XML 应用程序 XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。它是一种自我描述的语言,允许用户定义自己的标签和文档结构。XML广泛应用于各种应用程序中,包括网站开发、数据交换、文档管理等。本文将探讨XML的一些主要…

导入导出带下拉框模版(EasyExcel)

前言 项目进行到新的一个迭代了,赶了1周需求,接口终于处理完了。分享记录下迭代中处理导入、导出、下载模版功能的细节吧。 一、场景 EasyExcel(阿里)实现Excel数据处理三层表头,第二、三层表头动态数据根据第二、三层…

RabbitMQ(六)仲裁队列、流式队列、异地容灾(联邦队列Federation Queue)

文章目录 仲裁队列1、创建交换机2、创建仲裁队列3、验证主节点宕机不影响消息发送和接收 流式队列(不推荐,Kafka主场)概念 异地容灾一、Federation插件概述 二、Federation交换机1、总体说明2、准备工作3、启用联邦插件4、添加上游连接端点5、…

NetSuite Inventory Transfer Export Saved Search

用户之前有提出一个实际的需求,大致意思是想要导出Inventory Transfer的相关明细行信息,且要包含From Location,To Location,Quantity等信息。 我们知道From Location和To Location在IT Form中应该是在Main的部分,在D…

java学习--集合(大写一.1)

看尚硅谷视频做的笔记 1.集合框架概述 1.1生活中的容器 首先知道集合是来解决什么问题的? 1.1.1内存层面需要针对于多个数据进行存储,此时,可以考虑的容器有:数组、集合类 对于内存层面的来说,断电后数据就不复存…

后端学习笔记:Python基础

后端学习笔记:Python基础 数据类型: Python中主要有以下几种常用的基本数据类型: String 字符串类型,用单引号或者双引号引用Number 数字类型,包括浮点数,整数,长整数和复数List 列表项&…

Python polars学习-06 Lazy / Eager API

背景 polars学习系列文章,第6篇 Lazy / Eager API Lazy: 延迟、惰性 Eager: 即时、实时 该系列文章会分享到github,大家可以去下载jupyter文件,进行参考学习 仓库地址:https://github.com/DataShare-duo/…

界面构件开发之RC文件

代码; #include <gtk-2.0/gtk/gtk.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <glib-2.0/glib.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);gtk_rc_parse("./mainrc");GtkWidget *winN…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 连续字母长度(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

某棋牌渗透测试

前言 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、信息收集 这里通过fofa进行收集&#xff0c;语法为&#xff1a;body某棋牌 && titlexxx 图1-1 fofa资产收集 …

Human4DiT:使用 4D Diffusion Transformer 生成自由视角人物视频。

Human4DiT&#xff0c;使用 4D Diffusion Transformer 生成自由视角人物视频。又一个根据一张图&#xff0c;生成人物动画视频的项目&#xff0c;效果如下视频所示。 给定参考图像、SMPL序列和摄像机参数&#xff0c;Human4DiT能够生成自由视图动态人体视频。 相关链接 项目地…

Ubuntu根分区在线扩容

操作系统:Ubuntu 20.04 原有分区 /dev/sda2 大小8G,扩容后 /dev/sda2 大小100G 1. 扩容前信息 系统盘为/dev/vda,共有2个分区,/dev/sda1为启动分区,/dev/sda2为根分区 root@test:~# fdisk -l /dev/sda Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors Disk …

神经网络模型---LeNet-5

一、LeNet-5 1.定义LeNet-5模型 model models.Sequential([1.1添加一个二维卷积层&#xff0c;有6个过滤器&#xff0c;每个过滤器的尺寸是5x5。输入图像尺寸是28x28像素&#xff0c;具有1个颜色通道,激活函数是relu layers.Conv2D(6, (5, 5), activationrelu, input_shape…

【Codesys】-计算开机通电运行时间,累计正常使用时间,故障停机时间

应客户要求&#xff0c;在程序添加了这个用来计算开机运行时间&#xff0c;原理就是取当前时间减去一开始记录的时间&#xff0c;没什么特别要求&#xff0c;记录一下使用的变量类型和数据写法&#xff0c;防止忘记了。 下文只写了一个开机通电运行时间的写法&#xff0c;累计…

ROS操作过程中的报错

文章目录 错误&#xff1a;E: Unable to locate package ros-noetic-desktop-full报错问题报错原因解决方法 错误2&#xff1a;ERROR: cannot download default source list from:报错问题错误原因解决办法 错误&#xff1a;E: Unable to locate package ros-noetic-desktop-fu…

查看 MAC 的 shell 配置文件

在Mac上&#xff0c;shell的配置文件主要取决于您当前使用的shell。从macOS Catalina开始&#xff0c;Mac使用zsh作为默认登录Shell和交互式Shell。以下是关于Mac上zsh shell配置文件的一些详细信息&#xff1a; 查看当前使用的shell&#xff1a; 要查看当前正在使用的shell&am…

养殖自动化温控系统:现代养殖场的智能守护神

现代农业养殖业中&#xff0c;养殖自动化温控系统已经成为提高生产效率和保障动物福利的关键技术之一。本篇文章将深入介绍养殖自动化温控系统的原理、组成、优势及其在不同类型养殖场中的应用实例&#xff0c;并展望该技术的未来发展。 一、养殖自动化温控系统概述 养殖自动…

智能制造 v3.13.12 发布,ERP、在线课堂、表白墙更新

智能制造一体化管理系统 [SpringBoot2 - 快速开发平台]&#xff0c;适用于制造业、建筑业、汽车行业、互联网、教育、政府机关等机构的管理。包含文件在线操作、工作日志、多班次考勤、CRM、ERP 进销存、项目管理、EHR、拖拽式生成问卷、日程、笔记、工作计划、行政办公、薪资模…

Hive笔记-3

3.2.2 查看表 1) 展示所有表 (1) 语法: 语法: SHOW TABLES [IN database_name] LIKE [identifier_with_wildcards]; In database_name 写的是查哪个数据库,一般不写默认是当前数据库 Like 后面跟通配符表达式 (2) 案例: 查看在 db_hive1 数据库里有没有以 stu 开头的表 …

C++第二学期期末考试选择题题库(qlu题库,自用)

又到了期末周&#xff0c;突击一下c吧— 第一次实验 1、已知学生记录的定义为&#xff1a; struct student { int no; char name[20]; char sex; struct 注意年月日都是结构体&#xff0c;不是student里面的 { int year; int month; …