一个MapReuce作业的从开始到结束--第4章 DataNode节点启动分析

原创
2017/01/17 09:22
阅读数 9

    从bin/hadoop中可知,DataNode节点对应的类DataNode类,它的源代码文件是hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java

DataNode启动执行函数的次序:

[1]. 执行main函数,在main函数里,调用静态函数secureMain函数。

[2].secureMain函数里,调用startDataNode函数创建DataNode对象,DataNode节点进入运行状态,然后让DataNode执行join函数,等待线程终结。

[3].而在startDataNode函数,调用instantiateDataNode创建DataNode对象,然后,调用runDatanodeDaemon函数,让DataNode对象成为一个守护线程。

[4].函数runDatanodeDaemon是静态的,它很短,它让DataNode对象成为一个线程,代码如下:

dn.dataNodeThread = newThread(dn, dnThreadName);

dn.dataNodeThread.setDaemon(true);

dn.dataNodeThread.start();

这里,dn就是DataNode对象,它有一个线程变量dataNodeThread,根据第一行语句,让dn成为一个线程,并执行start()

[5].dataNode节点启动后,它始终运行在DataNode类的run函数,直到接收到终结命令。

[6].run函数里,运行一个无限循环,在循环里执行offerService函数。这种设计的优点在于,假设DataNode一旦因某种异常出错,仍然能够重新运行。

[7].offerService函数,运行一个无限循环,在循环中,DataNode节点向NameNode节点发送心跳,取回命令,执行诸如区块更新,检查等等任务。

[8].DataNode节点和NameNode节点之间的通信是通过RPC方式执行的。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部