hdfs的操作,主用是获取文件系统、文件的上传下载、文件夹的创建删除、名称变更及信息查看。操作hdfs用到的class对象主用有 :
Configuration: 配置文件对象,操作hdfs的桥梁
FileSystem : 文件系统对象,操作hdfs的载体
获取文件信息 fSystem.toString()
public void getFileSystem() throws Exception {
//创建配置信息对象
Configuration configuration = new Configuration();
//获取文件系统
FileSystem fSystem = FileSystem.get(new URI("hdfs://192.168.31.100:9000"), configuration, "yibin");
System.out.println(fSystem.toString());
fSystem.close();
}
文件上传.copyFromLocalFile()方法
public void putFileToHDFS() throws Exception { //获取配置信息 Configuration configuration = new Configuration(); //获取文件信息 FileSystem fs = FileSystem.get(new URI("hdfs://192.168.31.100:9000"), configuration, "yibin"); //执行上传命令 fs.copyFromLocalFile(new Path("C:/Users/Administrator/Desktop/统计学.txt"), new Path("/yibin")); //关闭资源 fs.close(); }
文件下载.copyToLocalFile()方法
public void putFileToHDFS() throws Exception { //如果有在eclipse里配置core-site.xml信息,在代码里就可以不用配置hdfs地址和用户名,配置信息优先级: //代码 > core-site.xml配置, 优先采用代码配置,代码没有配置时采用core文件 Configuration configuration = new Configuration(); FileSystem fs = FileSystem.get(configuration); fs.copyToLocalFile(new Path("/yibin/统计学.txt"), new Path("C:\Users\Administrator\Desktop\ab")); fs.close(); }
创建路径.mkdirs()
... Configuration configuration = new Configuration(); FileSystem fs = FileSystem.get(configuration); fs.mkdirs(new Path("/test/abc")) ... fs的mkdir支持多级目录
删除文件.delete()
... fs.delete(new Path("/test/abc"),True) ...
文件改名.rename()
... fs.rename(new Path("/test/abc"),new Path( "/test/def" )) ...
查看文件详情
public static void main(String[] args) throws Exception {
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(configuration);
//深度遍历,列出文件
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
while (listFiles.hasNext()) {
LocatedFileStatus status = listFiles.next();
//打印文件名
System.out.println(status.getPath().getName());
//打印文件块大小
System.out.println(status.getBlockSize());
//打印文件内容长度
System.out.println(status.getLen());
//打印文件在hdfs中存储的信息
System.out.println(status.toString());
//文件块的具体信息
BlockLocation[] blockLocations = status.getBlockLocations();
for (BlockLocation block:blockLocations) {
System.out.println(block.getOffset());
System.out.println(block.toString());
}
fs.close();
}

获取文件夹信息
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(configuration);
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for(FileStatus status:listStatus) {
if(status.isFile()) {
System.out.println("文件---"+status.getPath().getName());
}else {
System.out.println("文件夹+++"+status.getPath().getName());
}
}