第一次读比较大型的源码。有看到列一大幅类图的,一看头就大。有看到简要分析主要数据结构的,因为源码这么多,总不能事无具细地全讲一遍吧。但少了程序运行的脉络,总让人疑惑系统到底怎么运转起来的。我想,对于初学者,还是从程序运行的线索入手,按功能弄清每个模块的代码,然后连点成线,成面,最终从宏观再整理清整个系统架构,这样还能顺便学习一下大型系统的实现。当然,对于架构大牛,或者java大牛,可能就不需要这么细的去看,毕竟其中起粘合剂的部分对于大多数系统来说都是相似的。看一下宏观的架构分析就行了。
适合的读者?
当然是初学者。我自己本身也只是java菜鸟,对面向对象还是有一点点体会的。毕竟hadoop是用java写的,至少也要有一点java基础什么的才能看得懂吧,虽然要求也不高。
分析过程也只能抓重点,不可能每一行代码都去深究。版本是hadoop 0.20.203 。好吧,我们从命令
hadoop fs -copyFromLocal xx xx
开始。hadoop支持多种文件系统,当然,这里我们关心的是hdfs。先上图,后面讲完再解释。

hdfs 的shell命令是由类FsShell去执行的。
public static void main(String argv[]) throws Exception {
FsShell shell = new FsShell();
int res;
try {
res = ToolRunner.run(shell, argv);
} finally {
shell.close();
}
System.exit(res);
}

本文适合Hadoop初学者,通过分析Hadoop 0.20.203版本的源码,理解`hdfs dfs -copyFromLocal`命令的执行流程。从FsShell开始,涉及FileUtil、FileSystem、DistributedFileSystem、DFSOutputStream、DataStreamer等关键类,揭示了HDFS如何协调NameNode、DataNode进行文件复制。FSDataOutputStream的writeChunk过程是核心,梳理了HDFS内部数据流经的路径。
fs -copyFromLocal&spm=1001.2101.3001.5002&articleId=7369060&d=1&t=3&u=e7c2ba3eda62499ea652688b68f88088)
1万+

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



