HDFS編程主要APIjava
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 的流式訪問apache
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"); } }