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");

    }

    

}

你可能感兴趣的:(hdfs)