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等)
简单地讲,这个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等)
相关文章推荐
- HDFS------hadoop fs -get命令的代码执行过程
- HDFS------hadoop fs -ls命令的执行过程
- HDFS------hadoop fs -ls命令的执行过程
- Hadoop详解(二)——HDFS的命令,执行过程,Java接口,原理详解。RPC机制
- Hadoop fs -put:上传文件至Hdfs总是失败
- hadoop2.5.2中执行 $ bin/hdfs dfs -put etc/hadoop input遇到put: `input': No such file or directory的解决办法
- Hadoop学习之Mapreduce执行过程详解
- JVM学习笔记(二)------Java代码编译和执行的整个过程【转】
- Hadoop Hdfs配置过程全程报道
- 反编译C程序为汇编代码,汇编代码执行过程的分析与思考
- hadoop笔记1-MR执行过程
- hadoop2 作业执行过程之yarn调度执行
- Hadoop 执行 hdfs namenode -format报错
- 从汇编语言层次追踪c代码的执行过程(return 的研究)
- hadoop执行时将输入文件复制到hdfs时的错误
- xxe漏洞检测及代码执行过程
- HDFS append原理与代码分析(Hadoop 2.0)
- Hadoop学习总结之二:HDFS读写过程解析
- hadoop2 作业执行过程之map过程
- Hadoop的基本使用(2)——通过代码操作HDFS