ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

hdfs面试资料结合学习笔记

2022-03-04 20:03:23  阅读:203  来源: 互联网

标签:hdfs 结点 HDFS NN 文件 笔记 面试 集群 namenode


1. 写数据读数据

  • 写数据流程
  • 读数据流程

2. 为什么HDFS不支持存储小文件?

原因

  1. 占用NameNode大量的内存和磁盘来存储文件目录和块信息
  2. 读取小文件的寻址时间大于读取小文件内容的时间

解决方案

  1. 从根源上解决小文件的产生,如从每小时抽取一次修改为每天抽取一次来积累数据量
  2. 合并。写一个MR任务将小文件合并
如果是下载:`hadoop fs -getmerge 小文件目录 下载的目录`
如果是追加一个文件到已经存在的文件末尾就是`hdfs  dfs  -appendToFile  文件  要追加末尾的文件`

3. HDFS三个核心组件是什么,分别有什么作用?

  • HDFS三个核心组件是NameNode,DataNode,SecondaryNameNode
  • NameNode
    是什么:
    是HDFS中的一个进程
    干什么:
    -- 当hdfs开始运行时,namenode存放的是文件信息,文件内容包括1.关于datanode与block块的映射信息2.存储时间
    3.文件权限4.文件大小
    怎么用:
    -- 当系统启动时
    ---- datanode会向namenode反馈关于block与datanode的映射关系,namenode将此关系进行记录,
    如果某个数据的副本数小于设置数,那么NN会将这个副本拷贝到其他结点集群中运行。
    -- 当集群启动时
    ---- 1.namenode与datanode保持心跳机制,datanode向namenode三秒钟发送一次,在/opt/hadoop-3.1.2/etc/hadoop/hdfs-site.xml中修改
    ---- 2.如果客户端需要上传或下载数据时,namenode不会让数据存储到异常的datanode中,也不会让客户端从异常的datanode中下载数据
    如果datanode超过3秒没有心跳,就认为datanode出现异常。
    ---- 3. 如果datanode超过10分钟+30秒钟没有心跳,那么namenode就回将datanode存储的数据转存到其他结点。
    性能
    namenode为了效率,将所有的操作都在内存中完成,namenode不会在磁盘进行任何交换。
  • DataNode
    是什么:
    是HDFS中的一个进程
    干什么:
    -- 启动时
    ---- 汇报之前,先验证Block文件是否被损坏。
    ---- 向namenode汇报datanode上block的信息。
    -- 运行中
    ---- 向namenode保持心跳机制
    ---- 客户可以向datanode读写数据
    -- 怎么用
    ----
  • SecondaryNameNode
    -- 传统解决方案
    ---- 1. 日志机制
    具体情况:做任何操作前前记录日志,当namenode下次启动前按照日志执行一遍即可。
    缺点:日志文件大小不可控,随着时间的发展,集群启动的时间会越来越长,有可能日志中存在大量的无效日志。
    优点:绝对不会丢失数据。
    ---- 2. 拍摄快照
    具体情况:我们可以将内存中的数据写出到硬盘上,启动时还可以将硬盘上的数据写会到内存中。
    缺点:关机时间过长,如果是异常关机,数据还在内存中,没法写入硬盘。如果写出频率过高,导致内存使用率低。
    优点:启动时间较短
    -- 现解决方案
    ---- 日志edits+快照fsimage
    具体情况:让日志大小可控,让快照定时保存
    namenode文件目录:
    cd /var/bdp/hadoop/full/dfs/name/current

    -- SNN数据恢复
    ---- 1. 强行杀死namenode结点 kill -9 进程名称
    ---- 2. 清空namenode下name的fsimage和edits文件
    ---- 3. snn下name中的fsimage和edits复制到namenode对应文件夹中
    ---- 4. 启动namenode hadoop-daemon.sh start namenode
    ---- 5. 访问namenode结点页面,成功。

4. fsimage和edit是做什么用的?

  • fsimage文件存储的是Hadoop的元数据文件,其中包括HDFS文件系统的所有目录和文件id及相关属性的序列化信息,
    如果namenode发生故障,最近的fsimage文件会被载入到内存中,用来重构元数据的最近状态,
    再从相关点开始向前执行edit、logs文件中记录的每个事务。
  • edits:用户操作的编辑日志文件,存放HDFS文件系统的所有更新操作的动作。
    文件所有写操作也会被记录到edits文件。

5. Linux中的块大小为4kb,为什么HDFS中块大小为64MB或128MB?

  • 块是存储在文件系统中的数据的最小单元,如果采用4kb的块大小来存放存储在Hadoop中的数据,就会需要大量的块,
    大大增加了寻找块的时间,降低了读写效率。
  • 一个map或一个reduce都是以一个块为单位处理,如果块很小,mapreduce任务数就会很多,任务之间的切换开销很大,效率很低。

6. 并发写入HDFS文件可行吗?

不行,因为客户端通过namenode接收到在数据块上写入的许可后,那个块会锁定直到写入操作完成,所以不能在同一个块上写入。

7. HDFS 放置副本的策略?

  • 1.x:
    第一个副本存放的位置:
    集群内部(优先考虑和客户端相同结点作为第一节点)
    集群外部(选在资源最丰富且不繁忙的结点作为第一节点)
    第二个副本存放的位置:
    选择与第一个结点不同机架的结点
    第三个副本存放的位置:
    选择与第二个结点相同机架的结点
    第N个结点:
    与前面结点不重复的结点
  • 2.x
    第一个副本存放的位置:
    集群内部(优先考虑和客户端相同结点作为第一节点)
    集群外部(选在资源最丰富且不繁忙的结点作为第一节点)
    第二个副本存放的位置:
    选择与第一个结点相同机架的结点
    第三个副本存放的位置:
    选择与第一个结点不同机架的结点
    第N个结点:
    与前面结点不重复的结点

8. namenode的工作机制?

  • 第一阶段:NameNode启动
    (1) 第一次启动NN格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存
    (2) 客户端对元数据进行增删改的请求
    (3) NN记录操作日志,更新滚动日志
    (4) NN在内存中对元数据进行增删改
  • 第二阶段:SNN工作
    (1) SNN询问NN是否需要CheckPoint。直接带回NN是否检查结果。
    (2) SNN请求执行CheckPoint
    (3) NN滚动正在写的Edits日志
    (4) 将滚动前的编辑日志和镜像文件拷贝到SNN
    (5) SNN加载编辑日志和镜像文件到内存,并合并
    (6) 生成新的镜像文件fsimage.chkpoint
    (7) 拷贝fsimage.chkpoint到NN
    (8) NN将fsimage.chkpoint重写命名成fsimage

9. DataNode工作机制?

(1) 一个数据块在DN上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据的长度,块数据的校验和,以及时间戳。
(2) DN启动后向NN注册,通过后,周期性(1小时)的向NN上报所有块信息。
(3) 心跳是每3秒一次,心跳返回结果:带有NN给该DN的命令,如复制块数据到另一台机器,或删除某个数据块。
如果超过10分钟没有收到某个DN,则认为该节点不可用。
(4) 集群运行中可以安全加入和退出一些机器。

10. HDFS文件系统有什么特点?

  • 优点:
    (1) 默认保存3份副本,当副本丢失或宕机,数据自动恢复,提供容错机制。
    (2) 节约成本,运行在廉价的机器上。
    (3) 适合批处理,移动计算而非数据。
    (4) 适合大量数据的处理,能处理PB级以上的数据,可处理百万规模以上的文件数量。
    (5) 流式数据访问,一次写入,多次读取,高吞吐量。
  • 缺点
    (1) 不擅长低延迟数据的访问。
    (2) 不擅长小文件分区,占用NN大量内存,磁盘寻道时间超过读取时间。
    (3) 不擅长并发写入,文件随即修改,一个文件只能有一个写入者,仅支持对文件添加,不支持文件被修改,修改会影响偏移量。
    (4) 块的大小一旦文件上传之后就不允许被修改。

11. 有一个200M的文件写入hdfs是先写128M复制完之后再写72M还是全部写完再复制?

HDFS上在写入数据的时候,首先会对数据切块,然后从客户端到datanode形成一个管道,在至少将一个文件写入hdfs上后,
表示文件写入成功,然后进行复制备份操作,所以是全部写完再复制。

12. 什么是机架感知?

NN通过读取我们的配置来配置各个结点所在的机架信息

13. 什么时候会用到机架感知?

数据的流水线复制和HDFS复制副本时

14. HDFS数据完整性如何保证?

NN与DN会定期通过文件的校验和检查文件的完整性,如果发现某节点上的某文件校验和不一致,就会从其他结点上恢复损失的文件,
从而保证数据的完整性。

15. 什么是HDFS文件系统?

HDFS是大数据开源框架Hadoop的组件之一,全称(Hadoop Distributed File System),他是一个分布式文件系统,
由多台服务器联合起来实现文件存储功能,通过目录树来定位文件,集群中的服务器有各自的角色。

16. 什么时候进入安全模式?安全模式下集群有什么限制?安全模式下集群在做什么?如何查看进入、退出、等待安全模式?

  • 什么时候进入安全模式?
    NameNode启动时,会将镜像文件(Fsimage)和日志(Edits)加载到内存。一旦在内存中成功建立文件系统元数据的镜像,则创建一个新的Fsimage文件和一个空的编辑日志。
    此时NN开始监听DN请求。这个过程期间,NN处于安全模式,当数据块的副本数不满足最小副本数时,不会退出安全模式。(dfs.replication.min = 1)
  • 安全模式下集群,NN的文件系统对客户端是只读的。
  • 安全模式下集群在做什么?
    在安全模式下集群在进行恢复元数据,即在合并fsimage和edits.log,并且接收DN的心跳信息,恢复block的位置信息,将集群恢复到上次关机前的状态。
  • 操作安全模式下的状态?
bin/hdfs dfsadmin -safemode get 查看
bin/hdfs dfsadmin -safemode enter 进入
bin/hdfs dfsadmin -safemode leave 离开
bin/hfds hdfsadmin -safemode wait 等待
  • 注意:
    集群正常启动后,自动退出安全模式,如果无法正常退出可使用hdfs dfsadmin -safemode leave退出安全模式;
    对于全新创建的HDFS集群,NN启动后不会进入安全模式,因为没有Block块信息。

17. 单机模式(standalone)中的注意点?

在单机模式中不会存在守护进程,所有东西都运行在一个JVM上。这里同样没有DFS,使用的是本地文件系统。单机模式适用于开发过程中运行MapReduce程序,
这也是最少使用的一个模式。

18. 伪分布式模式中的注意点?

伪分布式模式(Pseudo)适用于开发和测试环境,在这个模式中,所有守护进程都在同一台机器上运行。

19. 全分布模式又有什么注意点?

全分布模式通常被用于生产环境,这里我们使用N台主机组成一个Hadoop集群,Hadoop集群,Hadoop守护进程运行在每台主机之上。
这里会存在NameNode运行的主机,DN运行的主机,以及Task Tracker运行的主机。在分布式环境下,主节点和从节点会分开。

20. Hadoop有哪些发行版本?

Apache:最原始的版本。
Cloudera:在大型互联网企业中用的较多。
Hortonworks:文档较好。

21. 启动集群时,我们要对NN格式化操作,为什么只格式化操作一次?

因为格式化NN,就会产生新的集群id,导致NN和DN的集群id不一致,集群找不到以往数据,现象:DN无法正常启动。
所以重写格式化NN时,一定要先删除data数据和log日志,然后再格式化NN后再启动集群。

22. 启动集群的相关命令有哪些?

(1) 启动集群之前格式化
hdfs name -format
(2) 启动HDFS服务

  1. 启动namenode
    sbin/hadoop-daemon.sh start/stop namenode
  2. 启动datanode
    sbin/hadoop-daemon.sh start/stop datanode
    检查namenode的web页面是否可以访问:http://192.168.200.132:9870
  3. 启动YARN服务
    (1) 启动resourcemanager
    sbin/hadoop-daemon.sh start/stop resourcemanager
    (2) 启动nodemanager
    sbin/yarn-daemon.sh start/stop nodemanager
    检查yarn的web页面,http://192.168.132:8088
  4. 开启历史服务
    sbin/ mr-history-daemon.sh start/stop historyserver
  5. 实现了集群的群停和群起
    (1) HDFS服务进程
    配置etc/hadoop/slaves
    群起的命令:start-dfs.sh
    群停的命令:stop-dfs.sh
    (2) yarn服务进程
    配置etc/hadoop/slaves
    群起的命令:start-yarn.sh
    群停的命令:stop-yarn.sh
    (3) start/stop-all.sh

23. HDFS文件操作的命令有哪些?

hadoop fs/hdfs dfs 命令分类
本地文件 -> HDFS:
-put
-copyFromLocal
-moveFromLocal
-appendToFile

HDFS与HDFS之间:
-ls
-mkdir
-rm
-rmr
-rm -r
-cp
-mv
-chown
-chmod
-du -h
-df -h
-cat

HDFS -> 本地:
-get
-getmerge
-copyToLocal

其他:
-setrep
-help

23. 是否可以再Windows上运行Hadoop?

最好不要,因为会出现各种问题。
最佳操作系统:Red Hat Linux或Ubuntu

24. 是否可以在不同集群之间复制文件?如何做到?

用distcp命令
hadoop distcp hdfs://hadoop102:9000/user/hello.txt hdfs://hadoop103:9000/user/hello.txt
将集群hadoop102上的文件赋值到hadoop103上。

25. 简述hadoop的几个默认端口及含义?

dfs.namenode.http-address:50070
SecondaryNameNode辅助名称结点端口号:50090
fs.defaultFS:9000(datanode将发送心跳到namenode的端口)
yarn.resourcemanager.webapp.address:8088
historyserver:19888

26. datanode可以设置多目录存储数据吗?怎么实现?

可以,并且设置多目录存储数据不一样。
编辑hdfs-site.xml文件,添加如下配置项,这里块数据会分布存储再data1和data2目录中

<property>
    <name>dfs.name.data.dir</name>
    <value>file:///dfs/data1,file:///dfs/data2</value>
</property>

27. 公司用hadoop的哪个版本?运行hadoop需要什么平台和哪个JDK的版本?

hadoop2.x比较多,因为企业追求的时稳定性,也有历史兼容问题。越旧的软件,维护的成本越大
运行hadoop需要Linux操作平台,JDK1.8版本

28. 当两个用户尝试访问HDFS中的同一文件并修改时会发生什么?

HDFS上的文件只支持单用户操作,第二个用户会被拒绝。

29. 关于ssh的免密登录?

  1. 生成密钥 ssh-keygen -t rsa
  2. 发送私钥 ssh-copy-id localhost(本机)
  3. 采用非对称加密算法,采用rsa加密算法

30. 谈谈什么是hadoop?

Hadoop是一个开源软件框架,用于存储大量数据,并发计算/查询结点的集群上的数据
Hadoop包括以下内容:

  • HDFS(Hadoop Distributed File System)
    Hadoop分布式文件
  • MapReduce
    分布式计算框架,它以分布式和并行的方式处理大量的数据
  • YARN(资源定位器)
    用于管理和调度集群资源的框架

31. HDFS默认数据块大小是什么,为什么?

Hadoop1.x是64M, Hadoop2.x中是128M
因为目前磁盘的传输率约为100M/s,而HDFS读取文件时最佳的寻址时间为10ms,
寻址时间为传输时间的百分之1时最佳,所以定义块的大小为128M,1秒左右可以读取完毕,
本质上HDFS的块大小取决于磁盘的读取效率,真实情况下,会根据文件大小和集群结点的数量综合考虑块的大小。

32. 默认情况下,进行checkpoint(合并镜像及编辑日志)的触发条件是什么?

默认情况下,2NN每小时执行一次checkpoint
默认情况下,一分钟检查一次Edits文件的操作次数,当操作次数达到一百万时,2NN执行一次checkpoint

33. 工作中如果namenode发生故障,导致namenode中的元数据丢失,如何恢复数据?

  • 方法一:
    将2NN所在服务器元数据存储目录中数据拷贝到NN中存储,元数据的name目录下,重写开启服务即可。
  • 方法二:
    使用-importCheckpoint选项启动NameNode守护进程,将2NN所在服务器元数据存储目录拷贝到NN所在服务器的同级目录下,
    导入检查点数据,重新开启服务即可。
    修改hdfs-site.xml中的

    dfs.namenode.checkpoint.period
    120


    dfs.namenode.name.dir
    /opt/hadoop-3.1.2/data/tmp/dfs/name

    导入检查点数据:hdfs namenode -importCheckpoint
    注意: 恢复后会丢失最后一次Edits文件记录的用户操作

34. 配集群的过程中如果发现各台服务器的datanode启动后,过一段时间后自动消失了,查看原因发现datanode的集群id不同于namenode的集群id,

这时,如果让集群正常工作,如何处理?

  • 原因
    这是因为多次格式化nn后造成,dn和nn的集群id不一致导致的。
  • 解决方案
    (方案1) 如果集群没有任何数据,可以删除服务器的datalogs目录重新格式化,重新启动集群
    (方案2) 如果集群中已经存在大量数据,则找到无法启动datanode的服务器进入到data/tmp/dfs/data目录下找到VERSION文件删除后,重新开启datanode服务。

35. 列出hadoop集群中hadoop需要启动哪些进程及作用?

(1) namenode
(2) datanode
(3) secondary namenode
(4) resourcemanager: 统一资源调度和管理器。处理客户端请求,监控NodeManager,启动或监控ApplicationMaster, 资源的分配与调度。
(5) nodemanager:提供计算资源管理单个结点上的资源处理来自ResourceManager的命令,处理来自ApplicationMaster的命令。

36. namenode是怎么确定datanode能够正常工作的?他们之间是怎么保持联系的?

dn会向nn注册,nn返回注册成功;
之后每小时dn向nn上传块信息,每3秒dn向nn发送一次心跳包,并携带nn给dn的命令,
默认情况下,如果超过10分30秒nn没有收到dn的心跳,则任务dn掉线。

37. 刷新nn的命令是什么?刷新resourcemanager的命令是什么?

hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes

38. 现要在原有hadoop集群的基础之上要求扩展两个结点,如果操作?

(1) 从现有集群的任意服务器克隆两台服务器,修改主机名和ip地址
(2) 删除集群hadoop3.1.2目录下的data,logs目录
(3) 修改/etc/hosts文件,增加本机的主机,ip映射关系
(4) 将/etc/hosts分发到其他服务器
(5) 配置ssh免密登录
(6) 登录dn和nn

39. 公司有100台服务器组成的集群,由于疫情期间业务骤减,现需要减少10台服务器,如何退役这些结点,有哪种方式退役?

  • 退役的方式
    (1) 在黑名单上面的主机都会被强制退出
    (2) 添加到白名单的主机节点,都允许访问NN,不在白名单的主机节点,都会被强制退出。
    注:黑名单、白名单不允许同时出现,如果同时出现,不允许白名单和黑名单同时出现同一个主机名称。
本业务场景适合使用黑名单

步骤:
1. 可以在hadoop-3.1.2/etc/hadoop目录下创建黑名单dfs.hosts.exclude文件
2. 在dfs.hosts.exclude文件中添加要退役的服务器名称
3. 在hdfs-site.xml文件中添加黑名单的配置
<property>
    <name>dfs.hosts.exclude</name>
    <value>黑名单文件绝对路径</value>
</property> 
4. 刷新NN,刷新ResourceManager
hdfs  dfsadmin  -refreshNodes
yarn  dfsadmin  -refreshNodes

标签:hdfs,结点,HDFS,NN,文件,笔记,面试,集群,namenode
来源: https://www.cnblogs.com/jsqup/p/15963368.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有