HDFS编程

HDFS编程主要API

Hadoop类 功能
org.apache.hadoop.fs.FileSystem 一个通用文件系统的抽象基类,可以被分布式文件系统继承。所有的可能使用Hadoop文件系统的代码都要使用到这个类。
org.apache.hadoop.fs.FileStatus 客户端可见的文件状态信息。
org.apache.hadoop.fs.FSDataInputStream 文件输入流,用于读取Hadoop文件。
org.apache.hadoop.fs.FSDataOutputStream 文件输出流,用于写Hadoop文件。
org.apache.hadoop.fs.permission.FsPermission 文件或者目录的权限
org.apache.hadoop.conf.Configuration 访问配置项。所有的配置项的值,如果没有专门配置,以core-default.xml为准;否则,以core-site.xml中的配置为准。

 

 

 

 

 

 

 

 

 

 

对于Hadoop文件系统中的文件的访问是基于 InputStream 和 OutputStream 的流式访问

import java.io.IOException;
import java.net.URI;

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 Operation {

    private static Configuration conf = new Configuration();
    
    public static void putMerge(String inputDir, String hdfsFile) throws IOException{
        FileSystem hdfs = FileSystem.get(conf);
        FileSystem local = FileSystem.getLocal(conf);
        Path inputPath = new Path(inputDir);
        Path hdfsPath = new Path(hdfsFile);
        FileStatus[] inputFiles = local.listStatus(inputPath);
        FSDataOutputStream out = hdfs.create(hdfsPath);
        System.out.println("inputFiles length -> " + inputFiles.length);
        for(FileStatus inputFile:inputFiles){
            System.out.println(inputFile.getPath().getName());
            FSDataInputStream in = local.open(inputFile.getPath());
            byte[] buffer = new byte[256];
            int read = -1;
            while((read = in.read(buffer))>0){
                out.write(buffer,0,read);
            }
            in.close();
        }
    }

    
    public static void list(String hdfs) throws IOException{
        FileSystem fs = FileSystem.get(URI.create(hdfs), conf);
        FileStatus fileList[] = fs.listStatus(new Path(hdfs));
        int FileNum = fileList.length;
        for(int fileCount = 0; fileCount < FileNum; fileCount++){
            System.out.println(fileList[fileCount].getPath().getName() + " : " + fileList[fileCount].getLen());
        }
    }
    
    public static void delete(String hdfs) throws IOException{
        FileSystem fs = FileSystem.get(URI.create(hdfs), conf);
        fs.deleteOnExit(new Path(hdfs));
    }
    
    public static void main(String[] args) throws IOException {
        putMerge("/root/test", "hdfs://localhost:9000/user/root/test");
        list("hdfs://localhost:9000/user/root");
        delete( "hdfs://localhost:9000/user/root/test");
    }
    
}
posted @ 2013-10-29 16:01  Kyle_Java  阅读(1860)  评论(0编辑  收藏  举报