Hadoop基础-HDFS递归列出文件系统-FileStatus与listFiles两种方法
Hadoop基础-HDFS递归列出文件系统-FileStatus与listFiles两种方法
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
fs.listFiles方法,返回LocatedFileStatus的迭代器,自带递归。但是它是继承于FileStatus的,而且构建函数是FileStatus的文件版,即LocaledFileStatus只能列出文件。接下来我我们一起看看这两个方法的用法。
一.listStatus方法
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.day01.note1; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils; import java.io.FileOutputStream;
import java.io.IOException; public class HdfsDemo2 {
public static void main(String[] args) throws IOException {
list();
System.out.println("====== 我是分割线 ========");
tree("/shell");
} //查看指定路径的树形结构,类似于Linux的tree命令。
private static void tree(String srcPath) throws IOException {
//由于我的Hadoop完全分布式根目录对yinzhengjie以外的用户(尽管是root用户也没有写入权限哟!因为是hdfs系统,并非Linux系统!)没有写入
// 权限,所以需要手动指定当前用户权限。使用“HADOOP_USER_NAME”属性就可以轻松搞定!
System.setProperty("HADOOP_USER_NAME","yinzhengjie");
//实例化一个Configuration,它会自动去加载本地的core-site.xml配置文件的fs.defaultFS属性。(该文件放在项目的resources目录即可。)
Configuration conf = new Configuration();
//代码的入口点,初始化HDFS文件系统,此时我们需要把读取到的fs.defaultFS属性传给fs对象。
FileSystem fs = FileSystem.get(conf);
//这个path是指是需要在文件系统中写入的数据,里面的字符串可以写出“hdfs://s101:8020/shell”,但由于core-site.xml配置
// 文件中已经有“hdfs://s101:8020”字样的前缀,因此我们这里可以直接写相对路径即可
Path path = new Path(srcPath);
//通过fs的listStatus方法获取一个指定path的所有文件信息(status),因此我们需要传入一个hdfs的路径,返回的是一个filStatus数组
FileStatus[] fileStatuses = fs.listStatus(path);
for (FileStatus fileStatus : fileStatuses) {
//判断当前迭代对象是否是目录
if (fileStatus.isDirectory()){
String dirPath = fileStatus.getPath().toString();
System.out.println("文件夹名:" + fileStatus.getPath());
tree(dirPath);
}else {
System.out.println("文件名:" + fileStatus.getPath());
}
} } //查看指定路径下的所有文件
private static void list() throws IOException {
//由于我的Hadoop完全分布式根目录对yinzhengjie以外的用户(尽管是root用户也没有写入权限哟!因为是hdfs系统,并非Linux系统!)没有写入
// 权限,所以需要手动指定当前用户权限。使用“HADOOP_USER_NAME”属性就可以轻松搞定!
System.setProperty("HADOOP_USER_NAME","yinzhengjie");
//实例化一个Configuration,它会自动去加载本地的core-site.xml配置文件的fs.defaultFS属性。(该文件放在项目的resources目录即可。)
Configuration conf = new Configuration();
//代码的入口点,初始化HDFS文件系统,此时我们需要把读取到的fs.defaultFS属性传给fs对象。
FileSystem fs = FileSystem.get(conf);
//这个path是指是需要在文件系统中写入的数据,里面的字符串可以写出“hdfs://s101:8020/shell”,但由于core-site.xml配置
// 文件中已经有“hdfs://s101:8020”字样的前缀,因此我们这里可以直接写相对路径即可
Path path = new Path("/shell");
//通过fs的listStatus方法获取一个指定path的所有文件信息(status),因此我们需要传入一个hdfs的路径,返回的是一个filStatus数组
FileStatus[] fileStatuses = fs.listStatus(path);
for (FileStatus fileStatus : fileStatuses) {
//判断当前迭代对象是否是目录
boolean isDir = fileStatus.isDirectory();
//获取当前文件的绝对路径
String fullPath = fileStatus.getPath().toString();
System.out.println("isDir:" + isDir + ",Path:" + fullPath);
}
}
} /*
以上代码执行结果如下:
isDir:true,Path:hdfs://s101:8020/shell/awk
isDir:true,Path:hdfs://s101:8020/shell/grep
isDir:true,Path:hdfs://s101:8020/shell/sed
isDir:false,Path:hdfs://s101:8020/shell/yinzhengjie.sh
====== 我是分割线 ========
文件夹名:hdfs://s101:8020/shell/awk
文件名:hdfs://s101:8020/shell/awk/keepalive.sh
文件名:hdfs://s101:8020/shell/awk/nginx.conf
文件夹名:hdfs://s101:8020/shell/grep
文件名:hdfs://s101:8020/shell/grep/1.txt
文件名:hdfs://s101:8020/shell/grep/2.txt
文件夹名:hdfs://s101:8020/shell/sed
文件名:hdfs://s101:8020/shell/sed/nagios.sh
文件名:hdfs://s101:8020/shell/sed/zabbix.sql
文件名:hdfs://s101:8020/shell/yinzhengjie.sh
*/
二.listFiles方法
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.day01.note1; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils; import java.io.FileOutputStream;
import java.io.IOException; public class HdfsDemo3 {
public static void main(String[] args) throws IOException {
autoList("/shell");
} //定义方法下载文件到本地
private static void autoList(String path) throws IOException {
//实例化一个Configuration,它会自动去加载本地的core-site.xml配置文件的fs.defaultFS属性。(该文件放在项目的resources目录即可。)
Configuration conf = new Configuration();
//代码的入口点,初始化HDFS文件系统,此时我们需要把读取到的fs.defaultFS属性传给fs对象。
FileSystem fs = FileSystem.get(conf);
//通过fs的listFiles方法可以自动实现递归(自带递归)列出文件类型,返回的是一个远程可迭代对象,需要传入两个参数,第一个参数是服务器路径,第二个参数是否递归
RemoteIterator<LocatedFileStatus> iterator = fs.listFiles(new Path(path), true);
while (iterator.hasNext()){
LocatedFileStatus fileStatus = iterator.next();
Path fullPath = fileStatus.getPath();
System.out.println(fullPath);
}
}
} /*
以上代码执行结果如下:
hdfs://s101:8020/shell/awk/keepalive.sh
hdfs://s101:8020/shell/awk/nginx.conf
hdfs://s101:8020/shell/grep/1.txt
hdfs://s101:8020/shell/grep/2.txt
hdfs://s101:8020/shell/sed/nagios.sh
hdfs://s101:8020/shell/sed/zabbix.sql
hdfs://s101:8020/shell/yinzhengjie.sh
*/
Hadoop基础-HDFS递归列出文件系统-FileStatus与listFiles两种方法的更多相关文章
- pytorch基础(4)-----搭建模型网络的两种方法
方法一:采用torch.nn.Module模块 import torch import torch.nn.functional as F #法1 class Net(torch.nn.Module): ...
- Hadoop基础-HDFS分布式文件系统的存储
Hadoop基础-HDFS分布式文件系统的存储 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS数据块 1>.磁盘中的数据块 每个磁盘都有默认的数据块大小,这个磁盘 ...
- Hadoop基础-HDFS的API常见操作
Hadoop基础-HDFS的API常见操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习HDFS时的一些琐碎的学习笔记, 方便自己以后查看.在调用API ...
- Hadoop基础-HDFS集群中大数据开发常用的命令总结
Hadoop基础-HDFS集群中大数据开发常用的命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本盘博客仅仅列出了我们在实际生成环境中常用的hdfs命令,如果想要了解更多, ...
- Hadoop基础-Hdfs各个组件的运行原理介绍
Hadoop基础-Hdfs各个组件的运行原理介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.NameNode工作原理(默认端口号:50070) 1>.什么是NameN ...
- Hadoop基础-HDFS的读取与写入过程剖析
Hadoop基础-HDFS的读取与写入过程剖析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客会简要介绍hadoop的写入过程,并不会设计到源码,我会用图和文字来描述hdf ...
- Hadoop基础-HDFS的API实现增删改查
Hadoop基础-HDFS的API实现增删改查 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客开发IDE使用的是Idea,如果没有安装Idea软件的可以去下载安装,如何安装 ...
- Hadoop基础-HDFS安全管家之Kerberos实战篇
Hadoop基础-HDFS安全管家之Kerberos实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道hadoop有很多不同的发行版,比如:Apache Hadoop ...
- Hadoop基础-HDFS的读取与写入过程
Hadoop基础-HDFS的读取与写入过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 为了了解客户端及与之交互的HDFS,NameNode和DataNode之间的数据流是什么样 ...
随机推荐
- learning of a previous team
作为一个软件工程团队,离不开下面三个要素:支持,即分享.责任和合作. 分享是出色技术团队的另一个关键要素,它是团队的基石之一.只有通过分享,团队才有可能实现1+1 > 2这种效应,分享也是让团 ...
- 团队项目-北航MOOC系统Android客户端 NABC
北航MOOC系统Android客户端 NABC (N) Need 需求 MOOC的全名是Massive Open Online Course,被称作大型开放式网络课程.2012年,美国的顶尖大学陆续设 ...
- bubble_sort(归并排序)
★实验任务 给定一个 1~N 的排列 P,即 1 到 N 中的每个数在 P 都只出现一次. 现在要 对排列 P 进行冒泡排序,代码如下: for (int i = 1; i <= N; ++i) ...
- C语言中以十六进制输出字符型变量会出现'ffffff"的问题
最近在做一个C的嵌入式项目,发现在C语言中用printf()函数打印字符型变量时,如果想采用"%x"的格式将字符型变量值以十六进制形式打印出来,会出现一个小问题,如下: char ...
- Enterprise Library 5.0 参考源码索引
http://www.projky.com/entlib/5.0/Microsoft/Practices/EnterpriseLibrary/Caching/BackgroundScheduler.c ...
- vue.js 中slot 用处大(转载)
什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有 ...
- 『编程题全队』Alpha 阶段冲刺博客Day4
1.每日站立式会议 1.会议照片 2.昨天已完成的工作统计 孙志威: 1.添加团队界面下的看板容器SlotWidget 2.实现SlotWidgets的动态布局管理 3.实现团队/个人界面之间的切换 ...
- python3.6执行AES加密及解密方法
python版本:3.6.2 首先安装pycryptodome cmd执行命令:pip install pycryptodome 特别简单,代码如下: #!/usr/bin/python # -*- ...
- Linux环境下安装配置Mysql
首先我们的使用的是linux的 centOS6 版本 安装mysql: 1.查看有没有安装包 yum list mysql* 2.进行安装mysql:一般我们在服务器端安装的都是服务端( mysql- ...
- elasticsearch6 学习之并发控制
环境:elasticsearch6.1.2 kibana6.1.2 并发问题无处不在 一.基于_version 的并发控制 在提交数据前先检查提交数据的version与es中存储的ve ...