HDFS是Hadoop生态系统的根基,也是Hadoop生态系统中的重要一员,大部分时候,我们都会使用Linux shell命令来管理HDFS,包括一些文件的创建,删除,修改,上传等等,因为使用shell命令操作HDFS的方式,相对比较简单,方便,但是有时候,我们也需要通过编程的方式来实现对文件系统的管理。
比如有如下的一个小需求,要求我们实现读取HDFS某个文件夹下所有日志,经过加工处理后在写入到HDFS上,或者存进Hbase里,或者存进其他一些存储系统。这时候使用shell的方式就有点麻烦了,所以这时候我们就可以使用编程的方式来完成这件事了,当然散仙在这里使用的是原生的Java语言的方式,其他的一些语言例如C++,PHP,Python都可以实现,散仙在这里不给出演示了,(其实散仙也不会那些语言,除了刚入门的Python) 。
下面,散仙给出代码,以供参考:
- 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();//释放资源
- }
- }
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的一些操作就可以了。
相关推荐
赠送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是Hadoop分布式计算的存储基础。HDFS具有高容错性,可以部署在通用硬件设备上,适合数据密集型应用,并且提供对数据读写的高吞 吐量。HDFS能 够提供对数据的可扩展访问,通过简单地往集群里添加节点就可以解决...
windows平台下的HDFS文件浏览器,就像windows管理器一样管理你的hdfs文件系统。现在官网已经停止更新这款软件。具体配置如下: HDFS配置页面及端口http://master:50070 配置HDFS服务器 配置WebHDFS HDFS Explorer...
A.2实验二:熟悉常用的HDFS操作 本实验对应第4章的内容。 A.2.1 实验目的 (1)理解 HDFS在Hadoop体系结构中的角色。(2)熟练使用HDFS操作常用的 Shell命令。(3)熟悉HDFS操作常用的Java API。 A.2.2 实验平台 (1)操作...
数据科学导论 实验2:熟悉常用的HDFS操作 1. 编程实现以下指定功能,并利用 Hadoop 提供的 Shell 命令完成相同任务: 2. 编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream...
第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是Hadoop分布式计算的存储基础。HDFS具有高容错性,可以部署在通用硬件设备上,适合数据密集型应用,并且提供对数据读写的高吞 吐量。HDFS能 够提供对数据的可扩展访问,通过简单地往集群里添加节点就可以解决...
3、HDFS的使用(读写、上传、下载、遍历、查找文件、整个目录拷贝、只拷贝文件、列出文件夹下文件、删除文件及目录、获取文件及文件夹属性等)-java 网址:...
hdfs文件的查看 hdfs fs -cat /文件名
hdfs dfs -test -e 文件或目录名 第三步,查看检测结果: echo $? 若输出结果为0,则说明文件或目录存在,若为1,则说明文件或目录不存在。 二、Java代码实现 import org.apache.hadoop.conf.Configuration; ...
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错...
赠送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 对应...
赠送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...
Hadoop分布式文件系统( HDFS )是一种旨在在商品硬件上运行的分布式文系统。它与现有的分布式文件系统许多相似之处。 但是,与其他分布式文件系统的区别很明显。 HDFS 具有高度的容错能力,旨在部署低成本硬件上。 ...
已对doris 0.15版本中的apache_hdfs_broker组件进行了编译,可以直接使用此包进行 分发,修改配置文件,启动(之前需要对doris进行安装启动) *** 对应的doris0.15安装包链接如下:...
Hadoop 是一个由Java 语言实现的软件框架,在一个计算机集群中对海量数据进行分布式计算,这个集群可 以支持上千个节点和PB 级别的数据... 在研究HDFS 的架构的基础上,设计实现了基于WEB 的HDFS 可视化文件访问系统.
赠送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中 网址:https://blog.csdn.net/chenwewi520feng/article/details/130620392 本文是在6、NIFI综合应用场景-离线同步Mysql数据到HDFS中基础上完成...
基于springboot+netty+redis+hdfs实现的一个线上分布式网盘系统,毕业设计项目,个人学习,课设等均可,项目经过测试,可完美运行! 项目结构 项目主要分为一下几个模块 web-service 主要功能是页面展示,交互 ...
Hadoop 分布式文件系统 (HDFS)是一个设计为用在普通硬件设备上的分布式文件系统。它与现有的分布式文件系统有很多近似的地方,但又和这些文件系统有很明显的不同。HDFS是高容错的,设计为部署在廉价硬件上的。HDFS对...