Java 封裝 HDFS API 操作
阿新 • • 發佈:2019-02-15
package user_thing_tuijian; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; public class hdfsGYT { private static final String HDFS = "hdfs://127.0.0.1:9000/"; public hdfsGYT(String hdfs, Configuration conf ){ this.hdfsPath = hdfs; this.conf = conf; } public hdfsGYT() { // TODO Auto-generated constructor stub } private String hdfsPath; private Configuration conf = new Configuration() ; public static void main(String[] args) throws IOException, URISyntaxException{ hdfsGYT hdfsgyt = new hdfsGYT(); String folder = HDFS + "mr/groom_system/small2.csv"; String local = "/home/thinkgamer/Java/hadoop_shizhan/src/user_thing_tuijian/small2.csv"; String local1 = "/home/thinkgamer/Java/hadoop_shizhan/src/user_thing_tuijian"; //判斷某個資料夾是否存在 //hdfsgyt.isExist(folder); //建立資料夾 //hdfsgyt.mkdir(folder); //刪除資料夾 //hdfsgyt.rmr(folder); //列出所有資料夾 //hdfsgyt.ls(folder); //遞迴列出所有資料夾 //hdfsgyt.lsr(folder); //上傳檔案 //hdfsgyt.put(local, folder); //下載檔案 //hdfsgyt.get(folder,local1); //刪除檔案 //hdfsgyt.rm(folder); //顯示檔案 //hdfsgyt.cat(folder); } //顯示檔案 private void cat(String folder) throws IOException, URISyntaxException { // 與hdfs建立聯絡 FileSystem fs = FileSystem.get(new URI(HDFS),new Configuration()); Path path = new Path(folder); FSDataInputStream fsdis = null; System.out.println("cat: " + folder); try { fsdis =fs.open(path); IOUtils.copyBytes(fsdis, System.out, 4096, false); } finally { IOUtils.closeStream(fsdis); fs.close(); } } //刪除檔案 private void rm(String folder) throws IOException, URISyntaxException { //與hdfs建立聯絡 FileSystem fs = FileSystem.get(new URI(HDFS),new Configuration()); Path path = new Path(folder); if(fs.deleteOnExit(path)){ fs.delete(path); System.out.println("delete:" + folder); }else{ System.out.println("The fiel is not exist!"); } fs.close(); } //下載檔案 private void get(String remote, String local) throws IllegalArgumentException, IOException, URISyntaxException { // 建立聯絡 FileSystem fs = FileSystem.get(new URI(HDFS), new Configuration()); fs.copyToLocalFile(new Path(remote), new Path(local)); System.out.println("Get From : " + remote + " To :" + local); fs.close(); } //上傳檔案 private void put(String local, String remote) throws IOException, URISyntaxException { // 建立聯絡 FileSystem fs = FileSystem.get(new URI(HDFS), new Configuration()); fs.copyFromLocalFile(new Path(local), new Path(remote)); System.out.println("Put :" + local + " To : " + remote); fs.close(); } //遞迴列出所有資料夾 private void lsr(String folder) throws IOException, URISyntaxException { //與hdfs建立聯絡 FileSystem fs = FileSystem.get(new URI(HDFS),new Configuration()); Path path = new Path(folder); //得到該目錄下的所有檔案 FileStatus[] fileList = fs.listStatus(path); for (FileStatus f : fileList) { System.out.printf("name: %s | folder: %s | size: %d\n", f.getPath(), f.isDir() , f.getLen()); try{ FileStatus[] fileListR = fs.listStatus(f.getPath()); for(FileStatus fr:fileListR){ System.out.printf("name: %s | folder: %s | size: %d\n", fr.getPath(), fr.isDir() , fr.getLen()); } }finally{ continue; } } fs.close(); } //列出所有資料夾 private void ls(String folder) throws IOException, URISyntaxException { //與hdfs建立聯絡 FileSystem fs = FileSystem.get(new URI(HDFS),new Configuration()); Path path = new Path(folder); //得到該目錄下的所有檔案 FileStatus[] fileList = fs.listStatus(path); for (FileStatus f : fileList) { System.out.printf("name: %s | folder: %s | size: %d\n", f.getPath(), f.isDir() , f.getLen()); } fs.close(); } //刪除資料夾 private void rmr(String folder) throws IOException, URISyntaxException { //與hdfs建立聯絡 FileSystem fs = FileSystem.get(new URI(HDFS),new Configuration()); Path path = new Path(folder); fs.delete(path); System.out.println("delete:" + folder); fs.close(); } //建立資料夾 public void mkdir(String folder) throws IOException, URISyntaxException { //與hdfs建立聯絡 FileSystem fs = FileSystem.get(new URI(HDFS),new Configuration()); Path path = new Path(folder); if (!fs.exists(path)) { fs.mkdirs(path); System.out.println("Create: " + folder); }else{ System.out.println("it is have exist:" + folder); } fs.close(); } //判斷某個資料夾是否存在 private void isExist(String folder) throws IOException, URISyntaxException { //與hdfs建立聯絡 FileSystem fs = FileSystem.get(new URI(HDFS),new Configuration()); Path path = new Path(folder); if(fs.exists(path)){ System.out.println("it is have exist:" + folder); }else{ System.out.println("it is not exist:" + folder); } fs.close(); } }