当前位置:   article > 正文

Hdfs

hdfs

一、Hdfs

1、简介

分布式文件管理系统(hdfs)是一种来管理多台机器上文件的系统,是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。

2、特点

(1)通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。

(2)容错。即使系统中有某些节点宕机,整体来说系统仍然可以持续运作而不会有数据损失【通过副本机制实现】。

(3)分布式文件管理系统很多,hdfs只是其中一种,不合适小文件。

3、架构

hdfs架构

namenode

 

datanode

 

 4、hdfs-java操作

首先在linux中找到连接的配置文件,vim  /usr/local/soft/hadoop-2.7.6/etc/hadoop/core-site.xml 

(1)先在maven中导包

  1. dependency>
  2. <groupId>org.apache.hadoop</groupId>
  3. <artifactId>hadoop-client</artifactId>
  4. <version>2.7.6</version>
  5. </dependency>

(2)连接方式

  1. //连接hadoop
  2. Configuration configuration =new Configuration();
  3. configuration.set("fs.defaultFs","hdfs://master:9000"); //连接指定的hdfs,在配置文件中。
  4. FileSystem fs = FileSystem.get(configuration); //要抛个异常

(3)上传文件

  1. //连接hadoop
  2. Configuration configuration =new Configuration();
  3. configuration.set("fs.defaultFS","hdfs://master:9000"); //连接指定的hdfs,在配置文件中。
  4. FileSystem fs = FileSystem.get(configuration); //要抛个异常
  5. fs.copyFromLocalFile(false,true,new Path("D:\\上课资料\\python\\day53\\2022年4月1日\\代码\\HadoopCode15\\data\\sanguo.txt"),new Path("/"));
  6. //第一个判断是是否删除源文件,第二个判断是是否覆盖相同文件名的文件,第三个参数是本地文件地址,第四个参数是hdfs中的地址
  7. fs.close();

(4)设置副本数

(1)Linux的hadoop中配置文件/usr/local/soft/hadoop-2.7.6/etc/hadoop/hdfs-sitexml中设置副本数

(2)可在代码中加入以下内容可设置副本数

configuration.set("dfs.replication","3"); //设置副本数为三

(3)还可以在idea项目中文件resources中加入hadoop中的配置文件

设置副本数配置顺序:
     1.hdfs-site.xml(Hadoop集群自定义配置)  <  2.Resources中的 hdfs-site.xml  < 3.代码中Conf配置

(5)下载文件

fs.copyToLocalFile(false,newPath("/sanguo/sanguo2.txt"),newPath("D:\\CodeSpace\\HadoopCode15\\data"));

(6)修改文件名

 fs.rename(new Path("/sanguo/sanguo2.txt"),new Path("/sanguo/sanguo3.txt"));

(7)删除文件和文件夹

fs.delete(new Path("/sanguo/sanguo3.txt"), false);  //false表示是否是文件夹

(8)获取文件夹中所有文件的详细信息

  1. //迭代器遍历文件夹
  2. RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/re"), true);
  3. //true表示是否要递归
  4. while (files.hasNext()) {
  5. LocatedFileStatus fileStatus = files.next();
  6. // 获取每个block的位置信息
  7. BlockLocation[] blocks = fileStatus.getBlockLocations();
  8. // 获取block大小
  9. System.out.println(fileStatus.getBlockSize());
  10. // 获取路径
  11. System.out.println(fileStatus.getPath());
  12. // 获取所有者
  13. System.out.println(fileStatus.getOwner());
  14. for (BlockLocation block : blocks) {
  15. System.out.println("hosts:" + block.getHosts());
  16. System.out.println("name:" + block.getNames());
  17. System.out.println("length:" + block.getLength());
  18. }
  19. }

(9)是文件还是文件夹

  1. FileStatus[] fileStatuses = fs.listStatus(new Path("/re"));
  2. //for循环遍历整个文件夹,判断每个文件是文件还是文件夹
  3. for (FileStatus fileStatus : fileStatuses) {
  4. System.out.println(fileStatus.isFile());
  5. System.out.println(fileStatus.isDirectory());
  6. }

5、hdfs写流程

 6、读流程

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/853256
推荐阅读
相关标签
  

闽ICP备14008679号