HDFS------hadoop fs -ls命令的执行过程
来源:互联网 发布:西南证券炒股软件 编辑:程序博客网 时间:2024/05/23 21:15
当我们在命令行打如下命令:hadoop fs -ls .
我们知道将显示出文件系统中的根目录下的文件,那究竟在代码里如何执行的呢,今天就一看究竟。
当我们按下这条命令,首先找到bin目录下的hadoop脚本,其中有一行脚本:
elif [ "$COMMAND" = "fs" ] ; thenCLASS=org.apache.hadoop.fs.FsShell
HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"
可以看到执行的是FsShell这个类的main方法:
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);
}
res = ToolRunner.run(shell, argv);这个方法会调用FsShell的run方法:
FsShell的run方法很长,我这里只截取根fs这个参数有关的代码:
else if ("-ls".equals(cmd)) {
if (i < argv.length) {
exitCode = doall(cmd, argv, i);
} else {
exitCode = ls(Path.CUR_DIR, false);
}
}
也就是调用ls方法:
private int ls(String srcf, boolean recursive) throws IOException {
Path srcPath = new Path(srcf);
FileSystem srcFs = srcPath.getFileSystem(this.getConf());
FileStatus[] srcs = srcFs.globStatus(srcPath);
if (srcs==null || srcs.length==0) {
throw new FileNotFoundException("Cannot access " + srcf +
": No such file or directory.");
}
boolean printHeader = (srcs.length == 1) ? true: false;
int numOfErrors = 0;
for(int i=0; i<srcs.length; i++) {
numOfErrors += ls(srcs[i], srcFs, recursive, printHeader);
}
return numOfErrors == 0 ? 0 : -1;
}
其中会调用 ls(srcs[i], srcFs, recursive, printHeader);
private int ls(FileStatus src, FileSystem srcFs, boolean recursive,
boolean printHeader) throws IOException {
final String cmd = recursive? "lsr": "ls";
final FileStatus[] items = shellListStatus(cmd, srcFs, src);
if (items == null) {
return 1;
} else {
int numOfErrors = 0;
if (!recursive && printHeader) {
if (items.length != 0) {
System.out.println("Found " + items.length + " items");
}
}
int maxReplication = 3, maxLen = 10, maxOwner = 0,maxGroup = 0;
for(int i = 0; i < items.length; i++) {
FileStatus stat = items[i];
int replication = String.valueOf(stat.getReplication()).length();
int len = String.valueOf(stat.getLen()).length();
int owner = String.valueOf(stat.getOwner()).length();
int group = String.valueOf(stat.getGroup()).length();
if (replication > maxReplication) maxReplication = replication;
if (len > maxLen) maxLen = len;
if (owner > maxOwner) maxOwner = owner;
if (group > maxGroup) maxGroup = group;
}
for (int i = 0; i < items.length; i++) {
FileStatus stat = items[i];
Path cur = stat.getPath();
String mdate = dateForm.format(new Date(stat.getModificationTime()));
System.out.print((stat.isDir() ? "d" : "-") +
stat.getPermission() + " ");
System.out.printf("%"+ maxReplication +
"s ", (!stat.isDir() ? stat.getReplication() : "-"));
if (maxOwner > 0)
System.out.printf("%-"+ maxOwner + "s ", stat.getOwner());
if (maxGroup > 0)
System.out.printf("%-"+ maxGroup + "s ", stat.getGroup());
System.out.printf("%"+ maxLen + "d ", stat.getLen());
System.out.print(mdate + " ");
System.out.println(cur.toUri().getPath());
if (recursive && stat.isDir()) {
numOfErrors += ls(stat,srcFs, recursive, printHeader);
}
}
return numOfErrors;
}
}
很简单,就是将目录下的文件的信息打印出来,如果recursive为true的话,递归地打印出这个子孙文件
- HDFS------hadoop fs -ls命令的执行过程
- HDFS------hadoop fs -ls命令的执行过程
- HDFS------hadoop fs -get命令的代码执行过程
- HDFS------hadoop fs -put 代码执行过程
- Hadoop源码学习-脚本命令(hadoop fs -ls)执行细节
- hadoop之 HDFS fs 命令总结
- Hadoop:hadoop fs、hadoop dfs与hdfs dfs命令的区别
- Hadoop:hadoop fs、hadoop dfs与hdfs dfs命令的区别
- Hadoop:hadoop fs、hadoop dfs与hdfs dfs命令的区别
- 运行hadoop fs -ls 命令显示本地目录问题
- Hadoop详解(二)——HDFS的命令,执行过程,Java接口,原理详解。RPC机制
- 何时使用hadoop fs、hadoop dfs与hdfs dfs命令
- hadoop fs、hadoop dfs与hdfs dfs命令
- 何时使用hadoop fs、hadoop dfs与hdfs dfs命令
- hadoop学习笔记之<hadoop fs和hdfs dfs命令>
- 何时使用hadoop fs、hadoop dfs与hdfs dfs命令
- 何时使用hadoop fs、hadoop dfs与hdfs dfs命令
- 何时使用hadoop fs、hadoop dfs与hdfs dfs命令
- windows下安装Object-C开发环境【makefile】方式
- 基于linux的文件传输器实现详解----服务器端实现详解
- 20110907C语言深度剖析笔记
- 经典C++库
- Windows上使用Objective-c和Cocoa
- HDFS------hadoop fs -ls命令的执行过程
- 理清一下Bootloader NORFLASH NANDFlash EBOOT NBOOT UBOOT SDRAM NK.bin NK.nb0的关系
- 研究了有一个月android下手机录制视频做直播,真的挺难搞的!
- error C2061: syntax error : identifier '__RPC__out_xcount_part'
- 数据类型转换
- 图像处理之透视图校正
- 行为型模式(2)
- PSIA与ONVIF:如何评估两种视频监控标准
- 添加成功关闭层