首页 > 其他分享 >Hadoop生态圈(三)- HDFS(分布式文件系统)

Hadoop生态圈(三)- HDFS(分布式文件系统)

时间:2024-08-28 15:25:58浏览次数:15  
标签:HDFS 文件 hadoop DataNode NameNode 分布式文件系统 客户端 生态圈

目录

设计目标

特性

HDFS基本原理

NameNode概述

DataNode概述

HDSF读写操作

HDFS写数据流程

HDFS读数据流程

HDFS元数据管理

HDFS shell


HDFS解决的是海量存储的问题

设计目标:

  1. 故障是常态,因此故障的检测和自动快速恢复是核心

  2. 适合批量处理,注重数据访问的高吞吐量。一旦写入不需要修改

  3. 支持大文件

  4. 文件一旦创建、写入、关闭之后就不需要修改

  5. 移动计算的代价比移动数据的代价

  6. 可移植性强。其他软件平台或异构硬件

特性:

  • NameNode负责管理整个文件系统元数据;DataNode负责管理具体文件数据块存储;Secondary NameNode协助NameNode进行元数据的备份。

  • HDFS即是一个文件系统又是分布式。

  • 主从架构(一个namenode和多个datanode),Namenode是HDFS集群主节点,Datanode是HDFS集群从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。

  • 文件是以128M块(block)存储,以64K的数据包传送。hadoop 1.X是64M

  • 我们把目录结构及文件分块位置信息叫做元数据。元数据是关于数据的信息,包括文件名、文件大小、文件权限等。Namenode通过创建元数据本地存储目录和一些初始化的元数据相关文件来管理和维护这些信息。

  • datanode需要定时向namenode汇报自己的block信息时间间隔默认为6小时,会定期发送心跳,默认为3秒。

  • 副本数量也可以通过参数设置dfs.replication,默认是3。

  • namenode是集群的单点故障,坏了就不可运行

HDFS基本原理

NameNode概述

  1. NameNode是HDFS的核心。
  2. NameNode也称为Master。
  3. NameNode仅存储HDFS的元数据:文件系统中所有文件的目录树,并跟踪整个集群中的文件。
  4. NameNode不存储实际数据或数据集。数据本身实际存储在DataNodes中。
  5. NameNode知道HDFS中任何给定文件的块列表及其位置。使用此信息NameNode知道如何从块中构建文件。
  6. NameNode并不持久化存储每个文件中各个块所在的DataNode的位置信息,这些信息会在系统启动时从数据节点重建。
  7. NameNode对于HDFS至关重要,当NameNode关闭时,HDFS / Hadoop集群无法访问。
  8. NameNode是Hadoop集群中的单点故障。
  9. NameNode所在机器通常会配置有大量内存(RAM)。

DataNode概述

  1. DataNode负责将实际数据存储在HDFS中。
  2. DataNode也称为Slave。
  3. NameNode和DataNode会保持不断通信。
  4. DataNode启动时,它将自己发布到NameNode并汇报自己负责持有的块列表。
  5. 当某个DataNode关闭时,它不会影响数据或群集的可用性。NameNode将安排由其他DataNode管理的块进行副本复制。
  6. DataNode所在机器通常配置有大量的硬盘空间。因为实际数据存储在DataNode中。
  7. DataNode会定期(dfs.heartbeat.interval配置项配置,默认是3秒)向NameNode发送心跳,如果NameNode长时间没有接受到DataNode发送的心跳, NameNode就会认为该DataNode失效。
  8. block汇报时间间隔取参数dfs.blockreport.intervalMsec,参数未配置的话默认为6小时.

HDSF读写操作

HDFS写数据流程

  1. 首先客户端向namenode发送写数据的请求,namenode接收到请求,需要判断是否有权限和目标文件是否存在,返回客户端是否可以上传,

  2. 接着客户端会向namenode询问block传输到哪些datanode上,namenode根据副本机制(一般默认为3副本策略)、网络拓扑关系、机架感知原理来进行分配。

  3. 客户端请求第一台上传数据,第一台收到请求继续调用第二台,以此类推,形成一个管道,后逐级返回客户端。

  4. 此时客户端向第一台上传block块,以64k的包为单位,第一台传给第二台,以此类推

  5. 数据被分割成数据包在管道上依次传输,在反方向上,逐个发送ack校验,最终由第一个datanode将ack发送给客户端

  6. 当一个block块传输完毕后,客户端会再向namenode请求下一个block的存放位置,直到所有的块传输完毕。

HDFS读数据流程

  1. 客户端向namenode发送请求,确定block在datanode上的位置。

  2. namenode接收到请求后会判断是否有读数据的权限,再根据情况来返回部分或者全部的block列表且返回datanode地址。

  3. 这些返回的datanode地址,会根据网络拓扑关系得出datanode和客户端的距离,然后进行排序。

  4. 客户端会选择靠前的datanode来读取数据,如果客户端本身就是datanode,那么将从本地直接来获取数据。

  5. 当读完数据列表后,若文件读取还没有结束,客户端会继续向namenode获取下一个block列表和datanode地址,直到所有数据读取完毕。

  6. 最后将读取的数据进行排序,形成最终文件。

HDFS元数据管理

内存元数据(内存)

元数据文件(磁盘):fsimage-存放大文件、edits-存放最近的记录

checkpoint:当edits到一定程度,就会和fsimage一起被secondarynamenode合并为一个新的fsimage文件中。

fsimage文件其实是Hadoop文件系统元数据的一个永久性的检查点,其中包含Hadoop文件系统中的所有目录和文件idnode的序列化信息;

fsimage包含Hadoop文件系统中的所有目录和文件idnode的序列化信息;对于文件来说,包含的信息有修改时间、访问时间、块大小和组成一个文件块信息等;而对于目录来说,包含的信息主要有修改时间、访问控制权限等信息。

edits文件存放的是Hadoop文件系统的所有更新操作的路径,文件系统客户端执行的所以写操作首先会被记录到edits文件中。

NameNode起来之后,HDFS中的更新操作会重新写到edits文件中,因为fsimage文件一般都很大(GB级别的很常见),如果所有的更新操作都往fsimage文件中添加,这样会导致系统运行的十分缓慢,但是如果往edits文件里面写就不会这样,每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新。如果一个文件比较大,使得写操作需要向多台机器进行操作,只有当所有的写操作都执行完成之后,写操作才会返回成功,这样的好处是任何的操作都不会因为机器的故障而导致元数据的不同步。

HDFS shell

  1. -ls:hadoop fs -ls /user/hadoop/file1 (这是查看hdfs的文件信息,是http://node1:9870那个页面上的目录)

  2. -mkdir:hadoop fs -mkdir –p /user/hadoop/dir1

  3. -put:hadoop fs -put -f localfile1 localfile2 /user/hadoop/hadoopdir (单个src或多个srcs从本地文件系统复制到目标文件系统hdfs上。)

    1. -p:保留访问和修改时间,所有权和权限。

    2. -f:覆盖目的地(如果已经存在)

  4. -get:hadoop fs -get hdfs://host:port/user/hadoop/file localfile(将hdfs上的文件下载到本地)

  5. -appendToFilehadoop fs -appendToFile localfile /hadoop/hadoopfile (追加一个文件到已经存在的文件末尾)

  6. -cat :hadoop fs -cat /hadoop/hadoopfile (显示hdfs上某文件的内容)

  7. -getmerge :hadoop fs -getmerge /aaa/log.* ./log.sum(将目录下的多个文件合并)

  8. -chmod、-chown、-cp、-mv、-rm

标签:HDFS,文件,hadoop,DataNode,NameNode,分布式文件系统,客户端,生态圈
From: https://blog.csdn.net/weixin_58305115/article/details/141634292

相关文章

  • hadoop生态圈(二)-zookeeper(分布式小文件存储系统)
    目录zookeeper特性集群角色zookeepershell创建节点读取节点更新节点删除节点对节点增加限制其他命令 zookeeper数据模型数据结构图节点类型节点属性监听机制Watch机制特点zookeeper特性全局数据一致:集群中每个服务器保存一份相同的数据副本,client无论连......
  • HDFS的编程
    一、HDFS原理HDFS(HadoopDistributedFileSystem)是hadoop生态系统的一个重要组成部分,是hadoop中的的存储组件,在整个Hadoop中的地位非同一般,是最基础的一部分,因为它涉及到数据存储,MapReduce等计算模型都要依赖于存储在HDFS中的数据。HDFS是一个分布式文件系统,以流式数据访问模......
  • Hadoop 中的大数据技术:HDFS(1)
    Hadoop中的大数据技术:HDFS(1)大家好!在为您带来精彩的技术干货之前,先给您推荐一个我精心运营的公众号[大数据深度洞察]。在这里,您将获取更多独家的技术分享、实用案例以及行业前沿资讯。亲爱的读者们,当您准备开启这篇充满价值的技术文章之旅时,不妨先关注我的公众号[大数据深......
  • Hadoop 中的大数据技术:HDFS(2)
    Hadoop中的大数据技术:HDFS(2)续上一篇Hadoop中的大数据技术:HDFS(1)大家好!在为您带来精彩的技术干货之前,先给您推荐一个我精心运营的公众号[大数据深度洞察]。在这里,您将获取更多独家的技术分享、实用案例以及行业前沿资讯。亲爱的读者们,当您准备开启这篇充满价值的技术文章......
  • 统计HDFS中文件数量、大小、以及在某范围大小的文件数量
    说明:统计HDFS文件数量大小,小于20M文件数量1、HDFS相关命令#统计文件大小hdfsdfs-du-h/#统计文件数量,返回的数据是目录个数,文件个数,文件总计大小,输入路径hdfsdfs-count/#统计所有文件的信息,过滤文件夹,只统计文件,因为使用-ls-R之后,可以看到文件是”-“......
  • Hadoop:java使用HDFS API实现基本操作工具类
    1、引入库<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.apache.hadoop</......
  • proxmox ve 部署双节点HA集群及glusterfs分布式文件系统
    分布式存储的作用加入分布式存储的目的:主要是为了对数据进行保护避免因一台服务器磁盘的损坏,导致数据丢失不能正常使用。 参考文档:https://gowinder.work/post/proxmox-ve-%E9%83%A8%E7%BD%B2%E5%8F%8C%E8%8A%82%E7%82%B9%E9%9B%86%E7%BE%A4%E5%8F%8Aglusterfs%E5%88%86%E5%B8......
  • 0CTF/TCTF 2023 OLAPInfra Nashorn RCE + HDFS UDF RCE
    前置知识ClickHouse:是一个开源的列式数据库管理系统clickhouse-jdbc-bridge:clickhouse数据库和jdbc交互的工具HDFS(HadoopDistributedFileSystem):专为大数据存储和处理而设计。审计<?phperror_reporting(E_ALL^E_DEPRECATED);require__DIR__.'/../vendor/autol......
  • HDFS集群
    一、上传hadoop安装包到hdp-01集群任一节点(master) tar-zxvf软件包-C指定安装文件夹二、修改配置文件1.指定Hadoop的默认文件系统为hdfs2.指定hdfs的namenode节点为哪台机器3.指定namenode软件存储元数据的本地目录4.指定datanode软件存放文件块的本地目录三、进入......
  • windows hbase连接工具 hbase连接数过多, yarn job HBase hdfs zookeper
    windowshbase连接工具hbase连接数过多##1.ZK连接过多1)查看ip连接数前十  登录后复制netstat-na|grep2181|awk'{print$5}'|awk-F:'{print$1}'|sort|uniq-c|sort-rn|head-n101.##2.补数操作登录后复制hbaseorg.apache.hadoop.hbase.mapreduce.Co......