您的位置:首页 > 编程语言

HDFS------hadoop fs -put 代码执行过程

2011-09-09 14:58 176 查看
FsShell.main()--->ToolRunner.run()--->FsShell.run()--->copyFromLocal()


简单地讲,这个put写过程分为两个阶段,一个阶段是通过调用DFSClient的create方法创建输出流,并开启后台线程DataStream循环将package数据发送给相应的datanode;

另一个阶段是把数据写入buffer。

第一个阶段序列图:



第二个阶段(其实是并发的)如下图所示:



下面就先分析第一阶段,也就是DataStreamer这个后台线程。DataStreamer启动后,就进入一个循环,它的主要工作如下所示:

1.处理io错误;

2.在dataQueue上等待直到队列上有数据。然后从队列上获取一个package,并判断datanode的连接是否打开(createBlockOutputStream),如果没有打开,那么开启ResponseProcessor线程;

3.将package从dataQueue移动到ackQueue,并通过blockStream将数据写到datanode(如果是最后一个package,那么将写入一个int 0);

4.写过程结束,做一些必要的清理工作(关闭blockStream,关闭ResponseProcessor等)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  工作 buffer io