hdfs api 实战

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37786447/article/details/79522703
直接上代码:
package com.linewell.hdfs;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;

import org.apache.commons.lang.StringUtils;
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;
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;


public class hdfsTest {
	 private static String HDFSUri = "hdfs://192.168.72.129:9000";
	public static void main(String[] args) {
		//mkdir("/local/user");  //在hdfs上创建目录
		//System.out.println(existDir("/la", false)); //判断hdfs上是否存在该目录或文件并打印
		//getFile("/local/abc.txt", "D://aaa.txt");// 从hdfs下载文件到本地系统		
		try {
			copyFileToHDFS("D://abc.txt","/local/user/bbb.txt" );//从本地系统上传文件到hdfs上
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
				
	}
	/**
     * 删除文件或者文件目录
     *
     * @param path
     *
     */
	public static void rmdir(String path){
		FileSystem fs = getFileSystem();
		path = HDFSUri + path;
		
			try {
				fs.delete(new Path(path), true);
			} catch (IllegalArgumentException | IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				try {
					fs.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}		
	}
	
	
	
	/**
     * 从 HDFS 下载文件到本地
     *
     * @param srcFile HDFS文件路径
     * @param destPath 本地路径
     */
	public static void getFile(String srcFile,String dsetFile){
	 Configuration conf =new Configuration();
	 //构建filesystem 
	 try {
		FileSystem fs = FileSystem.get(URI.create(HDFSUri), conf);
		InputStream is = fs.open(new Path(srcFile));
		IOUtils.copyBytes(is, new FileOutputStream(new File(dsetFile)), conf,true);
		fs.close();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	}
	
	
	
	
	
	
	/**
     * 本地文件上传至 HDFS
     *
     * @param srcFile 源文件 路径
     * @param destPath hdfs路径
     */
    public static void copyFileToHDFS(String srcFile,String destPath)throws Exception{


        FileInputStream fis=new FileInputStream(new File(srcFile));//读取本地文件
        Configuration conf=new Configuration();
        FileSystem fs=FileSystem.get(URI.create(HDFSUri), conf);
        OutputStream os=fs.create(new Path(destPath));
        //copy
        IOUtils.copyBytes(fis, os, 4096, true);   //ture 结束后关闭fis和os
        System.out.println("拷贝完成...");
        fs.close();
    }
	
	
/*
 * 判断目录是否存在
 * @param filepath 目录路径
 * @param Create 判断是否创建目录
 * 
 * 	
 */
	public static boolean existDir(String filePath,boolean Create){
		boolean flag =false;
		if(StringUtils.isEmpty(filePath)){
			return flag;
		}				
			try {
				Path path =new Path(filePath);
				FileSystem fs =getFileSystem();
				if(Create){
				if(!fs.exists(path)){
					fs.mkdirs(path);
				}
				}
				if(fs.isDirectory(path)){
					flag=true;
				}
				
				
			}catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return flag;
		}
	
	
	
	
	
	
	 /**
     * 创建文件目录
     *
     * @param path 文件路径
     */
    public static void mkdir(String path) {
     
      try {
    	  Configuration conf =new Configuration();
    	 FileSystem fs =FileSystem.get(URI.create(HDFSUri),conf);
          System.out.println("filepath="+path);
          fs.mkdirs(new Path(path));
          fs.close();
	} catch (IllegalArgumentException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
    }
	
	
	
	
	/**
     * 获取文件系统
     *
     * @return FileSystem 文件系统
     */
    public static FileSystem getFileSystem() {
        //读取配置文件
        Configuration conf = new Configuration();
        // 文件系统
        FileSystem fs = null;
        String hdfsUri = HDFSUri;
        if(StringUtils.isBlank(hdfsUri)){
            // 返回默认文件系统  如果在 Hadoop集群下运行,使用此种方法可直接获取默认文件系统
            try {
                fs = FileSystem.get(conf);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }else{
            // 返回指定的文件系统,如果在本地测试,需要使用此种方法获取文件系统
            try {
                URI uri = new URI(hdfsUri.trim());
                fs = FileSystem.get(uri,conf);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return fs;
    }

}        

猜你喜欢

转载自blog.csdn.net/m0_37786447/article/details/79522703