zoukankan      html  css  js  c++  java
  • Layui_Tree模块遍历HDFS

    注:转载请署名

    一、实体

    package com.ebd.application.common.Base;
    
    import java.util.List;
    
    public class HDFSDir {
    
    	private String id;      //自定id
    	private String pid;		//父ID
    	private String name;	//当前目录名称
    	private String alias;	//目录别名,可不用
    	private String dir;		//自"/"目录后的完整目录
    	private boolean spread;  //是否展开(true,false)
    	private List<HDFSDir> children; //子目录
    	
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
    	public String getPid() {
    		return pid;
    	}
    	public void setPid(String pid) {
    		this.pid = pid;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getAlias() {
    		return alias;
    	}
    	public void setAlias(String alias) {
    		this.alias = alias;
    	}
    	public String getDir() {
    		return dir;
    	}
    	public void setDir(String dir) {
    		this.dir = dir;
    	}
    	public boolean isSpread() {
    		return spread;
    	}
    	public void setSpread(boolean spread) {
    		this.spread = spread;
    	}
    	public List<HDFSDir> getChildren() {
    		return children;
    	}
    	public void setChildren(List<HDFSDir> children) {
    		this.children = children;
    	}
    }
    

    二、工具类

    package hdfstest;
    
    import java.io.IOException;
    import java.net.URI;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.commons.lang3.StringUtils;
    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.mapred.JobConf;
    
    import com.ebd.application.common.Base.HDFSDir;
    import com.ebd.application.common.utils.Identities;
    
    import net.sf.json.JSONObject;
    
    public class HdfsListTest {
    	
    	//HDFS访问地址
    	private static final String HDFS = "hdfs://bigdata.hadoop.com:9000";
    
    	public HdfsListTest(Configuration conf) {
    		this(HDFS, conf);
    	}
    	
    	public HdfsListTest(String hdfs, Configuration conf) {
    		this.hdfsPath = hdfs;
    		this.conf = conf;
    	}
    	
    	//hdfs路径
    	private String hdfsPath;
    	
    	//Hadoop系统配置
    	private Configuration conf;
    	
    	//启动函数
    	public static void main(String[] args) throws IOException {
    		JobConf conf = config();
    //		System.out.println(conf.get("hadoop.http.staticuser.user"));
    //		System.out.println(System.getenv("HADOOP_HOME"));
    		HdfsListTest hdfs = new HdfsListTest(conf);
    //		hdfs.mkdirs("/testput");
    //		hdfs.copyFile("C:\Users\Administrator\Desktop\testput", "/testput/testput2");
    //		hdfs.catFile("/testput/testput");
    //		hdfs.download("/testput/testput", "E:\");
    //		hdfs.ls("hdfs://bigdata.hadoop.com:9000/user");
    //		hdfs.rmr("/testput");
    //		List<String> fileList = hdfs.getTree("/","/","|-");
    		List<HDFSDir> kk = new ArrayList<HDFSDir>();
    		HDFSDir ds1 = new HDFSDir();
    		HDFSDir ds2 = new HDFSDir();
    		HDFSDir ds3 = new HDFSDir();
    		ds1.setId(Identities.uuid());
    		ds1.setDir("/testput");
    		ds2.setId(Identities.uuid());
    		ds2.setDir("/user");
    		ds3.setId(Identities.uuid());
    		ds3.setDir("/tmp");
    //		kk.add(ds1);
    //		kk.add(ds2);
    //		kk.add(ds3);
    		HDFSDir ds = new HDFSDir();
    		ds.setId(Identities.uuid());
    		ds.setDir("/");
    		kk.add(ds);
    //		List<HDFSDir> fileList = hdfs.getListTree("/","/user",0);
    		HDFSDir hdfss = hdfs.getChildNode(ds);
    		JSONObject object = JSONObject.fromObject(hdfss);
    		System.out.println(dirJsonFunc(object.toString()));
    	}      
    
    	//加载Hadoop配置文件
    	public static JobConf config(){
    		JobConf conf = new JobConf(HdfsListTest.class);
    		conf.setJobName("HdfsDAO");
    		conf.addResource("hadoop/core-site.xml");
    		conf.addResource("hadoop/hdfs-site.xml");
    		conf.addResource("hadoop/mapred-site.xml");
    		return conf;
    	}
    	
    	//在根目录下创建文件夹
    	public void mkdirs(String folder) throws IOException {
    		Path path = new Path(folder);
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		if (!fs.exists(path)) {
    			fs.mkdirs(path);
    			System.out.println("Create: " + folder);
    		}
    		fs.close();
    	}
    	
    	//某个文件夹的文件列表
    	public FileStatus[] ls(String folder) throws IOException {
    		Path path = new Path(folder);
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		FileStatus[] list = fs.listStatus(path);
    		System.out.println("ls: " + folder);
    		System.out.println("==========================================================");
    		if(list != null)
    			for (FileStatus f : list) {
    				System.out.printf("name: %s, folder: %s, size: %d
    ", f.getPath(), f.isDir(), f.getLen());
    //				System.out.printf("%s, folder: %s, 大小: %dK
    ", f.getPath().getName(), (f.isDir()?"目录":"文件"), f.getLen()/1024);
    			}
    		System.out.println("==========================================================");
    		fs.close();
    		return  list;
    	}
    	
    	public void copyFile(String local, String remote) throws IOException {
    		
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		//remote---/用户/用户下的文件或文件夹
    		fs.copyFromLocalFile(new Path(local), new Path(remote));
    		System.out.println("copy from: " + local + " to " + remote);
    		fs.close();
    	}
    	
    	public void catFile(String remote) throws IOException {
    		
    		FSDataInputStream instream = null;
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		Path path = new Path(remote);
    		if(fs.isFile(path)){
    			fs.open(path);
    			instream = fs.open(path);
    	        byte[] b = new byte[1024]; 
    	        instream.read(b);
    	        System.out.println(new String(b,"utf-8"));
    			fs.close();
    		}
    	}
    	
    	List <String> treeList = new ArrayList<String>();
    	public List<String> getTree(String top, String remote, String prefix) throws IOException {
    		
    		Path path = new Path(remote);
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		FileStatus[] list = fs.listStatus(path);
    		if(list != null)
    			for (FileStatus f : list) {
    //				System.out.printf("name: %s, folder: %s, size: %d
    ", f.getPath(), f.isDir(), f.getLen());
    				System.out.println(prefix+ f.getPath().getName());
    				top += f.getPath().getName();
    				treeList.add(top);
    				if(fs.isDirectory(f.getPath())){
    					getTree(top,f.getPath().toString(),prefix+"-");
    				}
    			}
    		return treeList;
    	}
    	
    	int id = 0;
    	static int pid = 0;
    	List<HDFSDir> dirList = new ArrayList<HDFSDir>();
    	HDFSDir hdfsDir = null;
    	private List<HDFSDir> getListTree(String top, String remote, int pid) throws IOException {
    		Path path = new Path(remote);
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		FileStatus[] list = fs.listStatus(path);
    		if(list != null)
    			for (FileStatus f : list) {
    				if(f.isDirectory()){
    					hdfsDir = new HDFSDir();
    //					hdfsDir.setId(id++);
    //					hdfsDir.setPid(pid);
    					hdfsDir.setName(f.getPath().getName());
    					hdfsDir.setAlias(f.getPath().getName());
    					hdfsDir.setDir(f.getPath().toString().substring(HDFS.length()));
    					hdfsDir.setSpread(false);
    					System.out.println(f.getPath().getName()+"="+f.getPath().toString().substring(HDFS.length()));
    					dirList.add(hdfsDir);
    				}
    //				System.out.printf("name: %s, folder: %s, size: %d
    ", f.getPath(), f.isDir(), f.getLen());
    //				System.out.println(prefix+ f.getPath().getName());
    //				top += f.getPath().getName();
    //				if(fs.isDirectory(f.getPath())){
    //					getListTree(top,f.getPath().toString(),pid++);
    //				}
    			}
    		return dirList;
    	}
    	
    	List<HDFSDir> cDirList = null;
    	public HDFSDir getChildNode(HDFSDir pDir) throws IOException{
    		Path path = null;
    		if(pDir.getChildren() != null && pDir.getChildren().size() >= 1){
    			for(HDFSDir p : pDir.getChildren()){
    				path = new Path(p.getDir());
    				FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    				FileStatus[] list = fs.listStatus(path);
    				if(list != null){
    					cDirList = new ArrayList<HDFSDir>();
    					for (FileStatus f : list) {
    						if(f.isDirectory()){
    							hdfsDir = new HDFSDir();
    							hdfsDir.setId(Identities.uuid());
    							hdfsDir.setPid(p.getId());
    							hdfsDir.setName(f.getPath().getName());
    							hdfsDir.setAlias(f.getPath().getName());
    							hdfsDir.setDir(f.getPath().toString().substring(HDFS.length()));
    							hdfsDir.setSpread(false);
    							cDirList.add(hdfsDir);
    						}
    					}
    					p.setChildren(cDirList);
    					for(HDFSDir pp : cDirList){
    						getChildNode(pp);
    					}
    				}
    			}
    		}else{
    			path = new Path(pDir.getDir());
    			FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    			FileStatus[] list = fs.listStatus(path);
    			if(list != null){
    				cDirList = new ArrayList<HDFSDir>();
    				for (FileStatus f : list) {
    					if(f.isDirectory()){
    						hdfsDir = new HDFSDir();
    						hdfsDir.setId(Identities.uuid());
    						hdfsDir.setPid(pDir.getId());
    						hdfsDir.setName(f.getPath().getName().equals("")?"/":f.getPath().getName());
    						hdfsDir.setAlias(f.getPath().getName().equals("")?"/":f.getPath().getName());
    						hdfsDir.setDir(f.getPath().toString().substring(HDFS.length()));
    						hdfsDir.setSpread(false);
    						cDirList.add(hdfsDir);
    					}
    				}
    				pDir.setChildren(cDirList);
    				for(HDFSDir pp : cDirList){
    					getChildNode(pp);
    				}
    			}
    		}
    		return pDir;
    	}
    	
    	public static String dirJsonFunc(String jsonStr) {
    		 if (StringUtils.isNotBlank(jsonStr)) {
    			 String[] reg_array = {"(["])","(,['])","([']:)"};
    			 String[] rpa_array = {"'",",",":"};
    			 for(int i=0;i<reg_array.length;i++){
    				 jsonStr = jsonStr.replaceAll(reg_array[i], rpa_array[i]);
    			 }
    			 jsonStr = jsonStr.replace("{'", "{");
    			 jsonStr = jsonStr.replace("'}", "}");
    		 }
    		 return jsonStr;
    	}
    	
    	//删除文件或文件夹
    	public void rmr(String folder) throws IOException {
    		
    		Path path = new Path(folder);
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		fs.deleteOnExit(path);
    		System.out.println("Delete: " + folder);
    		fs.close();
    	}
    	
    	//下载文件到本地系统
    	public void download(String remote, String local) throws IOException {
    		
    		Path path = new Path(remote);
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		fs.copyToLocalFile(path, new Path(local));
    		System.out.println("download: from" + remote + " to " + local);
    		fs.close();
    	}
    }
    

    转换工具类

    package test;
    
    import org.apache.commons.lang3.StringUtils;
    
    import com.ebd.application.common.Base.HDFSDir;
    import com.ebd.application.common.utils.Identities;
    
    import net.sf.json.JSONArray;
    
    public class TestObjectToJson {
    
    	public static void main(String[] args) {
    		HDFSDir ds = new HDFSDir();
    		ds.setId(Identities.uuid());
    		ds.setDir("/testput");
    		JSONArray js = JSONArray.fromObject(ds);
    //		System.out.println(js.toString());
    		
    		String jsonStr = js.toString();
    		
    //		String reg_1 = "(["])"; //双引号转单引号
    //		String reg_2 = "(,['])"; //去掉逗号后面的单引号
    //		String reg_3 = "([']:)"; //去掉冒号前面的单引号
    //		String reg_4 = "('{'['])"; //去掉开头大括号后面的单引号
    //		Pattern pattern = Pattern.compile(regEx);
    //		jsonStr =  jsonStr.replaceAll(reg_1, "'");
    //		jsonStr =  jsonStr.replaceAll(reg_2, ",");
    //		jsonStr =  jsonStr.replaceAll(reg_3, ":");
    //		jsonStr =  jsonStr.replaceAll("{'", "{");
    //        System.out.println(jsonStr); 
    	}
    	
    	public static String dirJsonFunc(String jsonStr) {
    		 if (StringUtils.isNotBlank(jsonStr)) {
    			 String[] reg_array = {"(["])","(,['])","([']:)"};
    			 String[] rpa_array = {"'",",",":"};
    			 for(int i=0;i<reg_array.length;i++){
    				 jsonStr = jsonStr.replaceAll(reg_array[i], rpa_array[i]);
    			 }
    			 jsonStr = jsonStr.replace("{'", "{");
    			 jsonStr = jsonStr.replace("'}", "}");
    		 }
    		 return jsonStr;
    	}
    }
    

      

    工具类

    package hdfstest;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.URI;
    import java.util.ArrayList;
    import java.util.List;
    
    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;
    import org.apache.hadoop.mapred.JobConf;
    
    import com.ebd.application.common.utils.CreateFileUtil;
    
    public class HdfsDirConsoleTest {
    	
    	//HDFS访问地址
    	private static final String HDFS = "hdfs://bigdata.hadoop.com:9000";
    
    	public HdfsDirConsoleTest(Configuration conf) {
    		this(HDFS, conf);
    	}
    	
    	public HdfsDirConsoleTest(String hdfs, Configuration conf) {
    		this.hdfsPath = hdfs;
    		this.conf = conf;
    	}
    	
    	//hdfs路径
    	private String hdfsPath;
    	
    	//Hadoop系统配置
    	private Configuration conf;
    	
    	//启动函数
    	public static void main(String[] args) throws IOException {
    		JobConf conf = config();
    		System.out.println(conf.get("hadoop.http.staticuser.user"));
    		System.out.println(System.getenv("HADOOP_HOME"));
    		HdfsDirConsoleTest hdfs = new HdfsDirConsoleTest(conf);
    //		hdfs.mkdirs("/testput");
    //		hdfs.copyFile("C:\Users\Administrator\Desktop\testput", "/testput/testput2");
    //		hdfs.catFile("/testput/testput");
    		hdfs.download("/testput/testput", "D:/ss/ss",conf);
    //		hdfs.ls("hdfs://bigdata.hadoop.com:9000/");
    //		hdfs.rmr("/testput");
    //		List<String> fileList = hdfs.getTree("/","/","|-");
    //		for(int i=0;i<fileList.size();i++){
    //			System.out.println(fileList.get(i));
    //		}
    		System.out.println("success!");
    	}      
    	
    	//加载Hadoop配置文件
    	public static JobConf config(){
    		JobConf conf = new JobConf(HdfsDirConsoleTest.class);
    		conf.setJobName("HdfsDAO");
    		conf.addResource("hadoop/core-site.xml");
    		conf.addResource("hadoop/hdfs-site.xml");
    		conf.addResource("hadoop/mapred-site.xml");
    		return conf;
    	}
    	
    	//在根目录下创建文件夹
    	public void mkdirs(String folder) throws IOException {
    		Path path = new Path(folder);
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		if (!fs.exists(path)) {
    			fs.mkdirs(path);
    			System.out.println("Create: " + folder);
    		}
    		fs.close();
    	}
    	
    	//某个文件夹的文件列表
    	public FileStatus[] ls(String folder) throws IOException {
    		Path path = new Path(folder);
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		FileStatus[] list = fs.listStatus(path);
    		System.out.println("ls: " + folder);
    		System.out.println("==========================================================");
    		if(list != null)
    			for (FileStatus f : list) {
    				System.out.printf("name: %s, folder: %s, size: %d
    ", f.getPath(), f.isDir(), f.getLen());
    				System.out.println(f.getOwner()+"=="+f.getBlockSize()+"="+f.getModificationTime()+"--"+f.getPermission()+"="+f.getReplication());
    //				System.out.printf("%s, folder: %s, 大小: %dK
    ", f.getPath().getName(), (f.isDir()?"目录":"文件"), f.getLen()/1024);
    			}
    		System.out.println("==========================================================");
    		fs.close();
    		return  list;
    	}
    	
    	public void copyFile(String local, String remote) throws IOException {
    		
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		//remote---/用户/用户下的文件或文件夹
    		fs.copyFromLocalFile(new Path(local), new Path(remote));
    		System.out.println("copy from: " + local + " to " + remote);
    		fs.close();
    	}
    	
    	public void catFile(String remote) throws IOException {
    		
    		FSDataInputStream instream = null;
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		Path path = new Path(remote);
    		if(fs.isFile(path)){
    			fs.open(path);
    			instream = fs.open(path);
    	        byte[] b = new byte[1024]; 
    	        instream.read(b);
    	        System.out.println(new String(b,"utf-8"));
    			fs.close();
    		}
    	}
    	
    	List <String> treeList = new ArrayList<String>();
    	public List<String> getTree(String top, String remote, String prefix) throws IOException {
    		
    		Path path = new Path(remote);
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		FileStatus[] list = fs.listStatus(path);
    		if(list != null)
    			for (FileStatus f : list) {
    //				System.out.printf("name: %s, folder: %s, size: %d
    ", f.getPath(), f.isDir(), f.getLen());
    				System.out.println(prefix+ f.getPath().getName());
    				top += f.getPath().getName();
    				treeList.add(top);
    				if(fs.isDirectory(f.getPath())){
    					getTree(top,f.getPath().toString(),prefix+"-");
    				}
    			}
    		return treeList;
    	}
    	
    	//删除文件或文件夹
    	public void rmr(String folder) throws IOException {
    		
    		Path path = new Path(folder);
    		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    		fs.deleteOnExit(path);
    		System.out.println("Delete: " + folder);
    		fs.close();
    	}
    	
    	//下载文件到本地系统
    	public void download(String remote, String local,JobConf conf) throws IOException {
    		
    //		Path path = new Path(remote);
    //		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
    //		fs.copyToLocalFile(path, new Path(local));
    //		System.out.println("download: from" + remote + " to " + local);
    //		fs.close();
    		 FileSystem fs = FileSystem.get(URI.create(remote),conf);
    		 FSDataInputStream fsdi = fs.open(new Path(remote));
    		 if(CreateFileUtil.createDir(local)){
    			 OutputStream output = new FileOutputStream(local+remote.substring(remote.lastIndexOf("/")));
    			 IOUtils.copyBytes(fsdi,output,4096,true);
    		 }
    	}
    	
    	public static void makdir(String path) {
    
    		String strPath = "E:/a/aa/"; 
    		File file = new File(strPath); 
    		File fileParent = file.getParentFile(); 
    		if(!fileParent.exists()){ 
    		 fileParent.mkdirs(); 
    		} 
    	}
    }
    

      

  • 相关阅读:
    Linux中的计算器(bc)
    在Linux中显示日历(cal)
    在Linux中显示日期(date)
    Linux中的注销当前用户
    Linux中的提示符
    在Linux中启动X Window
    硬盘知识
    划分Linux分区
    Linux中的关机
    hdu4424 Conquer a New Region 并查集/类似最小生成树
  • 原文地址:https://www.cnblogs.com/eRrsr/p/8368110.html
Copyright © 2011-2022 走看看