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