`
weitao1026
  • 浏览: 995072 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

HDFS是Hadoop生态系统的根基,也是Hadoop生态系统中的重要一员,大部分时候,我们都会使用Linux shell命令来管理HDFS,包括一些文件的创建,删除,修改,上传等等,因为使用shell命令操作HDFS的方式,相对比较简单,方便,但是有时候,我们也需要通过编程的方式来实现对文件系统的管理。


比如有如下的一个小需求,要求我们实现读取HDFS某个文件夹下所有日志,经过加工处理后在写入到HDFS上,或者存进Hbase里,或者存进其他一些存储系统。这时候使用shell的方式就有点麻烦了,所以这时候我们就可以使用编程的方式来完成这件事了,当然散仙在这里使用的是原生的Java语言的方式,其他的一些语言例如C++,PHP,Python都可以实现,散仙在这里不给出演示了,(其实散仙也不会那些语言,除了刚入门的Python)


下面,散仙给出代码,以供参考:

Java代码 复制代码 收藏代码
  1. package com.java.api.hdfs;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStream;  
  6. import java.io.InputStreamReader;  
  7.   
  8. import org.apache.hadoop.conf.Configuration;  
  9. import org.apache.hadoop.fs.FileStatus;  
  10. import org.apache.hadoop.fs.FileSystem;  
  11. import org.apache.hadoop.fs.Path;  
  12.   
  13.   
  14. /** 
  15.  * @author 三劫散仙 
  16.  * Java API操作HDFS 
  17.  * 工具类 
  18.  *  
  19.  * **/  
  20. public class OperaHDFS {  
  21.       
  22.       
  23.     public static void main(String[] args)throws Exception {  
  24.           
  25.         //System.out.println("aaa");  
  26.     //  uploadFile();  
  27.         //createFileOnHDFS();  
  28.         //deleteFileOnHDFS();  
  29.         //createDirectoryOnHDFS();  
  30.         //deleteDirectoryOnHDFS();  
  31.     //  renameFileOrDirectoryOnHDFS();  
  32.         //downloadFileorDirectoryOnHDFS();  
  33.         readHDFSListAll();  
  34.     }  
  35.       
  36.       
  37.       
  38.       
  39.     /*** 
  40.      * 加载配置文件 
  41.      * **/  
  42.      static Configuration conf=new Configuration();  
  43.        
  44.        
  45.        
  46.      /** 
  47.       * 重名名一个文件夹或者文件 
  48.       *  
  49.       * **/  
  50.      public static void renameFileOrDirectoryOnHDFS()throws Exception{  
  51.            
  52.             FileSystem fs=FileSystem.get(conf);  
  53.             Path p1 =new Path("hdfs://10.2.143.5:9090/root/myfile/my.txt");  
  54.             Path p2 =new Path("hdfs://10.2.143.5:9090/root/myfile/my2.txt");  
  55.             fs.rename(p1, p2);  
  56.               
  57.             fs.close();//释放资源  
  58.             System.out.println("重命名文件夹或文件成功.....");  
  59.            
  60.      }  
  61.        
  62.        
  63.      /*** 
  64.       *   
  65.       * 读取HDFS某个文件夹的所有 
  66.       * 文件,并打印 
  67.       *  
  68.       * **/  
  69.         public static void readHDFSListAll() throws Exception{  
  70.           
  71.      //流读入和写入  
  72.             InputStream in=null;  
  73.             //获取HDFS的conf  
  74.           //读取HDFS上的文件系统  
  75.             FileSystem hdfs=FileSystem.get(conf);  
  76.           //使用缓冲流,进行按行读取的功能  
  77.             BufferedReader buff=null;  
  78.           //获取日志文件的根目录  
  79.             Path listf =new Path("hdfs://10.2.143.5:9090/root/myfile/");  
  80.           //获取根目录下的所有2级子文件目录  
  81.             FileStatus stats[]=hdfs.listStatus(listf);  
  82.           //自定义j,方便查看插入信息  
  83.             int j=0;  
  84.              for(int i = 0; i < stats.length; i++){  
  85.                 //获取子目录下的文件路径  
  86.                 FileStatus   temp[]=hdfs.listStatus(new Path(stats[i].getPath().toString()));  
  87.                   for(int k = 0; k < temp.length;k++){  
  88.                       System.out.println("文件路径名:"+temp[k].getPath().toString());  
  89.                 //获取Path  
  90.                 Path p=new Path(temp[k].getPath().toString());  
  91.                 //打开文件流  
  92.                  in=hdfs.open(p);  
  93.                  //BufferedReader包装一个流  
  94.                    buff=new BufferedReader(new InputStreamReader(in));             
  95.                  String str=null;  
  96.                  while((str=buff.readLine())!=null){  
  97.                        
  98.                      System.out.println(str);  
  99.                  }  
  100.                     buff.close();  
  101.                     in.close();  
  102.                    
  103.    
  104.                  }  
  105.                    
  106.                   
  107.                    
  108.    
  109.                   }  
  110.                    
  111.              hdfs.close();  
  112.            
  113.   
  114.         }  
  115.      /** 
  116.       * 从HDFS上下载文件或文件夹到本地 
  117.       *  
  118.       * **/  
  119.      public static void downloadFileorDirectoryOnHDFS()throws Exception{  
  120.            
  121.             FileSystem fs=FileSystem.get(conf);  
  122.             Path p1 =new Path("hdfs://10.2.143.5:9090/root/myfile//my2.txt");  
  123.             Path p2 =new Path("D://7");  
  124.             fs.copyToLocalFile(p1, p2);  
  125.             fs.close();//释放资源  
  126.             System.out.println("下载文件夹或文件成功.....");  
  127.            
  128.      }  
  129.      /** 
  130.       * 在HDFS上创建一个文件夹 
  131.       *  
  132.       * **/  
  133.      public static void createDirectoryOnHDFS()throws Exception{  
  134.            
  135.             FileSystem fs=FileSystem.get(conf);  
  136.             Path p =new Path("hdfs://10.2.143.5:9090/root/myfile");  
  137.             fs.mkdirs(p);  
  138.             fs.close();//释放资源  
  139.             System.out.println("创建文件夹成功.....");  
  140.            
  141.      }  
  142.        
  143.      /** 
  144.       * 在HDFS上删除一个文件夹 
  145.       *  
  146.       * **/  
  147.      public static void deleteDirectoryOnHDFS()throws Exception{  
  148.            
  149.             FileSystem fs=FileSystem.get(conf);  
  150.             Path p =new Path("hdfs://10.2.143.5:9090/root/myfile");  
  151.             fs.deleteOnExit(p);  
  152.             fs.close();//释放资源  
  153.             System.out.println("删除文件夹成功.....");  
  154.            
  155.      }  
  156.      /** 
  157.       * 在HDFS上创建一个文件 
  158.       *  
  159.       * **/  
  160.      public static void createFileOnHDFS()throws Exception{  
  161.            
  162.             FileSystem fs=FileSystem.get(conf);  
  163.             Path p =new Path("hdfs://10.2.143.5:9090/root/abc.txt");  
  164.             fs.createNewFile(p);  
  165.             //fs.create(p);  
  166.             fs.close();//释放资源  
  167.             System.out.println("创建文件成功.....");  
  168.            
  169.      }  
  170.        
  171.      /** 
  172.       * 在HDFS上删除一个文件 
  173.       *  
  174.       * **/  
  175.      public static void deleteFileOnHDFS()throws Exception{  
  176.            
  177.             FileSystem fs=FileSystem.get(conf);  
  178.             Path p =new Path("hdfs://10.2.143.5:9090/root/abc.txt");  
  179.             fs.deleteOnExit(p);  
  180.             fs.close();//释放资源  
  181.             System.out.println("删除成功.....");  
  182.            
  183.      }  
  184.        
  185.        
  186.     /*** 
  187.      * 上传本地文件到 
  188.      * HDFS上 
  189.      *  
  190.      * **/  
  191.     public static void uploadFile()throws Exception{  
  192.         //加载默认配置  
  193.         FileSystem fs=FileSystem.get(conf);  
  194.           //本地文件  
  195.         Path src =new Path("D:\\6");  
  196.         //HDFS为止  
  197.         Path dst =new Path("hdfs://10.2.143.5:9090/root/");  
  198.         try {  
  199.             fs.copyFromLocalFile(src, dst);  
  200.         } catch (IOException e) {  
  201.             // TODO Auto-generated catch block  
  202.             e.printStackTrace();  
  203.         }  
  204.         System.out.println("上传成功........");  
  205.      
  206.         fs.close();//释放资源  
  207.    
  208.           
  209.     }  
  210.   
  211. }  
package com.java.api.hdfs;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;


/**
 * @author 三劫散仙
 * Java API操作HDFS
 * 工具类
 * 
 * **/
public class OperaHDFS {
	
	
	public static void main(String[] args)throws Exception {
		
		//System.out.println("aaa");
	//	uploadFile();
		//createFileOnHDFS();
		//deleteFileOnHDFS();
		//createDirectoryOnHDFS();
		//deleteDirectoryOnHDFS();
	//	renameFileOrDirectoryOnHDFS();
		//downloadFileorDirectoryOnHDFS();
		readHDFSListAll();
	}
	
	
	
	
	/***
	 * 加载配置文件
	 * **/
	 static Configuration conf=new Configuration();
	 
	 
	 
	 /**
	  * 重名名一个文件夹或者文件
	  * 
	  * **/
	 public static void renameFileOrDirectoryOnHDFS()throws Exception{
		 
			FileSystem fs=FileSystem.get(conf);
		    Path p1 =new Path("hdfs://10.2.143.5:9090/root/myfile/my.txt");
		    Path p2 =new Path("hdfs://10.2.143.5:9090/root/myfile/my2.txt");
			fs.rename(p1, p2);
			
			fs.close();//释放资源
			System.out.println("重命名文件夹或文件成功.....");
		 
	 }
	 
	 
	 /***
	  *  
	  * 读取HDFS某个文件夹的所有
	  * 文件,并打印
	  * 
	  * **/
	    public static void readHDFSListAll() throws Exception{
	    
	 //流读入和写入
	    	InputStream in=null;
	    	//获取HDFS的conf
	      //读取HDFS上的文件系统
	        FileSystem hdfs=FileSystem.get(conf);
	      //使用缓冲流,进行按行读取的功能
	        BufferedReader buff=null;
	      //获取日志文件的根目录
	        Path listf =new Path("hdfs://10.2.143.5:9090/root/myfile/");
	      //获取根目录下的所有2级子文件目录
	        FileStatus stats[]=hdfs.listStatus(listf);
	      //自定义j,方便查看插入信息
	        int j=0;
	         for(int i = 0; i < stats.length; i++){
	        	//获取子目录下的文件路径
	        	FileStatus   temp[]=hdfs.listStatus(new Path(stats[i].getPath().toString()));
	        	  for(int k = 0; k < temp.length;k++){
	        		  System.out.println("文件路径名:"+temp[k].getPath().toString());
	        	//获取Path
	        	Path p=new Path(temp[k].getPath().toString());
	        	//打开文件流
	        	 in=hdfs.open(p);
	        	 //BufferedReader包装一个流
	        	   buff=new BufferedReader(new InputStreamReader(in));	       	 
	        	 String str=null;
	             while((str=buff.readLine())!=null){
	            	 
	            	 System.out.println(str);
	             }
	                buff.close();
	                in.close();
	        	 
 
	        	 }
	        	 
	        	
	        	 
 
	        	  }
	        	 
	         hdfs.close();
	     

	    }
	 /**
	  * 从HDFS上下载文件或文件夹到本地
	  * 
	  * **/
	 public static void downloadFileorDirectoryOnHDFS()throws Exception{
		 
			FileSystem fs=FileSystem.get(conf);
		    Path p1 =new Path("hdfs://10.2.143.5:9090/root/myfile//my2.txt");
		    Path p2 =new Path("D://7");
			fs.copyToLocalFile(p1, p2);
			fs.close();//释放资源
			System.out.println("下载文件夹或文件成功.....");
		 
	 }
	 /**
	  * 在HDFS上创建一个文件夹
	  * 
	  * **/
	 public static void createDirectoryOnHDFS()throws Exception{
		 
			FileSystem fs=FileSystem.get(conf);
		    Path p =new Path("hdfs://10.2.143.5:9090/root/myfile");
			fs.mkdirs(p);
			fs.close();//释放资源
			System.out.println("创建文件夹成功.....");
		 
	 }
	 
	 /**
	  * 在HDFS上删除一个文件夹
	  * 
	  * **/
	 public static void deleteDirectoryOnHDFS()throws Exception{
		 
			FileSystem fs=FileSystem.get(conf);
		    Path p =new Path("hdfs://10.2.143.5:9090/root/myfile");
			fs.deleteOnExit(p);
			fs.close();//释放资源
			System.out.println("删除文件夹成功.....");
		 
	 }
	 /**
	  * 在HDFS上创建一个文件
	  * 
	  * **/
	 public static void createFileOnHDFS()throws Exception{
		 
			FileSystem fs=FileSystem.get(conf);
		    Path p =new Path("hdfs://10.2.143.5:9090/root/abc.txt");
			fs.createNewFile(p);
			//fs.create(p);
			fs.close();//释放资源
			System.out.println("创建文件成功.....");
		 
	 }
	 
	 /**
	  * 在HDFS上删除一个文件
	  * 
	  * **/
	 public static void deleteFileOnHDFS()throws Exception{
		 
			FileSystem fs=FileSystem.get(conf);
		    Path p =new Path("hdfs://10.2.143.5:9090/root/abc.txt");
			fs.deleteOnExit(p);
			fs.close();//释放资源
			System.out.println("删除成功.....");
		 
	 }
	 
	 
	/***
	 * 上传本地文件到
	 * HDFS上
	 * 
	 * **/
	public static void uploadFile()throws Exception{
		//加载默认配置
		FileSystem fs=FileSystem.get(conf);
		  //本地文件
        Path src =new Path("D:\\6");
        //HDFS为止
        Path dst =new Path("hdfs://10.2.143.5:9090/root/");
        try {
			fs.copyFromLocalFile(src, dst);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        System.out.println("上传成功........");
   
        fs.close();//释放资源
 
		
	}

}





散仙用的是Hadoop1.2的版本,采用hadoop的eclipse插件在eclipse下编写调试的,下面给出截图:

下面给出一个读取某个文件夹下的所有的文件并打印内容的截图:






其实,java操作HDFS还是比较简单的,只要熟悉java IO的一些操作就可以了。

分享到:
评论

相关推荐

    hadoop-hdfs-client-2.9.1-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-client-2.9.1.jar; 赠送原API文档:hadoop-hdfs-client-2.9.1-javadoc.jar; 赠送源代码:hadoop-hdfs-client-2.9.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-client-2.9.1.pom;...

    HDFS Comics HDFS 漫画

    HDFS是Hadoop分布式计算的存储基础。HDFS具有高容错性,可以部署在通用硬件设备上,适合数据密集型应用,并且提供对数据读写的高吞 吐量。HDFS能 够提供对数据的可扩展访问,通过简单地往集群里添加节点就可以解决...

    HDFS管理工具HDFS Explorer下载地址、使用方法.docx

    windows平台下的HDFS文件浏览器,就像windows管理器一样管理你的hdfs文件系统。现在官网已经停止更新这款软件。具体配置如下: HDFS配置页面及端口http://master:50070 配置HDFS服务器 配置WebHDFS HDFS Explorer...

    实验二:熟悉常用的HDFS操作

    A.2实验二:熟悉常用的HDFS操作 本实验对应第4章的内容。 A.2.1 实验目的 (1)理解 HDFS在Hadoop体系结构中的角色。(2)熟练使用HDFS操作常用的 Shell命令。(3)熟悉HDFS操作常用的Java API。 A.2.2 实验平台 (1)操作...

    数据科学导论实验报告 实验2:熟悉常用的HDFS操作

    数据科学导论 实验2:熟悉常用的HDFS操作 1. 编程实现以下指定功能,并利用 Hadoop 提供的 Shell 命令完成相同任务: 2. 编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream...

    hdfs源码.zip

    第1章 HDFS 1 1.1 HDFS概述 1 1.1.1 HDFS体系结构 1 1.1.2 HDFS基本概念 2 1.2 HDFS通信协议 4 1.2.1 Hadoop RPC接口 4 1.2.2 流式接口 20 1.3 HDFS主要流程 22 1.3.1 HDFS客户端读流程 22 1.3.2 ...

    HDFS的Trash回收站功能的配置和使用

    HDFS是Hadoop分布式计算的存储基础。HDFS具有高容错性,可以部署在通用硬件设备上,适合数据密集型应用,并且提供对数据读写的高吞 吐量。HDFS能 够提供对数据的可扩展访问,通过简单地往集群里添加节点就可以解决...

    3、HDFS的使用(读写、上传、下载、遍历、查找文件、整个目录拷贝、只拷贝文件、列出文件夹下文件、删除文件及目录、获取文件及文件

    3、HDFS的使用(读写、上传、下载、遍历、查找文件、整个目录拷贝、只拷贝文件、列出文件夹下文件、删除文件及目录、获取文件及文件夹属性等)-java 网址:...

    HDFS文件的查看

    hdfs文件的查看 hdfs fs -cat /文件名

    HDFS判断文件或目录是否存在——Shell命令实现 + Java代码实现

    hdfs dfs -test -e 文件或目录名 第三步,查看检测结果: echo $? 若输出结果为0,则说明文件或目录存在,若为1,则说明文件或目录不存在。 二、Java代码实现 import org.apache.hadoop.conf.Configuration; ...

    01.分布式文件系统HDFS.pptx

    Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错...

    hadoop-hdfs-2.9.1-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.9.1.jar 赠送原API文档:hadoop-hdfs-2.9.1-javadoc.jar 赠送源代码:hadoop-hdfs-2.9.1-sources.jar 包含翻译后的API文档:hadoop-hdfs-2.9.1-javadoc-API文档-中文(简体)版.zip 对应...

    hadoop-hdfs-2.7.3-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.7.3.jar; 赠送原API文档:hadoop-hdfs-2.7.3-javadoc.jar; 赠送源代码:hadoop-hdfs-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.7.3.pom; 包含翻译后的API文档:hadoop...

    HDFS体系架构汉化文档.pdf

    Hadoop分布式文件系统( HDFS )是一种旨在在商品硬件上运行的分布式文系统。它与现有的分布式文件系统许多相似之处。 但是,与其他分布式文件系统的区别很明显。 HDFS 具有高度的容错能力,旨在部署低成本硬件上。 ...

    doris 0.15版本 中的 apache_hdfs_broker 插件

    已对doris 0.15版本中的apache_hdfs_broker组件进行了编译,可以直接使用此包进行 分发,修改配置文件,启动(之前需要对doris进行安装启动) *** 对应的doris0.15安装包链接如下:...

    HDFS可视化操作研究与实现

    Hadoop 是一个由Java 语言实现的软件框架,在一个计算机集群中对海量数据进行分布式计算,这个集群可 以支持上千个节点和PB 级别的数据... 在研究HDFS 的架构的基础上,设计实现了基于WEB 的HDFS 可视化文件访问系统.

    hadoop-hdfs-2.6.5-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.6.5.jar; 赠送原API文档:hadoop-hdfs-2.6.5-javadoc.jar; 赠送源代码:hadoop-hdfs-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.6.5.pom; 包含翻译后的API文档:hadoop...

    7、NIFI综合应用场景-将mysql查询出的json数据转换成txt后存储至HDFS中

    7、NIFI综合应用场景-将mysql查询出的json数据转换成txt后存储至HDFS中 网址:https://blog.csdn.net/chenwewi520feng/article/details/130620392 本文是在6、NIFI综合应用场景-离线同步Mysql数据到HDFS中基础上完成...

    基于springboot+netty+redis+hdfs实现的一个线上分布式网盘系统,毕业设计项目,个人学习,课设等均可

    基于springboot+netty+redis+hdfs实现的一个线上分布式网盘系统,毕业设计项目,个人学习,课设等均可,项目经过测试,可完美运行! 项目结构 项目主要分为一下几个模块 web-service 主要功能是页面展示,交互 ...

    hdfs官方设计文档(中文)

    Hadoop 分布式文件系统 (HDFS)是一个设计为用在普通硬件设备上的分布式文件系统。它与现有的分布式文件系统有很多近似的地方,但又和这些文件系统有很明显的不同。HDFS是高容错的,设计为部署在廉价硬件上的。HDFS对...

Global site tag (gtag.js) - Google Analytics