HDFS的基础详解

2023-11-16

  1. 概念: HDFS是Hadoop Distribute File System 的简称(Hadoop 分布式文件系统), 是hadoop核心组件之一, 作为最底层的分布式存储服务而存在.分布式文件系统解决的问题就是大数据存储问题.

  2. 设计目标

    1. 硬件故障是常态: 故障检测和自动快速回复是HDFS的核心架构目标
    2. HDFS主要是以流式读取数据, 更注重数据访问的高吞吐量.被设计成批量的处理
    3. HDFS支持大文件
    4. HDFS对文件的要求是一次写入多次读取
    
  3. HDFS重要特性

    1. 首先是一个文件系统, 其次是分布式

    2. HDFS采用的是主从架构(master/slave), HDFS集群是有一个 Namenode 和一定数目的 Datanode 组成。Namenode 是 HDFS 集群主节点,Datanode 是 HDFS 集群从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。

    3. HDFS中的文件是在物理上分块存储的, 默认块的大小是128M

    4. 名字空间(NameSpace), Namenode负责维护文件系统的名字空间.

    5. 目录结构及文件分块位置信息叫做元数据, Namenode负责维护整合HDFS系统的目录树结构以及每一个文件所对应的 block 块信息(block 的id,及所在的 datanode 服务器)。

    6. DataNode文件各个block的具体存储管理有DataNode节点承担, 每一个block都可以咋子多个datanode上Datanode 需要定时向 Namenode 汇报自己持有的 block信息。(默认副本数是3)

    7. 为了容错, 文件的所有block都有副本.

  4. HDFS的基本操作

    1. shell命令

      hadoop fs或者(HDFS dfs)
      	-ls 查看指定路径的当前目录结构
      	-du 统计目录下个文件大小
      	-count 统计目录下文件数量
      	-mv 移动
      	-rm 删除
      	-put 上传文件
      	-text 查看文件内容
      	-mkdir 创建文件夹
      	-touchz 创建空白文件
      	-tail 查看文件尾部信息
      	-chmod 修改权限
      	-appendToFile 追加一个文件到已存在的文件末尾
      	-copyFromLocal 熊本地文件系统拷贝到HDFS路径
      	-copyTolocal 从HDFS拷贝到本地
      	-getmerge 合并下载多个文件
      
  5. HDFS的结构

    NameNode : 分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等 .NameNode会将系统的MetaData存储在内存中

    SecondaryNameNode: 合并fdimage和fsedits log, 然后在发送给NameNode

    DataNode: 文件存储的基本单元, 将Block存储在本地文件系统中

    Client: 就是需要获取分布式文件系统的文件的应用程序

  6. 限额操作

    -setQuota 设置最多上传文件
    -clrQuota 清除文件数量限额
    hdfs dfsadmin -setQuota 2 文件名
    空间大小限额
    -setSpaceQuota 限制空间大小
    -clrSpaceQuota 清除空间限额
    
  7. HDFS基本原理

    1. Namenode是HDFS的核心, 也称为master, 仅仅存储HDFS的元数据, 不存储实际数据, 数据本身存储在DataNode中.并不支持持久化存储文件中各个快所在的DataNode的位置信息 ,NameNode 是 Hadoop 集群中的单点故障。
    2. DataNode负责将实际的数据存储在HDFS中, 也称为Slave.DataNode 会定期(默认是 3 秒)向NameNode 发送心跳,如果 NameNode 长时间没有收到 DataNode 发送的心跳,NameNode 就会认为该DataNode 失效. block 汇报时间间隔默认6小时.
  8. HDFS工作机制

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

HDFS的读数据流程:

  1. ​ 客户端向NameNode请求上传文件, NameNode检查目标文件是否存在.

    1. NameNode返回可以上传

    2. 客户端请求第一个block上传到那几个DataNode.

    3. NameNode返回3个可用的DataNode节点的位置信息

    4. 客户端请求dn1上传数据, dn1收到请求会继续调用dn2, 然后dn2调用dn3, 将这个管道建立完成

    5. dn1, dn2,dn3 逐级返回响应管道建立完成,

    6. 客户端开始上传第一个block(先从磁盘读取数据放倒一个本地内存缓存), 以packet为单位, 依次传递给dn中

    7. 当第一个block传输完成, 客户端再次请求上传第二个block重复执行3-7步.

      注意: 当第一个block上传完毕, 即显示上传成功.

HDFS的写数据流程:

    1. 客户端向NameNode请求下载文件, NameNode通过查询元数据, 找到所在的DataNode地址,

    2. 挑选一台DataNode(就近原则, 然后随机), 请求读取数据

    3. DataNode开始传输是数据给客户端(从磁盘里读取数据放入流, 以packet为单位校验)

    4. 客户端以packet为单位接收, 现在本地缓存, 然后写入目标文件.

  1. HDFS的其他功能

    1. 集群内部 文件拷贝 scp

      scp -r 文件

    2. 跨集群之间的数据拷贝distcp

    3. Archive 档案

      HDFS不擅长存储小文件, 每个文件的最少一个block.每个block的元数据都会存在Namenode占用内存. Hadoop Achives 可以有效处理这个问题, 他可以把多个文件归档成一个文件. (Achives文件的扩展名 *.har)

      例如: hadoop archive -archiveName test.har -p /input /outputdir

      创建Archives本质是运行一个MR任务.不支持压缩. 一旦创建无法修改.

  2. HDFS高阶

    1. 元数据的管理

      fsimage镜像文件: 是元数据的一个持久化的检查点, 包含Hadoop的文件中所有的目录和文件元数据信息.
      edits编辑日志: 存放的是Hadoop文件系统的所有更改操作日志.
      fsimage和edits log的合并

      将文件系统个元数据操作分开操作,是为了提升内存的处理效率。如果不分开处理,即所有的写操作均记录在一个文件中,比如,fsimage中,那么每个操作都会对这个文件进行修改,因为这个文件可能会很大,所以每次进行写操作的时候就会很慢,随着fsimage越来越大,速度便会越来越低。

      引入来checkpoint机制, 定时的把edits和fsimage进行合并成新的fsimage.ckpt, 然后在post给NameNode为新的fsimage.
      checkpoint的默认时间间隔就是1小时.
      NameNode宕机, 可能会有一段时间的fsimage缺失.
      下图就是checkpoint的过程: (secondary namenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge)
      在这里插入图片描述在这里插入图片描述

      遇到的问题: 单点故障和脑裂问题

      1. 单点故障 (NameNode出现故障) -> 设置HA模式, 会有两个NameNode(active, standby)

        active NameNode出现问题, StandBy NameNode监听到之后, 会自动变成Active NameNode.

      2. 脑裂 -> 脑裂通常发生在主从namenode切换时,由于ActiveNameNode的网络延迟、设备故障等问题,另一个NameNode会认为活跃的NameNode成为失效状态,此时StandbyNameNode会转换成活跃状态,此时集群中将会出现两个活跃的namenode .

        解决: 使用隔离机制,通过调用活跃节点中的隔离方法,让其主动转换为standby状态,

    2. HDFS的限额操作

      HDFS文件限额操作
         以文件大小或者文件个数来限制在某个目录下上传的文件数量或者文件内容总量
      
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDFS的基础详解 的相关文章

随机推荐

  • C/C++ C++20 格式化库 std::format

    说明 文本格式化库提供 printf 函数族的安全且可扩展的替用品 有意使之补充既存的 C I O 流库并复用其基础设施 例如对用户定义类型重载的流插入运算符 头文件 include
  • npm ERR! missing script dev

    刚刚npm install之后执行npm run dev 出现的报错信息npm ERR missing script dev 1 一种可能时vue init webpack的时候多建了一层文件夹 然后运行的时候没有找到package jso
  • MySQL--udf提权

    udf提权 udf user defined function 即 用户自定义函数 是通过添加新函数 对MYSQL的功能进行扩充 如何获得udf文件 将文件放到哪才能让mysql承认这个函数 函数功能 为什么这东西能提权 自定义函数指令是直
  • Netty-UDP协议

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 实现一个UDP应用关键的点 1 和tcp的不同 udp没有接收的说法 所以即使是接收端 也使用Bootstrap 2 指定channel为NioDatagramChanne
  • 汉字编码输入法综述

    2 汉字编码输入法综述 作者 戴石麟 sbxlm 126 com 本章打算分基础工作 理论研究和实用系统三个方面来对汉字编码输入技术的历史和现状进行综合评述 最后指出现有技术中存在的问题并预测今后技术的发展趋势 2 1基础工作 1974年8
  • java 导入自定义类

    eclipse导入很容易 昨天上课学了一下用记事本写java 导入自定义类 这就麻烦了 代码贴一下 方便操作 package tom jiafei public class SquareEquation double a b c doubl
  • 【SpringMVC】Jrebel 插件实现热部署与文件上传

    目录 一 JRebel 1 1 Jrebel介绍 1 2 Jrebel插件下载 1 3 Jrebel服务下载并启动 1 4 在线生成GUID 1 5 JRebel激活 1 6 相关设置 注意 二 文件上传 下载 2 1 导入pom依赖 2
  • MATLAB 拟合神经网络—— fitnet

    建立神经网络 语法 net fitnet hiddenSizes trainFcn hiddenSize 为隐藏层数 是一个行向量 分别表示从左到右的隐藏层神经元数 trainFcn 为训练函数 如下表所示 名称 函数 trainlm Le
  • go 进阶 go-zero相关: 三. go-zero 微服务基础示例

    目录 一 go zero 微服务基础 安装 ETCD 1 docker 安装运行etcd 2 windows 安装 etcd 二 go zero使用goctl命令创建一个普通的服务 三 go zero使用goctl命令创建一个rpc服务 1
  • python批量下载文件并压缩后上传到owncloud

    目录 1 首先获的一个保存url的文件 2 下载文件到服务器 3 将文件上传到owncloud 3 1 上传单个文件 3 2 上传多个文件 大文件拆分为小文件 推荐 摘要 笔者想下载东西到本地 直接下载速度超慢 一共需要下载1500张图 下
  • 每天进步一点点【图的深度优先遍历(DFS)】

    图是一种数据结构 其中节点可以具有零个或多个相邻元素 两个节点之间的连接称为边 节点也可以称为顶点 图分为三种 无向图 有向图 带权图 图的表示方式有两种 二维数组表示 邻接矩阵 链表表示 邻接表 邻接矩阵 邻接矩阵是表示图形中顶点之间相邻
  • 局域网使用kubeadm安装高可用k8s集群

    主机列表 ip 主机名 节点 cpu 内存 192 168 23 100 k8smaster01 master 2核 2G 192 168 23 101 k8smaster02 node 2核 2G 192 168 23 102 k8sma
  • 第三方支付自建商户池体系

    三方支付自建商户池体系通常指的是第三方支付机构自己搭建的商户池管理系统 商户池是指该支付机构所拥有的所有商户账户的集合 在支付领域 商户池的建立对于支付机构来说非常重要 它可以帮助支付机构更有效地管理商户 风控和支付流程 以下是自建商户池体
  • Animator的基本用法

    这里仅仅介绍Animator的一些基本的用法 说到Animator 最重要的最常用的的就是ObjectAnimator类 因为这个类可以对任意View的任意属性进行操作 首先以ImageView为例 以下所有的操作都针对ImageView
  • Node.js web3.js编译、部署智能合约

    Node js web3 js编译 部署智能合约 供参考脚本 https github com Saturday24 Smart Contracts Script 1 编译脚本 a install web3 solc fs path b 编
  • linux查看所有的进程及端口,linux查看所有进程和端口

    Linux下查看一个进程占用了哪个端口的方法 时候需要在Linux下查看一个进程占用了那个端口 但是只知道进程大致的名称 比如要查看hadoop的namenode在哪个端口上运行 以便在eclipse中连接 首先用ps命令查看进程的id 复
  • 校招算法题实在不会做,有没有关系?

    文章目录 前言 一 校招 二 时间复杂度 1 单层循环 2 双层循环 三 空间复杂度 四 数据结构 五 校招算法题实在不会做 有没有关系 六 英雄算法集训 前言 英雄算法联盟八月集训 已经接近尾声 九月算法集训将于 09月01日 正式开始
  • Mock 模拟测试简介及 Mockito 使用入门

    Mock 是什么 mock 测试就是在测试过程中 对于某些不容易构造或者不容易获取的对象 用一个虚拟的对象来创建以便测试的测试方法 这个虚拟的对象就是mock对象 mock对象就是真实对象在调试期间的代替品 简单的看一张图 我们在测试类 A
  • Java锁机制,synchronized和lock详解。

    Java锁机制详解 1 java各种锁详解 1 1 公平锁 vs 非公平锁 公平锁 是指多个线程按照申请锁的顺序来获取锁 线程直接进入队列中排队 队列中的第一个线程才能获得锁 类似排队打饭 先来后到 非公平锁 是指多个线程获取锁的顺序并不是
  • HDFS的基础详解

    概念 HDFS是Hadoop Distribute File System 的简称 Hadoop 分布式文件系统 是hadoop核心组件之一 作为最底层的分布式存储服务而存在 分布式文件系统解决的问题就是大数据存储问题 设计目标 1 硬件故