Hadoop源码阅读(二):DataNode启动

这篇具有很好参考价值的文章主要介绍了Hadoop源码阅读(二):DataNode启动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明:
1.Hadoop版本:3.1.3
2.阅读工具:IDEA 2023.1.2
3.源码获取:Index of /dist/hadoop/core/hadoop-3.1.3 (apache.org)
4.工程导入:下载源码之后得到 hadoop-3.1.3-src.tar.gz 压缩包,在当前目录打开PowerShell,使用tar -zxvf指令解压即可,然后使用IDEA打开hadoop-3.1.3-src文件夹,要注意配置好Maven或Gradle仓库,否则jar包导入会比较慢
5.参考课程:尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放_哔哩哔哩_bilibili

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

ctrl + n 全局查找datanode,进入DataNode.java

官方对其介绍如下:

/**********************************************************
 * DataNode is a class (and program) that stores a set of
 * blocks for a DFS deployment.  A single deployment can
 * have one or many DataNodes.  Each DataNode communicates
 * regularly with a single NameNode.  It also communicates
 * with client code and other DataNodes from time to time.
 *
 * DataNodes store a series of named blocks.  The DataNode
 * allows client code to read these blocks, or to write new
 * block data.  The DataNode may also, in response to instructions
 * from its NameNode, delete blocks or copy blocks to/from other
 * DataNodes.
 *
 * The DataNode maintains just one critical table:
 *   block-> stream of bytes (of BLOCK_SIZE or less)
 *
 * This info is stored on a local disk.  The DataNode
 * reports the table's contents to the NameNode upon startup
 * and every so often afterwards.
 *
 * DataNodes spend their lives in an endless loop of asking
 * the NameNode for something to do.  A NameNode cannot connect
 * to a DataNode directly; a NameNode simply returns values from
 * functions invoked by a DataNode.
 *
 * DataNodes maintain an open server socket so that client code 
 * or other DataNodes can read/write data.  The host/port for
 * this server is reported to the NameNode, which then sends that
 * information to clients or other DataNodes that might be interested.
 *
 **********************************************************/

找到main方法

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入secureMain方法:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入createDataNode方法:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

  • 进入instantiateDataNode方法(初始化DN):

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入makeInstance方法(实例化对象):

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入DataNode类:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入startDataNode方法,之后进行DN启动的一系列操作;

1.初始化DataXceiverServer(initDataXceiver)

startDataNode方法中:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入initDataXceiver方法:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

dataXceiverServer是一个服务(线程),DN利用该服务来接收客户端和其他DN发送过来的数据服务

2.初始化HTTP服务(startInfoServer)

startDataNode方法中:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入startInfoServer方法,实例化了一个httpserver

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入DatanodeHttpServer类:(DatanodeHttpServer.java)

也是通过builder构建了一个HTTP server

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

3.初始化RPC服务器(initIpcServer)

startDataNode方法中:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入initIpcServer,构建RPC服务器

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

4.向NameNode注册(refreshNamenodes)

startDataNode方法中:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入refreshNamenodes(BlockPoolManager.java)

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入doRefreshNamenodes方法:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

先是创建BPOS,然后启动所有的BPOS

  • 接下来进入createBPOS方法

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

可以看到根据NameNode个数创建对应的服务:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

有多少个NN就创建多少个对应的服务

  • 进入startAll方法

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

可以看到,遍历了所有的bpos,依次进行启动

这里的offerServices是存储所有通过createBPOS方法创建的bpos的集合:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入bpos.start()方法:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

继续进入:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

看到bpThread,表示开启一个线程,因此查找其run方法

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

可以看到通过connectToNNAndHandshake方法向NN进行注册:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

  • 通过connectToNN方法来获取NN的RPC客户端对象,进入该方法:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入DatanodeProtocolClientSideTranslatorPB

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

通过createNamenode方法来创建NN的RPC代理:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

  • 通过register方法来向NN进行注册:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

通过bpNamenode.registerDatanode将注册信息发送给NN(bpNamenode即创建的NN RPC proxy)

注意:这里的registerDatanode方法,由DN调用,但执行在NN

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

FSNamesystem中查找:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

ctrl+alt+h查看该方法的调用:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

于是到NameNodeRpcServer中去查找:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

可以看到,DN的信息向NN注册这一步骤是在该方法中完成的;

接下来回到FSNamesystem中,进入blockManager.registerDatanode方法:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入datanodeManager.registerDatanode:(DatanodeManager.java)

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入addDatanode

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

5.向NameNode发送心跳

回到startAll方法,再向前进入到BPServiceActor.java中的run方法

找到其中的offerService方法

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入offerService方法:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入sendHeartBeat方法:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

这里的bpNamenode是在connectToNNAndHandshake方法中获取到的NN的代理

因此该方法实际上是通过NN的RPC客户端将心跳信息发送给NN

因此该方法实际的实现是在NN中,因此在NameNodeRpcServer.java中搜索sendHeartbeat

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

通过handleHeartbeat来处理DN的心跳信息,进入该方法:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

处理DN发送过来的心跳并作出相应;

继续进入handleHeartbeat方法:(DatanodeManager.java)

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

通过updateHeartbeat方法来更新心跳信息,进入该方法:(HeartbeatManager.java)

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

再次进入:(BlockManager.java)

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

继续进入:(DatanodeDescriptor.java)

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

进入updateHeartbeatState方法:

hadoop如何启动datanode,大数据,hadoop,hadoop,大数据,分布式

 文章来源地址https://www.toymoban.com/news/detail-732788.html

 

到了这里,关于Hadoop源码阅读(二):DataNode启动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • hadoop集群启动后datanode没有启动

    今天启动hadoop集群后,查看进程发现名称节点的NameNode进程启动了,但是数据节点的DataNode进程没有启动,如下: 这个问题是个常见问题,对于自学的初学者来说,真的是个很头大的问题,一时不知道该怎么弄,我就是其中一个。但遇到问题不要慌,认真看错并查找解决办法

    2023年04月27日
    浏览(30)
  • 启动 Hadoop 后没有 dataNode 进程

    原因:进行 hadoop 格式化的时候没有事先结束所有进程,或者多次进行了 format 导致的 datanode 的 clusterID 和 namenode 的 clusterID 不匹配,从而在启动后没有 datanode 进程。 解决办法1: 删除hadoop下的日志文件logs 重新格式化 解决办法2(成功率更高): 重新安装,或者恢复快照 重

    2024年02月05日
    浏览(37)
  • Hadoop的DataNode无法启动的解决方案

    Hadoop重启一次,里面的数据需要重新导入,发现无法导入数据,查看jps发现是DataNode没有启动,重新启动发现也无法启动,原因是前面重新启动NameNode,里面的文件格式化一次,DataNode的文件不一致,需要删除,现给出以下解决方案: 停止所有服务 查询datanode的文件路劲 3. 删

    2024年02月12日
    浏览(28)
  • Hadoop集群启动后命令JPS没有DataNode或者NameNode

    问题原因 1)需要检查core-site.xml 和 hdfs-site.xml这俩文件,配置没错的话再看第二条 2)可能已经执行格式化NameNode后,但是格式之前并没有停止之前的进程并删除相关数据。 解决方案(记得你的集群删除前需要停止, 每个副本都要进行一次下面操作 ) 1)删除dfs文件夹里的文

    2024年02月04日
    浏览(41)
  • 关于如何解决hadoop jps时没有datanode

    在输入jps命令后,可能会出现无法启动DataNode的情况,如图。 可能因为多次格式化NameNode会重新生成新的ClusterId(集群ID),而原来的DataNode内data文件下的VERSION文件内的ClusterId还是原来的ClusterId,所以就会出现与NameNode的ClusterId不匹配。 解决方法: 找到存放VERSION的路径 我的

    2024年02月07日
    浏览(71)
  • 【Hadoop】关于Hadoop集群HDFS启动问题:DataNode启动报错ERROR: Cannot set priority of namenode process

    出了问题第一步一定要先看日志!看日志!看日志! DataNode日志文件在Hadoop目录下的logs文件夹 以下列举两种问题的解决方法: 1.最常见的就是对NameNode进行了多次格式化操作,格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果

    2024年02月06日
    浏览(40)
  • 多次重新初始化hadoop namenode -format后,DataNode或NameNode没有启动

    多次重新初始化hadoop namenode -format后,DataNode或NameNode没有启动 在搭建完hadoop集群后,需要对主节点进行初始化(格式化) 其本质是清理和做一些准备工作,因为此时的HDFS在物理上还是存在的。 而且 主节点格式化操作只能进行一次。 当我们不小心多次初始化,会导致启动

    2024年02月05日
    浏览(34)
  • 【Hadoop】DataNode 详解

    🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁🍁🪁🍁🪁 🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步

    2024年02月11日
    浏览(30)
  • Hadoop理论及实践-HDFS的Namenode及Datanode(参考Hadoop官网)

            Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。有一下几个特点:         HDFS是一个高度容错性的系统,具有高容错、高可靠性、高扩展性的特点,适合部署在廉价的机器上。          HDFS能提供对应用程序数据

    2024年02月14日
    浏览(34)
  • 伪分布式搭建Hadoop中消失的“DataNode”

    我们在搭建hadoop中都会出现一些小小的问题,在伪分布式安装完Hadoop后,jps查看进程的时候缺三少两, 今天解决的问题是6个进程中缺少了DataNode。 开启进程后,jps查询: 缺少DataNode的原因通常是: 这个一般是因为namenode进行了多次的格式化bin/hdfs namenode -format,导致namenode的

    2024年04月28日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包