HDFS API的java代码分析与实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS API的java代码分析与实例相关的知识,希望对你有一定的参考价值。


HDFS API的java代码分析与实例


1.HDFS常用的方法,我已经写好,我们看一下


技术分享



// Create()方法,直接在HDFS中写入一个新的文件,path为写入路径,text为写入的文本内容
	
	public static void  Create(String path,String text) throws IOException {

		   	
	        Configuration conf=new Configuration();
	        
	        conf.set("fs.default.name", "hdfs://192.168.1.220:9000");   //Hadoop的Master的IP地址
	        
	        FileSystem hdfs=FileSystem.get(conf);

	        byte[] buff=text.getBytes();	       

	        Path dfs=new Path(path);
	       
	        FSDataOutputStream outputStream=hdfs.create(dfs);

	        outputStream.write(buff,0,buff.length);

	        System.out.println("文件创建成功!");

	}
	
	
	
	
	//从HDFS中删除一个文件,path为文件的地址
	
	public static void  delete(String path) throws IOException {

	        Configuration conf=new Configuration();
	        
	        conf.set("fs.default.name", "hdfs://192.168.1.220:9000");

	        FileSystem hdfs=FileSystem.get(conf);       

	        Path delef=new Path(path);	       

	        boolean isDeleted=hdfs.delete(delef,false);

	        System.out.println("Delete?"+isDeleted);        
	        
	        System.out.println("文件删除成功!");

	    }
	
	
	
	
	
	 //查找一个文件在位于哪个Hadoop节点上,path为文件的地址
	
	public static void  findLocation(String path) throws IOException {

	        Configuration conf=new Configuration();
	        
	        conf.set("fs.default.name", "hdfs://192.168.1.220:9000");

	        FileSystem hdfs=FileSystem.get(conf);
	        
	        Path fpath=new Path(path);

	        FileStatus filestatus = hdfs.getFileStatus(fpath);

	        BlockLocation[] blkLocations = hdfs.getFileBlockLocations(filestatus, 0, filestatus.getLen());	 

	        int blockLen = blkLocations.length;

	        for(int i=0;i<blockLen;i++){

	            String[] hosts = blkLocations[i].getHosts();

	            System.out.println("文件的位置为:");
	            
	            System.out.println("block_"+i+"_location:"+hosts[0]);

	        }
	
	    }
	
	
	
	       //将所有的Hadoop节点,列出来
	       
	        public static List  getNodes() throws IOException {
	        	 
	                Configuration conf=new Configuration();
	                	                
	                conf.set("fs.default.name", "hdfs://192.168.1.220:9000");

	                FileSystem fs=FileSystem.get(conf);	               

	                DistributedFileSystem hdfs = (DistributedFileSystem)fs;

	                DatanodeInfo[] dataNodeStats = hdfs.getDataNodeStats();     
	                
	                List  list = new ArrayList();
	                for(int i=0; i<dataNodeStats.length;i++)  {
	                	list.add(  dataNodeStats[i].getHostName());
	                	
	                }
	                
	                return list;
                        
	        }
	
	
	        
	        
	        
	        //显示Hadoop根节点中所有的文件,注意根节点为"\"
	        
	        public static List  listAllFile()  throws IOException {

                    String  path = "hdfs://192.168.1.220:9000/";
	        	
	                Configuration conf=new Configuration();
	                
	                conf.set("fs.default.name", "hdfs://192.168.1.220:9000");

	                FileSystem hdfs=FileSystem.get(conf);
	              
	                Path listf =new Path(path);	               

	                FileStatus stats[]=hdfs.listStatus(listf);
	                	                

	                List  list = new ArrayList();
	                for(int i=0; i<stats.length;i++)  {
	                	list.add(  stats[i].getPath().toString() );
	                	
	                }
	                
	                return list;
	                
	        
	            }
	        
	        
	        
	        
	        
	        //显示path路径下的所有的文件
	        
	        public static List listFile(String path) throws IOException {


	                Configuration conf=new Configuration();
	                
	                conf.set("fs.default.name", "hdfs://192.168.1.220:9000");

	                FileSystem hdfs=FileSystem.get(conf);

	               

	                Path listf =new Path(path);

	               

	                FileStatus stats[]=hdfs.listStatus(listf);
	                
	                
	                List  list = new ArrayList();
	                for(int i=0; i<stats.length;i++)  {
	                	list.add(  stats[i].getPath().toString() );
	                	
	                }
	                
	                return list;

	            }
	        
	        
	        
	        
	        
	        //新建一个文件夹,path为新建后的文件地址
	        
	        public static void  mkdir(String path) throws IOException {


	                Configuration conf=new Configuration();
	                
	                conf.set("fs.default.name", "hdfs://192.168.1.220:9000");

	                FileSystem hdfs=FileSystem.get(conf);
              
	                Path dfs=new Path(path);
 
	                hdfs.mkdirs(dfs);

 

	            }
	            
	            
	            
	            
	        
	         //重命名一个文件,path为全路径
	         
	        public static void  rename(String oldPath,String newPath) throws IOException {


	                Configuration conf=new Configuration();
	                
	                conf.set("fs.default.name", "hdfs://192.168.1.220:9000");

	                FileSystem hdfs=FileSystem.get(conf);
 
	                Path frpaht=new Path(oldPath);    //旧的文件名

	                Path topath=new Path(newPath);    //新的文件名
 
	                boolean isRename=hdfs.rename(frpaht, topath);
 
	                String result=isRename?"成功":"失败";

	                System.out.println("文件重命名结果为:"+result);

	               

	            }
  
	            
	            
	            
	        //上传一个文件到Hadoop中的path路径下, path为全路径
	        
	        public static void  upload(String filepath,String hdfsPath) throws IOException  {

	                Configuration conf=new Configuration();

	                conf.set("fs.default.name", "hdfs://192.168.1.220:9000");
	                
	                FileSystem hdfs=FileSystem.get(conf);
	             

	                Path src =new Path(filepath);   //本地文件


	                Path dst =new Path(hdfsPath);      //HDFS为止

	               

	                hdfs.copyFromLocalFile(src, dst);

	                System.out.println("Upload to"+" "+conf.get("fs.default.name"));

	               

	                FileStatus files[]=hdfs.listStatus(dst);

	                for(FileStatus file:files){

	                    System.out.println(file.getPath());

	                }
	                
	                
	                System.out.println("文件上传成功!");

	            }
	        
	        
	        
	        
	        //查看一个文件的详细信息,path为文件的全路径
	        
	        public static void  showFile(String path) throws IOException  {

                Configuration conf=new Configuration();

                conf.set("fs.default.name", "hdfs://192.168.1.220:9000");
                
                FileSystem hdfs=FileSystem.get(conf);
                
                Path p = new Path(path);
	        
                FileStatus fileStatus = hdfs.getFileStatus(p);
                
                System.out.println("文件路径:"+fileStatus.getPath());
                System.out.println("块的大小:"+fileStatus.getBlockSize());
                System.out.println("文件所有者:"+fileStatus.getOwner()+":"+fileStatus.getGroup());
                System.out.println("文件权限:"+fileStatus.getPermission());
                System.out.println("文件长度:"+fileStatus.getLen());
                System.out.println("备份数:"+fileStatus.getReplication());
                System.out.println("修改时间:"+fileStatus.getModificationTime());
	        
	            
	        
	        }
	        
	        
	        
	        
	


本文出自 “你若盛开,清风自来” 博客,请务必保留此出处http://iqdutao.blog.51cto.com/2597934/1792333

以上是关于HDFS API的java代码分析与实例的主要内容,如果未能解决你的问题,请参考以下文章

HDFS文件系统的JAVA-API操作

创建片段而不从 java 代码实例化它

java 代码片段

Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段

Hadoop HDFS Java API

头歌Educoder云计算与大数据——实验五 Java API分布式存储