mapreduce
This commit is contained in:
		@@ -0,0 +1,180 @@
 | 
			
		||||
package com.heibaiying.utils;
 | 
			
		||||
 | 
			
		||||
import org.apache.hadoop.conf.Configuration;
 | 
			
		||||
import org.apache.hadoop.fs.*;
 | 
			
		||||
 | 
			
		||||
import java.io.BufferedReader;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.io.InputStreamReader;
 | 
			
		||||
import java.net.URI;
 | 
			
		||||
import java.net.URISyntaxException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * HDFS 工具类
 | 
			
		||||
 */
 | 
			
		||||
public class HdfsUtils {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private static final String HDFS_PATH = "hdfs://192.168.0.107:8020";
 | 
			
		||||
    private static final String HDFS_USER = "root";
 | 
			
		||||
    private static FileSystem fileSystem;
 | 
			
		||||
 | 
			
		||||
    static {
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            Configuration configuration = new Configuration();
 | 
			
		||||
            configuration.set("dfs.replication", "1");
 | 
			
		||||
            fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration, HDFS_USER);
 | 
			
		||||
        } catch (IOException e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
        } catch (InterruptedException e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
        } catch (URISyntaxException e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public static FileSystem getFileSystem() {
 | 
			
		||||
        return fileSystem;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 创建目录 支持递归创建
 | 
			
		||||
     *
 | 
			
		||||
     * @param path 路径地址
 | 
			
		||||
     * @return 创建是否成功
 | 
			
		||||
     */
 | 
			
		||||
    public static boolean mkdir(String path) throws Exception {
 | 
			
		||||
        return fileSystem.mkdirs(new Path(path));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查看文件内容
 | 
			
		||||
     *
 | 
			
		||||
     * @param path 路径地址
 | 
			
		||||
     * @return 返回文件内容字符串
 | 
			
		||||
     */
 | 
			
		||||
    public static String text(String path, String encode) throws Exception {
 | 
			
		||||
        FSDataInputStream inputStream = fileSystem.open(new Path(path));
 | 
			
		||||
        return inputStreamToString(inputStream, encode);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 创建文件并写入内容
 | 
			
		||||
     *
 | 
			
		||||
     * @param path 路径地址
 | 
			
		||||
     * @param context    文件内容
 | 
			
		||||
     */
 | 
			
		||||
    public void createAndWrite(String path, String context) throws Exception {
 | 
			
		||||
        FSDataOutputStream out = fileSystem.create(new Path(path));
 | 
			
		||||
        out.writeUTF(context);
 | 
			
		||||
        out.flush();
 | 
			
		||||
        out.close();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 文件重命名
 | 
			
		||||
     *
 | 
			
		||||
     * @param oldPath 旧文件路径
 | 
			
		||||
     * @param newPath 新文件路径
 | 
			
		||||
     * @return 重命名是否成功
 | 
			
		||||
     */
 | 
			
		||||
    public boolean rename(String oldPath, String newPath) throws Exception {
 | 
			
		||||
        return fileSystem.rename(new Path(oldPath), new Path(newPath));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 拷贝文件到HDFS
 | 
			
		||||
     *
 | 
			
		||||
     * @param localPath 本地文件路径
 | 
			
		||||
     * @param hdfsPath  存储到hdfs上的路径
 | 
			
		||||
     */
 | 
			
		||||
    public void copyFromLocalFile(String localPath, String hdfsPath) throws Exception {
 | 
			
		||||
        fileSystem.copyFromLocalFile(new Path(localPath), new Path(hdfsPath));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 从HDFS下载文件
 | 
			
		||||
     *
 | 
			
		||||
     * @param hdfsPath  文件在hdfs上的路径
 | 
			
		||||
     * @param localPath 存储到本地的路径
 | 
			
		||||
     */
 | 
			
		||||
    public void copyToLocalFile(String hdfsPath, String localPath) throws Exception {
 | 
			
		||||
        fileSystem.copyToLocalFile(new Path(hdfsPath), new Path(localPath));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询给定路径中文件/目录的状态
 | 
			
		||||
     *
 | 
			
		||||
     * @param path 目录路径
 | 
			
		||||
     * @return 文件信息的数组
 | 
			
		||||
     */
 | 
			
		||||
    public FileStatus[] listFiles(String path) throws Exception {
 | 
			
		||||
        return fileSystem.listStatus(new Path(path));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询给定路径中文件的状态和块位置
 | 
			
		||||
     *
 | 
			
		||||
     * @param path 路径可以是目录路径也可以是文件路径
 | 
			
		||||
     * @return 文件信息的数组
 | 
			
		||||
     */
 | 
			
		||||
    public RemoteIterator<LocatedFileStatus> listFilesRecursive(String path, boolean recursive) throws Exception {
 | 
			
		||||
        return fileSystem.listFiles(new Path(path), recursive);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查看文件块信息
 | 
			
		||||
     *
 | 
			
		||||
     * @param path 文件路径
 | 
			
		||||
     * @return 块信息数组
 | 
			
		||||
     */
 | 
			
		||||
    public BlockLocation[] getFileBlockLocations(String path) throws Exception {
 | 
			
		||||
        FileStatus fileStatus = fileSystem.getFileStatus(new Path(path));
 | 
			
		||||
        return fileSystem.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除文件
 | 
			
		||||
     *
 | 
			
		||||
     * @param path 文件路径
 | 
			
		||||
     * @return 删除是否成功
 | 
			
		||||
     */
 | 
			
		||||
    public boolean delete(String path) throws Exception {
 | 
			
		||||
        return fileSystem.delete(new Path(path), true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 把输入流转换为指定字符
 | 
			
		||||
     *
 | 
			
		||||
     * @param inputStream 输入流
 | 
			
		||||
     * @param encode      指定编码类型
 | 
			
		||||
     */
 | 
			
		||||
    private static String inputStreamToString(InputStream inputStream, String encode) {
 | 
			
		||||
        try {
 | 
			
		||||
            if (encode == null || ("".equals(encode))) {
 | 
			
		||||
                encode = "utf-8";
 | 
			
		||||
            }
 | 
			
		||||
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, encode));
 | 
			
		||||
            StringBuilder builder = new StringBuilder();
 | 
			
		||||
            String str = "";
 | 
			
		||||
            while ((str = reader.readLine()) != null) {
 | 
			
		||||
                builder.append(str).append("\n");
 | 
			
		||||
            }
 | 
			
		||||
            return builder.toString();
 | 
			
		||||
        } catch (IOException e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user