HDFS文件系统的JAVA-API操作(一)

要点导航

  • 实例1:使用java.net.URL访问HDFS文件系统
  • 实例2:使用FileSystem访问HDFS文件系统
  • 实例3:创建HDFS目录
  • 实例4:删除HDFS目录
  • 实例5:查看文件或目录是否存在
  • 实例6:列出目录下的文件或目录名称
  • 实例7:查看文件存储位置
  • 实例8:将本地文件写入到HDFS中

使用java.net.URL访问HDFS文件系统

HDFS的API使用说明:
  1.如果要访问HDFS,HDFS客户端必须有一份HDFS的配置文件
  也就是hdfs-site.xml,从而读取Namenode的信息。
  2.每个应用程序也必须拥有访问Hadoop程序的jar文件
  3.操作HDFS,也就是HDFS的读和写,最常用的类FileSystem

回到导航
初始化配置参数据需注意的如下init方法红色标注的地方
    public void init() throws Exception {
        // 构造一个配置参数对象,设置一个参数:我们要访问的hdfs的URI// 从而FileSystem.get()方法就知道应该是去构造一个访问hdfs文件系统的客户端,以及hdfs的访问地址// new Configuration();的时候,它就会去加载jar包中的hdfs-default.xml// 然后再加载classpath下的hdfs-site.xmlConfiguration conf = new Configuration();//conf.set("fs.defaultFS", "hdfs://hdp-node01:9000");/*** 参数优先级: 1、客户端代码中设置的值 2、classpath下的用户自定义配置文件 3、然后是服务器的默认配置*///conf.set("dfs.replication", "3");// 获取一个hdfs的访问客户端,根据参数,这个实例应该是DistributedFileSystem的实例// fs = FileSystem.get(conf);       // 如果这样去获取,那conf里面就可以不要配"fs.defaultFS"参数,而且,这个客户端的身份标识已经是hadoop用户fs = FileSystem.get(new URI("hdfs://hdp-node01:9000"), conf, "hadoop");}

实例1:使用java.net.URL访问HDFS文件系统

/**

* 操作:显示HDFS文件夹中的文件内容
* 1.使用java.net.URL对象打开数据流
* 2.使用静态代码块使得java程序识别Hadoop的HDFS url
*/

操作代码如下:

 1 package TestHdfs;2 import java.io.InputStream;3 import java.net.URL;4 import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;5 import org.apache.hadoop.io.IOUtils;6 /**7  * @author SimonsZhao8  * HDFS的API使用9  * 1.如果要访问HDFS,HDFS客户端必须有一份HDFS的配置文件
10  * 也就是hdfs-site.xml,从而读取Namenode的信息。
11  * 2.每个应用程序也必须拥有访问Hadoop程序的jar文件
12  * 3.操作HDFS,也就是HDFS的读和写,最常用的类FileSystem
13  * 操作:显示HDFS文件夹中的文件内容
14  * 1.使用java.net.URL对象打开数据流
15  * 2.使用静态代码块使得java程序识别Hadoop的HDFS url
16  */
17 public class MyCat {
18     static{
19         URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
20     }
21     public static void main(String[] args) {
22         InputStream input=null;
23         try {
24             input = new URL(args[0]).openStream();
25             IOUtils.copyBytes(input,System.out,4096,false);
26         } catch (Exception e) {
27             System.err.println("Error");
28         }finally{
29             IOUtils.closeStream(input);
30         }
31     }
32 }

0.打包程序并长传到Linux中

a.通过export导出文件jar包

b.选择jar包存放路径

c.指定主类

d.通过SecureCRT上传jar包至Linux中的指定文件夹下。

   1.在指定文件夹下创建示例文件demo

    [root@neusoft-master filecontent]# vi demo

    

  2.上传文件至HDFS的data目录,data目录需要首先创建。

    [root@neusoft-master filecontent]# hadoop dfs -put demo /data/

    

3.查看是否上传成功

[root@neusoft-master filecontent]# hadoop dfs -ls /data/

4.将已经打包好的jar文件上传至linux并切换到相应文件夹运行hadoop命令执行

从结果可以看出能够显示出来demo文件的内容

[root@neusoft-master filecontent]# hadoop jar MyCat.jar hdfs://neusoft-master:9000/data/demo

回到导航

实例2:使用FileSystem访问HDFS文件系统

/**
    *操作:将本地文件系统的文件通过java-API写入到HDFS文件
    */

1.本地文件系统和HDFS中应该首先创建指定的目录

linux中创建文件命令:mkdir test

HDFS中创建文件夹命令:hadoop dfs -mkdir /data/

String source="/usr/local/filecontent/demo";//linux中的文件路徑,demo存在一定数据,这里存储了一行英语句子,如welcome to.....
String destination="hdfs://neusoft-master:9000/data/test";//HDFS的路徑

2.程序源代码

 1 package TestHdfs;2 3 import java.io.BufferedInputStream;4 import java.io.FileInputStream;5 import java.io.FileNotFoundException;6 import java.io.InputStream;7 import java.io.OutputStream;8 import java.net.URI;9
10 import org.apache.hadoop.conf.Configuration;
11 import org.apache.hadoop.fs.FSDataOutputStream;
12 import org.apache.hadoop.fs.FileSystem;
13 import org.apache.hadoop.fs.Path;
14 import org.apache.hadoop.io.IOUtils;
15
16 /**
17  * @author SimonsZhao
18  *将本地文件系统的文件通过java-API写入到HDFS文件
19  */
20 public class FileCopyFromLocal {
21     public static void main(String[] args) throws Exception {
22         String source="/usr/local/filecontent/demo";//linux中的文件路徑,demo存在一定数据
23         String destination="hdfs://neusoft-master:9000/data/test";//HDFS的路徑
24         InputStream in = new BufferedInputStream(new FileInputStream(source));
25         //HDFS读写的配置文件
26         Configuration conf = new Configuration();
27         //调用Filesystem的create方法返回的是FSDataOutputStream对象
28         //该对象不允许在文件中定位,因为HDFS只允许一个已打开的文件顺序写入或追加
29         FileSystem fs = FileSystem.get(URI.create(destination),conf);
30         OutputStream out = fs.create(new Path(destination));
31         IOUtils.copyBytes(in, out, 4096, true);
32     }
33 }

3.程序打包并传至linux文件系统中

请参考实例1的打包过程

4.程序运行及结果分析

a.查看指定jar包是否成功上传,在linux中使用ls或ll命令

b.执行jar命令

 [root@neusoft-master filecontent]# hadoop jar FileSystemDemoCat.jar 

c.结果显示welcome to....说明操作正确

回到导航

实例3:创建HDFS目录

  * 创建HDFS目录
  * 实例:HDFS创建test2目录   

1.明确在HDFS文件系统中创建目录的具体地址,在程序中通过args[0]参数提供用户输入,如

hdfs://neusoft-master:9000/data/test2

2.程序源代码

 1 package TestHdfs;2 import java.net.URI;3 import org.apache.hadoop.conf.Configuration;4 import org.apache.hadoop.fs.FileSystem;5 import org.apache.hadoop.fs.Path;6 /**7  * @author SimonsZhao8  * 创建HDFS目录9  * 实例:HDFS创建test2目录
10  * hadoop jar CreateDir.jar hdfs://neusoft-master:9000/data/test2
11  */
12 public class CreateDirction {
13     public static void main(String[] args) {
14         //HDFS路径:hdfs://neusoft-master:9000/data/test2
15         String uri=args[0];//从键盘输入路径参数
16         Configuration conf = new Configuration();
17         try {
18             FileSystem fs = FileSystem.get(new URI(uri),conf);
19             Path dfs = new Path(uri);
20             fs.mkdirs(dfs);
21         } catch (Exception e) {
22             e.printStackTrace();
23         }finally{
24             System.out.println("SUCESS");
25         }
26     }
27 }

3.将jar包上传到Linux

请参考第一个程序的导出jar包的过程。

4.程序运行及结果分析

[root@neusoft-master filecontent]# hadoop jar CreateDir.jar hdfs://neusoft-master:9000/data/test2

回到导航

实例4:删除HDFS目录

 1 package TestHdfs;2 import java.net.URI;3 import org.apache.hadoop.conf.Configuration;4 import org.apache.hadoop.fs.FileSystem;5 import org.apache.hadoop.fs.Path;6 /**7  * @author SimonsZhao8  * 删除HDFS上面的文件9  */
10 public class DeleteFile {
11     public static void main(String[] args) {
12         String uri="hdfs://neusoft-master:9000/data/test2";
13         Configuration conf = new Configuration();
14         try {
15             FileSystem fs =FileSystem.get(new URI(uri), conf);
16             Path f = new Path(uri);
17             //递归删除文件夹下所有文件
18             boolean isDelete= fs.delete(f, true);
19             //递归删除文件夹下所有文件
20             //boolean isDelete= fs.delete(f, false);
21             String str=isDelete?"Sucess":"Error";
22             System.out.println("删除"+str);
23         } catch (Exception e) {
24             System.out.println("删除出错~");
25         }
26     }
27 }

3.将jar包上传到Linux

请参考第一个程序的导出jar包的过程。

4.程序运行及结果分析

执行程序之后,通过hadoop dfs -ls / 查看是否成功删除HDFS上面的文件

回到导航

实例5:查看文件或目录是否存在

 1 package TestHdfs;2 import java.net.URI;3 import org.apache.hadoop.conf.Configuration;4 import org.apache.hadoop.fs.FileSystem;5 import org.apache.hadoop.fs.Path;6 /**7  * @author SimonsZhao8  * 查看文件是否存在9  */
10 public class CheckFileIsExists {
11     public static void main(String[] args) {
12         //String uri="hdfs://neusoft-master:9000/data/test2/";//指定目录
13         String uri="hdfs://neusoft-master:9000/data/test2/hello";//指定文件
14         Configuration conf = new Configuration();
15         try {
16             FileSystem fs = FileSystem.get(new URI(uri), conf);
17             Path path = new Path(uri);
18             boolean isExists=fs.exists(path);
19             String str=isExists?"Exists":"Not Exists";
20             System.out.println("指定文件或目录"+str);
21         } catch (Exception e) {
22             e.printStackTrace();
23         }
24     }
25 }

3.将jar包上传到Linux

请参考第一个程序的导出jar包的过程。

4.程序运行及结果分析

如果在linux中存在该文件的话,则显示如下:

 “指定文件或目录Exists”

回到导航

实例6:列出目录下的文件或目录名称

 1 package TestHdfs;2 import java.net.URI;3 import org.apache.hadoop.conf.Configuration;4 import org.apache.hadoop.fs.FileStatus;5 import org.apache.hadoop.fs.FileSystem;6 import org.apache.hadoop.fs.Path;7 /**8  * @author SimonsZhao9  * 列出目录下的文件或目录名称
10  */
11 public class ListFiles {
12 public static void main(String[] args) {
13     String uri="hdfs://neusoft-master:9000/data";
14     Configuration conf = new Configuration();
15     try {
16         FileSystem fs=FileSystem.get(new URI(uri), conf);
17         Path path = new Path(uri);
18         FileStatus status[] = fs.listStatus(path);
19         for (int i = 0; i < status.length; i++) {
20             System.out.println(status[i].getPath().toString());
21         }
22     } catch (Exception e) {
23         e.printStackTrace();
24     }
25 }
26 }

3.将jar包上传到Linux

请参考第一个程序的导出jar包的过程。

4.程序运行及结果分析

回到导航

实例7:查看文件存储位置

 1 package TestHdfs;2 import java.net.URI;3 import org.apache.hadoop.conf.Configuration;4 import org.apache.hadoop.fs.BlockLocation;5 import org.apache.hadoop.fs.FileStatus;6 import org.apache.hadoop.fs.FileSystem;7 import org.apache.hadoop.fs.Path;8 9 /**
10  * @author SimonsZhao
11  * 文件存储的位置
12  */
13 public class LoactionFile {
14     public static void main(String[] args) {
15         String uri="hdfs://neusoft-master:9000/data/demo";//hello为文件
16         Configuration conf = new Configuration();
17         try {
18             FileSystem fs=FileSystem.get(new URI(uri), conf);
19             Path path = new Path(uri);
20             FileStatus fileStatus = fs.getFileStatus(path);
21             BlockLocation blkLocation[]=
22                     fs.getFileBlockLocations
23                     (fileStatus, 0, fileStatus.getLen());
24             for (int i = 0; i < blkLocation.length; i++) {
25                 String[] hosts=blkLocation[i].getHosts();
26                 System.out.println("block_"+i+"_Location:"+hosts[0]);
27             }
28         } catch (Exception e) {
29             e.printStackTrace();
30         }
31     }
32 }

3.将jar包上传到Linux

请参考第一个程序的导出jar包的过程。

4.程序运行及结果分析

由于采用伪分布的环境block块存储均为1,因此这里仅显示1个block块的host主机名

显示:block_0_Location:neusoft-master

回到导航

实例8:将本地文件写入到HDFS中

 1 package TestHdfs;2 import java.io.BufferedInputStream;3 import java.io.FileInputStream;4 import java.io.InputStream;5 import java.io.OutputStream;6 import java.net.URI;7 import org.apache.hadoop.conf.Configuration;8 import org.apache.hadoop.fs.FileSystem;9 import org.apache.hadoop.fs.Path;
10 import org.apache.hadoop.io.IOUtils;
11
12 /**
13  * @author SimonsZhao
14  *将本地文件系统的文件通过java-API写入到HDFS文件
15  */
16 public class FileCopyFromLocal {
17     public static void main(String[] args) throws Exception {
18         String source="/usr/local/filecontent/demo";//linux中的文件路徑,demo存在一定数据
19         String destination="hdfs://neusoft-master:9000/data/test";//HDFS的路徑
20         InputStream in = new BufferedInputStream(new FileInputStream(source));
21         //HDFS读写的配置文件
22         Configuration conf = new Configuration();
23         //调用Filesystem的create方法返回的是FSDataOutputStream对象
24         //该对象不允许在文件中定位,因为HDFS只允许一个已打开的文件顺序写入或追加
25         FileSystem fs = FileSystem.get(URI.create(destination),conf);
26         OutputStream out = fs.create(new Path(destination));
27         IOUtils.copyBytes(in, out, 4096, true);
28     }
29 }

转载于:https://www.cnblogs.com/lianxuan1768/p/8136338.html

HDFS文件系统的JAVA-API操作(一)相关推荐

  1. Hadoop详解(四):HDFS shell操作和Java API操作

    1. HDFS环境准备 1.1 HDFS的格式化与启动 HDFS配置完之后就可以对其进行格式化操作.在NameNode所在机器上执行如下命令进行HDFS的格式化操作: hadoop namenode ...

  2. Windows下使用Java API操作HDFS的常用方法

    场景 Windows下配置Hadoop的Java开发环境以及用Java API操作HDFS: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...

  3. Windows下配置Hadoop的Java开发环境以及用Java API操作HDFS

    场景 HDFS的访问方式之HDFS shell的常用命令: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119351218 在上 ...

  4. HDFS Java API 操作

    文章目录 HDFS Java API操作 零.启动hadoop 一.HDFS常见类接口与方法 1.hdfs 常见类与接口 2.FileSystem 的常用方法 二.Java 创建Hadoop项目 1. ...

  5. Hadoop读书笔记(三)Java API操作HDFS

    Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的sh ...

  6. 使用 Java API 操作 HBase

    使用 Java API 操作 HBase 数据库,就类似HBase Shell,本质上一个是Java 代码,一个是Shell 命令.(hadoop 的文件系统莫不如此,可用Java API 的方式操作 ...

  7. kafka详解(JAVA API操作kafka、kafka原理、kafka监控)-step2

    1.JAVA API操作kafka  修改Windows的Host文件: 目录:C:\Windows\System32\drivers\etc (win10) 内容: 192.168.40.150 k ...

  8. Hbase 完全分布式模式的搭建、命令行操作、Java API操作

    追风赶月莫停留,平芜尽处是春山. 文章目录 追风赶月莫停留,平芜尽处是春山. 环境 Hbase 完全分布式模式的搭建 一.下载安装包,解压到合适位置: 二.配置相关的文件: 三.将Hbase复制到其他 ...

  9. 2021年大数据ZooKeeper(五):ZooKeeper Java API操作

    目录 ZooKeeper Java API操作 引入maven坐标 节点的操作 ZooKeeper Java API操作 这里操作Zookeeper的JavaAPI使用的是一套zookeeper客户端 ...

  10. Kafka系列三 java API操作

    使用java API操作kafka 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

最新文章

  1. 深度学习很难?一文读懂深度学习!
  2. 图的深度优先和广度优先算法(DFS递归与非递归)
  3. java执行jar中的main_浅谈java 执行jar包中的main方法
  4. 【Python3.6】之在Windows中安装Python3.6.1
  5. 两个链表的第一个公共结点-输入两个链表,找出它们的第一个公共结点。
  6. 一号信令是什么?1号信令和7号信令的区别介绍!
  7. c 如何操作php,thinkphp的c方法使用示例
  8. mysql 5.6加用户_Mysql 5.6添加修改用户名和密码的方法
  9. Ansible的简单使用
  10. [笔记]kubernetes 无法启动问题
  11. 【专栏】国内外物联网平台初探(篇二:阿里云物联网套件)
  12. 被罚 50 亿美元,Android 究竟招谁惹谁了?
  13. 交叉学习验证 西瓜书_机器学习:数据划分与交叉验证
  14. DevOps使用教程 华为云(13)接口测试 怎么编辑设置 批量测试 测试套件
  15. Windows 98 下载
  16. 计算机考试的话语,鼓励别人考试的句子
  17. 全网最全讲解最详细的PS教程(第一期:基础教程1.0)
  18. html5客户端页面,iphoneX 适配客户端H5页面的方法教程
  19. 超现实数surreal number学习
  20. 计算机学业水平测试模拟题,信息技术学业水平测试模拟题库.doc

热门文章

  1. java求根号函数_一般实系数四次方程的一种求根公式与根的判别法则及其推导...
  2. 项目疑难杂症记录(三):EditText获取不到焦点了?
  3. Direct3d 显示视频的一个问题
  4. 北京交大计算机学院院长,蔡伯根(北京交大教授)
  5. 虚拟ip是什么意思_轻松了解基于Ip,Mac,组播的Valn是什么意思,通信基础第17篇...
  6. 递归的使用不当 导致 压缩文件不能压缩二级目录
  7. 【Flink】 Flink JobManager HA 机制的扩展与实现
  8. 【Flink】FLink 通讯组件 Akka与Actor 模型
  9. 【flink】Flink 1.12.2 源码浅析 : Task 浅析
  10. 【MySQL】sql语句中exists和in有何区别?