当前位置:   article > 正文

hadoop面试题(一)_hdfs面试题

hdfs面试题

1 hdfs写流程

1、根namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在

2、namenode返回是否可以上传

3、client请求第一个 block该传输到哪些datanode服务器上

4、namenode返回3个datanode服务器ABC

5、client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将真个pipeline建立完成,逐级返回客户端

6、client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答

7、当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。

2 hdfs读数据的过程

1、跟namenode通信查询元数据,找到文件块所在的datanode服务器

2、挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流

3、datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)

4、客户端以packet为单位接收,现在本地缓存,然后写入目标文件

3 MapReduce过程,排序递归

  1. Map 阶段:将输入数据按照键值对的形式输入到 Map 函数中,进行数据的初步处理,生成一个或多个键值对作为输出。这些键值对可被用于后续 Reduce 阶段。

  2. Shuffle 阶段:MapReduce 框架会对 Map 阶段的输出进行排序和分组,以便于 Reduce 阶段的处理。在 Shuffle 阶段中,MapReduce 框架会对 Mapper 输出的键进行排序,并将相同键的值合并为一个组,然后将组作为 Reduce 函数的输入。

  3. Reduce 阶段:Reduce 函数接收 Shuffle 阶段的输出作为输入,对其进行进一步的处理,生成最终的输出结果。

4 HDFS里面有哪些组件,分别有哪些功能

  1. NameNode:是 HDFS 的主服务器,负责管理整个文件系统的命名空间以及客户端的文件访问。NameNode 保存了文件系统的目录结构和文件元数据信息,包括文件名称、权限、块列表等。NameNode 负责处理客户端的文件读写请求,并将数据块的位置信息返回给客户端。

  2. DataNode:是 HDFS 中的数据服务器,负责存储文件数据和处理与文件数据相关的客户端操作。每个数据块在 HDFS 中都有多个副本,DataNode 负责存储和管理这些数据块的副本,并与其他 DataNode 进行数据块的复制和传输。DataNode 还会向 NameNode 定期发送心跳消息和数据块汇报,以便 NameNode 更新数据块的位置信息。

  3. Secondary NameNode:与 NameNode 配合使用,负责定期对 NameNode 的元数据进行备份和整理。Secondary NameNode 定期从 NameNode 中获取文件系统的快照,并将它们合并为一个新的命名空间镜像,以减少 NameNode 处理大量元数据时的压力。

  4. JournalNode:HA集群下,用于同步主备NameNode之间的元数据信息。

  5. HttpFS gateway:HttpFS是个单独无状态的gateway进程,对外提供webHDFS接口,对HDFS使用FileSystem接口对接。可用于不同Hadoop版本间的数据传输,及用于访问在防火墙后的HDFS(HttpFS用作gateway)。

5 hdfs namenode承载的最大文件数是多少

hdfs namenode能承载的最大文件数没有固定的值,主要受两个因素影响:

1、namenode的存储容量大小。当hdfs中新增的文件数量超过可以用的存储容量时,namenode将无法再添加洗难度文件。

2、文件的元数据大小,元数据太大占用的内存也会更大,文件的的元数据与文件名、权限、时间戳、块列表等有关。

6 hdfs元数据的产生,fsimage和edits的区别

元数据的产生过程可以分为两个方面:

  1. 客户端操作:当客户端创建、删除、修改文件或目录时,它会向 NameNode 发送请求,并将相关元数据信息随请求一同传输给 NameNode。

  2. NameNode 内部操作:NameNode 会定期保存内存中的元数据到磁盘上,以便恢复和备份。在保存过程中,NameNode 将内存中的元数据序列化,然后写入到 fsimage 文件中。同时,NameNode 还将最近的一批元数据修改操作写入到 edits 文件中,以便在重启时能够将其读取并更新内存中的元数据。

fsimage 和 edits 是 HDFS 中用于保存元数据的两个文件,它们的作用如下:

  1. fsimage:是一个静态的、只读的文件,用于保存 NameNode 当前内存中的元数据状态。当 NameNode 重启时,会从 fsimage 文件中读取元数据信息,进行内存初始化。

  2. edits:是一个动态的、可写的文件,用于记录 NameNode 内存中元数据的增、删、改操作。当 NameNode 收到一个新的元数据修改请求时,会将修改操作写入到 edits 文件末尾。在 NameNode 重启后,还需要从 edits 文件中读取修改操作并进行内存更新,以便恢复元数据修改的状态。

总之,fsimage 是当前元数据状态的快照,而 edits 则是记录了元数据变更历史的文件。两者结合提供了元数据的持久化和可靠性,保证了 HDFS 元数据的稳定性和一致性。

7 hdfs数据不均衡时怎么做?两个不均衡的块之间有一个值是多少?

  1. 手动移动块:管理员可以通过手动移动数据块的方式来实现数据均衡。该方法需要管理员手动控制和操作,并且需要对集群状态进行详细的监控和调整。

  2. 自动块平衡器:Hadoop 中提供了一个称为“块平衡器”的工具,可以自动检测并移动数据块以降低数据不均衡度。管理员也可以通过配置块平衡器的参数来设置其执行周期、速度等特性。

  3. 增加节点:向 Hadoop 集群中增加新节点可以分担部分数据存储和计算负载,从而达到均衡数据的目的。管理员可以通过增加节点的方式来处理数据不均衡的情况。

两个不均衡的块之间有一个值时,这个值是指 HDFS 块副本之间的距离(即块之间的传输成本)。这个值越小,数据块的访问速度越快,因为数据块距离计算节点更

8 hdfs性能变差定位思路

  1. 网络带宽问题:Hadoop 集群中数据节点之间的网络通信是数据传输的瓶颈之一。当数据节点之间的网络带宽不足时,可能会导致整个 Hadoop 集群的性能下降。管理员可以通过检查网络带宽流量、网络拥塞情况等来判断并排除该问题。

  2. 数据节点资源瓶颈:如果某一个或几个数据节点的 CPU、内存等系统资源达到了极限,则可能会导致整个集群的性能下降。管理员可以通过检查数据节点的 CPU、内存使用情况以及进程运行状态等来判断该问题。

  3. 磁盘 I/O 问题:数据在 HDFS 中通常存储在硬盘上,因此磁盘 I/O 是 HDFS 性能的另一个瓶颈。如果某一个或几个数据节点的磁盘出现故障或磨损严重,则可能会影响整个 Hadoop 集群的性能。管理员可以通过检查各个节点的磁盘 I/O 使用情况、磁盘读写速度等来判断该问题。

  4. 数据倾斜问题:如果某个数据块过大或过小,则可能会导致某些节点的负载过重或者空闲。这种情况下,可能需要进行数据均衡以加速集群的处理速度。管理员可以通过检查数据块大小、分布情况等来判断和解决该问题。

  5. 配置不当:如果 Hadoop 集群的配置不当,也可能会引起性能下降问题。管理员可以通过检查 Hadoop 配置文件(如 hdfs-site.xml、core-site.xml 等)来确认配置是否正确,并进行必要的调整。

10 application master的作用,task只能是reduce task吗?am运行在哪里

AM 的主要作用如下:

  1. 申请资源:AM 向 ResourceManager 申请运行 map 和 reduce task 所需要的资源。

  2. 分配任务:AM 根据作业计划和可用资源来分配 map 和 reduce task 给空闲的节点。

  3. 监控任务:AM 监控 map 和 reduce task 的进度,当任务发生错误或超时时,通知 ResourceManager 回收任务资源。

  4. 故障处理:当某个节点或任务发生故障时,AM 可以重启任务或重新分配任务,保证作业顺利执行。

AM 可以同时运行 Map 和 Reduce 任务,而且可以根据需要动态地调整任务数量。因此,不仅可以运行 Reduce 任务,也可以运行 Map 任务。

AM 运行在 YARN 资源管理器(ResourceManager)所在的节点上

11 yarn作业提交流程

1.客户端准备提交应用程序。客户端通常运行在 Hadoop 集群的外部(比如本地机器),它需要配置 YARN 和 HDFS 的连接信息。

2.客户端向 ResourceManager 提交应用程序创建请求。该请求包括应用程序的名称、资源需求(CPU、内存等)以及启动命令等信息。

3.ResourceManager 接收应用程序创建请求,开始为应用程序分配资源。它会根据集群资源情况和应用程序的资源需求来确定分配资源的方式,并返回一个 Application ID 给客户端。

4.客户端使用 Application ID 启动 ApplicationMaster。ApplicationMaster 是应用程序中的管理器,它负责与 ResourceManager 通信、分配任务、监控任务进度和协调任务执行。

5.ApplicationMaster 向 ResourceManager 发送任务请求。它会根据应用程序需要执行的任务类型和数量,向 ResourceManager 发送任务请求。ResourceManager 接收到请求后,会根据集群资源情况来分配容器资源,并将分配结果返回给 ApplicationMaster。

6.ApplicationMaster 接收到任务的容器资源分配信息后,开始启动任务。它会将启动命令和分配的资源信息传递给对应的任务容器,容器会在分配的节点上启动任务。

7.任务容器在启动之后,会与 ApplicationMaster 保持心跳,汇报任务的进度和状态。ApplicationMaster 会根据任务的执行进度,决定是否需要分配更多的容器资源来加速任务执行。

8.当所有的任务都执行完毕时,ApplicationMaster 会向 ResourceManager 发送应用程序完成请求,并释放占用的资源。

9.ResourceManager 接收到应用程序完成请求后,将该应用程序的信息从内部数据结构中删除,并释放该应用程序所占用的资源。

12 如何查看HDFS目录下的文件数量

hdfs dfs -ls 路径 | grep "^-" | wc -l

13 hdfs的rpc高是什么问题

  1. 监控和记录:在 Hadoop 集群中,首先需要监控集群的运行状态,并记录每个节点的 CPU、内存、磁盘等性能指标,同时还可以使用工具(如 Ambari Metrics)来记录服务的网络 I/O 延迟、RPC 请求数量和处理时间等指标。

  2. 使用诊断工具:Hadoop 中提供了一些诊断工具,例如 jstack、jmap、jstat 等,可以用来分析某个进程或线程的 CPU 使用率、堆栈信息、GC 行为等,以确定是否有耗时操作导致 RPC 性能下降。

  3. 分析日志:Hadoop 的各个组件都会生成大量的日志信息,其中包含了很多有关 RPC 调用的调试信息,通过对这些日志进行分析,可以确定 RPC 调用所涉及的组件、参数、响应时间等信息。

  4. 使用工具进行跟踪:在诊断过程中,可以使用一些工具进行跟踪,例如 Apache HTrace 和 Google Dapper 等分布式跟踪系统,它们可以帮助我们分析 RPC 调用的整个过程,从而更好地定位问题。

  5. 进行优化:在定位问题之后,可以根据具体情况采取相应的优化措施,例如调整网络配置、修改 JVM 参数、启用压缩等,以提高 RPC 性能。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/676540
推荐阅读
相关标签
  

闽ICP备14008679号