Hadoop系统操作类FileSystem

本文介绍如何使用Hadoop文件系统API获取HDFS和本地文件系统实例,以及如何利用FileStatus类获取文件的元数据信息。通过示例展示了如何在本地文件夹与HDFS文件夹之间进行文件复制。

FileSystem类,Hadoop文件API的起点,是一个一个与文件系统交互的抽象类,其对HDFS的操作由不同的具体实现子类来实现。

通过下面的方法来获取一个具体的FileSystem实例:
获取用于HDFS系统的实例:public static FileSystem get(Configuration conf) throws IOException
获取用于本地文件系统的实例:public static LocalFileSystem getLocal(Configuration conf) throws IOException
  
FileStatus类:可以获取元数据的信息,包括文件的长度,权限,修改时间等等
public class FileStatus
  
   extends 
   Object
  
  
   implements 
   Writable, 
   Comparable
  
Interface that represents the client side information for a file. 
例子:  
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class FileSystemDemo01 {
	public static void main(String[] args) throws IOException {
		Configuration conf = new Configuration();
		FileSystem hdfs = FileSystem.get(conf);/*操作HDFS文件系统的类*/
		
	//	FileSystem local = FileSystem.getLocal(conf);/*操作本地文件系统的类*/
		
		Path inputDir = new Path(args[0]);/*获取文件的路径*/
		/*FileStatue类*/
		FileStatus[] inputFiles = hdfs.listStatus(inputDir);/*得到文件路径目录下文件列表*/
		
		System.out.println(inputFiles.length);
		System.out.println(inputFiles[0].toString());
		System.out.println(inputFiles[0].getGroup());
		System.out.println(inputFiles[0].getModificationTime());
	}
}
/*输出结果:
1
org.apache.hadoop.fs.FileStatus@a82e7892
supergroup
1336053927670

 */


  
一个综合例子:把本地D:\test下的文件复制到HDFS文件/usr/test2下
 
 
  
import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;


public class PutMerge {
	public static void main(String[] args) throws IOException {
		Configuration conf = new Configuration();
		FileSystem hdfs = FileSystem.get(conf);
		FileSystem local = FileSystem.getLocal(conf);
		
		Path localDir = new Path(args[1]);
		Path hdfsDir = new Path(args[0]);
		
		FileStatus[] inputFile = local.listStatus(localDir);
		FSDataOutputStream out = hdfs.create(hdfsDir);
		
		for(int i=0;i<inputFile.length;i++){
			System.out.println(inputFile[i].getPath().getName());
			FSDataInputStream in = local.open(inputFile[i].getPath());
			byte[] buffer = new byte[255];
			int byteRead = 0;
			while((byteRead=in.read(buffer))>0){
				out.write(buffer,0,byteRead);
			}
			out.close();
		}
	}
}
/*输出结果
 12/05/04 13:37:24 WARN conf.Configuration: DEPRECATED: hadoop-site.xml found in the classpath. Usage of hadoop-site.xml is deprecated. Instead use core-site.xml, mapred-site.xml and hdfs-site.xml to override properties of core-default.xml, mapred-default.xml and hdfs-default.xml respectively
4d aa.txt
aa.txt
bbaa.txt
ccaa.txt
 
*/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值