在介绍DataXceiverServer线程之前首先介绍一下,DN启动后一直执行的线程(也就是服务线程)哪些。首选DN本身就是一个线程类,该线程必然会一直执行。在DN的run方法中
1432 // start dataXceiveServer
1433 dataXceiverServer.start();
1434 ipcServer.start();
可以看出会启动一个DataXceiverServer类型的线程,这个线程的主要作用是什么呢,这就是本篇博客要讲述的重点。另外我们还可以看到ipcServer的线程,这个就是前边博客中介绍的RPC机制中的Server线程,负责处理RPC请求,这些请求来在DN之间,貌似在进行recovery的时候使用,具体没有搞清楚。
下边开始DataXceiverServer线程类的主要功能,
43 class DataXceiverServer implements Runnable, FSConstants {
46 ServerSocket ss;
47 DataNode datanode;
看以看出DataXceiverServer也是一个线程类,其中两个比较重要的成员变量是一个ServerSocket对象和DataNode对象本身,其中ServerSocket就是DN负责接收socket连接的对象。我们来看一下这个类最核心的部分,也就是run方法
128 public void run() {
129 while (datanode.shouldRun) {
130 try {
131 Socket s = ss.accept();
132 s.setTcpNoDelay(true);
133 new Daemon(datanode.threadG

本文深入解析HDFS1.0中DataNode的DataXceiverServer线程,它作为接收任务和分配任务的角色,控制socket连接数。DataXceiver则负责实际的数据传输工作,包括writeBlock函数处理写入请求,建立数据流水线,以及getBlockChecksum返回块的校验信息。此外,copyBlock功能用于节点间的数据复制。
最低0.47元/天 解锁文章
7694

被折叠的 条评论
为什么被折叠?



