2021SC@SDUSC
Hadoop源码分析(四)——DFSClient HDFS客户端(2)
上篇博客分析了DFSClient内部类,本篇,我们来分析DFSOutputStream中的成员变量和成员方法。
DFSClient HDFSk客户端源码1
3.成员变量
private Socket s;
//与目标DataNode所建立起来的Socket连接。
boolean closed = false;
//该输出流是否关闭的标识。
private String src;
//在DataNode上创建的用于保存DFSOutputStream中的数据的文件的路径字符串。
private DataOutputStream blockstream;
//用于将数据写入到DataNode的socket输出流。
private DatalnputStream blockReplyStream;
//用于接收从DataNode返回的确认信息的socket输入流。
private Block block;
//当前正在被写入的数据块对象。
final private long blocksize;
//数据块的大小。
private DataChecksum checksum;
//数据的校验和。
private LinkedList<Packet> dataQueue = new LinkedList<Packet>();
//数据队列,用于保存等待发送给DataNode的数据包Packet。
private LinkedList<Packet> ackQueue = new LinkedList<Packet>();
//确认队列,用于保存还没有被DataNode确认接收的数据包Packeto
private Packet currentpacket = null;
//当前正在被写入的数据包。
private int maxPackets = 80;
//dataQueue和ackQueue队列中一共允许存在的数据包Packet的最多个数。
private DataStreamer streamer = new DataStreamer();
//streamer线程,该线程不停地从dataQueue中取出数据包,然后发送给DataNode管道中的第一个DataNode。
private ResponseProcessor response = null;
//response线程,该线程用于接收从DataNode返回的反馈信息。
private long currentSeqno = 0;
//当前正在被DataStreamer发送的Packet在整个数据Block中的序列号。
private long lastQueuedSeqno = -1;
//dataQueue队列中最后一个Packet的序列号。
private long lastAckedSeqno = -1;
//ackQueue队列中最后一个Packet的序列号。
private long bytesCurBlock - 0;
//写入到当前Block中的字节数。
private int packetsize = 0;
//被发送的Packet的大小,其中头信息的大小也包含在内。
private int chunksPerPacket = 0;
//每个Packet中chunk的数量。
private Datanodelnfo[] nodes = null;
//保存当前正在被写入的Block的DadaNode集合。
private ArrayList<DatanodeInfo> excludedNodes = new ArrayList<DatanodeInfo>();
//用于保存返回错误的响应信息的DataNode的集合。
private boolean persistBlocks = false