• 大数据面试技术复习hadoop,hdfs,yarn


    大数据复习笔记
    一、hadoop
    hadoop特性:高可靠,高拓展,高效,,高容错性。
    面试考点:
    1.hadoop1.0和2.0区别
    ** hadoop1.0主要组成为mapreduce(计算+调度),hdfs(存储),common(辅助工具),2.0中加入了yarn负责资源调度,mapreduce只负责计算。3.0中组成上没有区别。**
    2.常用端口号
    hadoop3.x
    hdfs namenode 内部通常端口 :8020/9000/9820
    hdfs namenode 对用户的查询端口:9870
    yarn 查看任务运行情况的:8088
    历史服务器:19888
    hadoop2.x
    hdfs namenode 内部通常端口 :8020/9000/9820
    hdfs namenode 对用户的查询端口:50070
    yarn 查看任务运行情况的:8088
    历史服务器:19888
    二、hdfs
    hdfs是一个分布式文件管理系统,是一个文件系统,用于存储文件,通过目录树来定位文件。其次是一个分布式的,由很多台服务器联合起来实现功能,集群中的服务器有各自的角色。
    适用场景:适合一次写入,多次读出的场景。即一个文件经过创建,写入和关闭之后就不需要改变。
    1.hdfs优缺点
    优点:
    (1)高容错性。数据自动保存多个副本,通过增加副本的形式,提高容错性。一个副本丢失后可以自动恢复。
    (2)适合处理大数据。
    (3)可以构建在廉价机器上,通过多副本机制,提高可靠性。
    缺点:
    (1)不适合低延时数据访问,毫秒级数据存储做不到。
    (2)无法高效的对大量小文件进行存储。
    存储大量小文件的话,它会占用namenode大量的内存来存储文件目录和块信息。这样是不可取的,因为namenode的内存总是有限的。
    小文件存储的寻址时间会超过读取时间,违反了hdfs的设计目标。一个文件块占用150字节,不管是128m还是1kb都是150字节,一个文件块。
    (3)不支持并发写入,文件随机修改
    一个文件只能有一个写,不允许多个线程同时写。
    仅支持数据append(追加),不支持文件的随机修改。
    2.HDFS架构概述
    (1)namenode:存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的datanode等。
    (2)datanode:在本地文件系统存储文件块数据以及块数据的校验和。
    (3)secondarynamenode(2nn)每隔一段时间对namenode元数据备份。
    3.HDFS组成架构
    (1)namenode (nn)即master,是一个主管,管理者。
    ①管理HDFS的名称空间。
    ②配置副本策略。
    ③管理数据块(block)映射信息。
    ④处理客户端读写请求。
    (2)datanaode:即slave。namenode下达命令,datanode执行实际的操作。
    ①存储实际的数据块。
    ②执行数据块的读写操作。
    (3)secondarynamenode:并非namenode的热备。当namenode挂掉的时候,它并不能马上替换namenode并提供服务。
    ①辅助namenode,分担其工作量。比如定期合并fsimage和edits(快照和操作日志),并推送给namenode。
    ②在紧急情况下,可辅助恢复namenode。
    (4)client :即客户端
    ①文件切分。文件上传HDFS的时候,client将文件切分成一个一个的
    ②与namenode交互,获取文件的位置信息。
    ③与datanode交互,读取或者写入数据。
    ④client提供一些命令来管理hdfs,比如namenode格式化。
    ⑤client通过一些命令来访问HDFS,比如对HDFS的增删改查。
    面试考点:
    HDFS的文件在物理上分块存储,hadoop2.0,3.0默认128M,1.0版本是64M。如果寻址时间为10ms,即查找到目标block的时间为10ms,专家说寻址时间为传输时间的1%时,则为最佳状态,则传输时间为10ms/0.01=1000ms=1s,目前机械盘传输速率普遍为100mb/s,即分块128m,固态200-300m/s,即256m。
    面试考点:
    为什么块的大小不能设置太小,也不能设置太大?
    (1)HDFS设置太小,会增加寻址时间,程序一直在找块的开始位置。
    (2)如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始所需的时间。导致程序在处理这块数据时,会非常慢。
    4.HDFS命令
    hadoop fs 或者 hdfs dfs
    hadoop fd -chmod 666等
    5.fsimage和edits解析
    (1)fsimage文件:hdfs文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件inode的序列化信息。
    (2)edits文件:存放hdfs文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中。
    (3)seen_txid文件保存的是一个数字,就是最后一个edits_数字。
    (4)每次namenode启动的时候都会将fsimage文件读入内存,加载edits里面的更新操作,保证内存中的元数据是最新的,同步的,可以看成namenode启动的时候就将fsimage和edits文件进行了合并。
    6.datanode工作机制
    datanode启动后向namenode注册,回报块信息,datanode每六个小时向namenode汇报块信息。心跳检测每三秒检测一次,保证datanode没有挂掉。超过三秒再等待10分钟+30秒没有收到datanode的心跳,则认为该节点不可用。彻底挂掉后就不会再进行读写。
    7.如果数据已经损坏,但是datanode依然显示数据完好?crc(32)校验
    8.面试HDFS读写流程概括

         1. HDFS写流程
         客户端发送上传请求,通过RPCt与NameNode建立通信,NameNode检查该用户是否有上传权限,以及上传的文件在目录下是否有重名。有问题报错,否则返回客户端一个可以上传的信息。
    RPC是远程过程调用,它是一种通过网络从远程计算机程序上请求服务
    
    客户端根据文件的大小进行切分,默认128M一块,切分完成后给NameNode发送请求第一个block块上传到哪个服务器上
    NameNode收到请求后,根据网络拓补、机架感知、副本机制进行文件分配,返回可用的DataNode地址。
    网络拓补:各种设备的物理布局
    机架感知:种计算不同计算节点(TaskTracker)的距离的技术,⽤以在任务调度过程中尽量减少⽹络带宽资源的消耗
    副本机制:考虑到数据的安全与高效, 数据文件默认在 HDFS 上存放三份, 存储策略为本地一份,同机架内其它某一节点上一份, 不同机架的某一节点上一份
    
    客户端收到地址之后与服务器地址列表中的一个节点如A进行通信,建立通道,A收到请求后会继续调用B,B在调用C,将整个pipeline建立完成。
    客户端开始向A上发送第一个block(先从磁盘读取然后放到本地内存缓存),以packet(数据包,64k)为单位,A收到一个packet就会发送给B,然后B发送给C。
    在通道反向传输过程中,逐个发送ack应答,最终发送给客户端
    当一个block传输完成之后,客户端再次请求NameNode上传第二个block,NameNode重新选择三台Datanoe给客户端。
    2. HDFS读流程
    客户端向NameNode发送RPC请求,请求文件block的位置
    NameNode收到请求后检查用户权限以及是否有这个文件,之后返回DataNode地址
    这些返回的 DataNode 地址会进行排序,排
    序两个规则:网络拓扑结构中距离 Client 近的排靠前;心跳机制中超时
    汇报的 DataNode 状态为 STALE,这样的排靠后
    
    客户端选取排序靠前的DataNode来读取block
    读完列表的block后,若文件读取没结束,客户端继续向NameNode获取下一批block列表
    read 方法是并行的读取 block 信息,不是一块一块的读取
    
    最后读取来的所有block会合并成一个完整的最终文件
    --https://blog.csdn.net/weixin_43025525/article/details/125069954
    3. Question
    3.1 HDFS在读取文件时,如果其中一个块突然损坏了怎么办?
      客户端读取完 DataNode 上的块之后会进行 checksum 验证,也就是把客户端读取到本地的块与 HDFS 上的原始块进行校验,如果发现校验结果不一致,客户端会通知 NameNode,然后再从下一个拥有该 block 副本的 DataNode 继续读。
    
    4. HDFS在上传文件的时候,如果其中一个DataNode挂掉怎么办?
      客户端上传文件时会与datanode建立通道,正向发送的是数据包,反向发送的时ack确认。当datanode突然挂掉,客户端收不到ack,客户端会通知namenode,让新的datanode复制副本,将挂掉的datanode作下线处理。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    三、mapreduce
    mapredu ce:将maptask传给我们的文本内容先转换成string,根据空格将这一行切分成单词,并将单词输出为<k,v>格式传送给reducer,reduce()汇总各个key的个数,并输出key的总次数。
    四、yarn基础架构
    yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台。而mapreduce等运算程序相当于运行于操作系统之上的应用程序。

     yarn主要由resourcemanager,nodemanager,applicationmaster和container等组件构成。
     resourcemanager:主要作用是处理客户端请求,监控nodemanager,启动或监控applicationmaster,资源的分配与调度。
     nodemanager:主要作用管理单个节点上的资源,处理来自resourcemanager的命令,处理来自applicationmaster的命令。
     applicationmaster:作用为应用程序申请资源并分配给内部的任务,任务的监控与容错。
     container:container是yarn中的资源抽象,它封装了某个节点上的多维度资源,如内存,cpu,磁盘,网络等。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    yarn调度主要有三种,fifo(先进先出),容量(capacity scheduler),公平(fair scheduler)。Apache hadoop3.1.3默认的资源调度器是capacity scheduler,cdh默认的调度器是fair scheduler。
    容量调度:多队列,每个队列可配置一定的资源聊,每个队列采用FIFO调度策略(多队列)。管理员可以为每个队列设置资源最低保证和资源使用上限(容量保证)。如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。支持多用户共享集群和多应用程序同时运行(灵活性)。为防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定(多租户)。
    容器调度算法:(1)从root开始,使用深度优先算法,优先选择资源占用率低的队列分配资源。
    (2)作业资源分配:默认按照作业的优先级和提交时间顺序分配资源。
    (3)容器资源分配:按照容器的优先级分配资源,如果优先级相同,按照数据本地性原则:①任务和数据在同一节点,任务和数据在同一机架,任务和数据不在同一节点也不在同一机架。
    公平调度:支持多队列多作业,管理员可为每个队列设置最低资源和资源使用上限。其他同上。
    面试重点:YARN的工作机制,yarn的调度器特点。
    调度器特点:相同点支持多队列,可以借资源,支持多用户。
    不同点:容量调度器有限满足先进来的任务执行。
    公平调度器:在队列里面的任务公平享有队列资源。

  • 相关阅读:
    perl列表创建、追加、删除
    04-vue-cli-启动配置和静态资源配置
    LINUX 基础
    Es6的promise和async
    质量、重力和重量
    Window系统安装 bee
    怎么开启22端口访问权限,让别的机器通过ssh或者向日葵等远程控制工具链接
    Spring Cloud Alibaba-01-微服务介绍
    基于poi和JavaBean的excel导出
    NewStarCTF 2023 web
  • 原文地址:https://blog.csdn.net/jtpython666/article/details/125559315