无情 @ 2019-09-12 17:05:45 阅读(278)
HDFS hadoop


一:通过命令找入口


hadoop  hdfs  -ls /


hdfs  dfs  -ls  /


hadoop脚本源码

 技术巅峰 > HDFS命令源码详解 > 1.png


hdfs脚本源码

技术巅峰 > HDFS命令源码详解 > 2.png 


通过上图能发现hdfs命令下每种参数对应了一个java类


据说网上资料说:原来从0.21.0版本以后,hadoop 命令换成了hdfs命令



二:入口


org.apache.hadoop.fs.FsShell


 技术巅峰 > HDFS命令源码详解 > 3.png



入口很简单,看不出什么来,我们直接看润方法


三:详细分析



 技术巅峰 > HDFS命令源码详解 > 4.png


1:初始化 fsshell


init() 主要是初始化classmap,将对应的命令和实例对象最一个映射,每个命令后面对应了一个类

 技术巅峰 > HDFS命令源码详解 > 5.png



2:得到对应命令的对象实例 如 org.apache.hadoop.fs.shell.Ls


通过instance = commandFactory.getInstance(cmd)  实例化一个Command对象


继承关系 

 技术巅峰 > HDFS命令源码详解 > 6.png

Command --> FsCommand-->对应的命令类




3:执行对应实例 如org.apache.hadoop.fs.shell.Ls


执行run方法,里面包含


processOptions(args); //参数操作

processRawArguments(args);


每一个命令类都包含一个这两个方法,

 技术巅峰 > HDFS命令源码详解 > 7.png


  

看其中的org.apache.hadoop.fs.shell.Ls


技术巅峰 > HDFS命令源码详解 > 12.png

技术巅峰 > HDFS命令源码详解 > 11.png

打印结果

技术巅峰 > HDFS命令源码详解 > 8.png 



四:总结


技术巅峰 > HDFS命令源码详解 > 9.png