2-HDFS常用命令及上传下载流程

HDFS

NameNode

安全模式(safemode)

  1. 当NameNode被重启的时候,自动进入安全模式

  2. 在安全模式中,NameNode首先会触发edits_inprogress文件的滚动。滚动完成之后,更新fsimage文件

  3. 更新完成之后,NameNode会将fsimage文件中的元数据加载到内存中。加载完成之后,NameNode等待DataNode的心跳

  4. 如果NameNode没有收到DataNode的心跳,那么此时NameNode就会认为这个DataNode已经lost,那么此时NameNode会将这个DataNode上的数据备份到其他的节点上来保证副本数量;如果NameNode收到了DataNode的心跳,那么会对这个DataNode上的Block存储情况进行校验。如果校验成功,那么NameNode自动退出安全模式;如果校验失败,那么NameNode会试图恢复这个DataNode上的数据(每个DataNode的全部数据都会在其他DataNode上有备份),恢复完成之后,会重新校验;校验成功之后,才会退出安全模式

  5. 在安全模式下,HDFS只提供读(下载)操作,不提供写(上传)操作

  6. 如果在合理的时间内,HDFS依然没有退出安全模式,那么说明数据已经产生了不可逆的损坏或者丢失(这个数据的所有副本都损坏或者丢失)

  7. 安全模式的命令

    命令解释
    hdfs dfsadmin -safemode enter进入安全模式
    hdfs dfsadmin -safemode leave退出安全模式
    hdfs dfsadmin -safemode get获取安全模式的状态

DataNode

  1. DataNode是HDFS的从进程,负责存储数据。DataNode会将数据以Block形式落地到本地的磁盘上
  2. Block在磁盘上的存储位置由dfs.datanode.data.dir属性来决定的,默认值是file://${hadoop.tmp.dir}/dfs/data,由hadoop.tmp.dir属性来决定
  3. DataNode会为每一个Block生成一个.meta文件,.meta文件实际上是这个Block的校验文件
  4. DataNode会通过心跳向NameNode注册信息
  5. DataNode的状态:预服役、服役、预退役、退役

SecondaryNameNode

  1. SecondaryNameNode不是NameNode的备份,而是辅助进程,用于辅助NameNode完成edits_inprogress文件的滚动和fsimage文件的更新

    1. 如果HDFS集群中存在SecondaryNameNode,那么fsimage文件的更新是由SecondaryNameNode来完成
    2. 如果HDFS集群中不存在SecondaryNameNode,那么fsimage文件的更新是由NameNode自己来完成
  2. 因此,SecondaryNameNode不是必须的进程。实际过程中,NameNode和SecondaryNameNode不是在同一个节点上

  3. fsimage文件的更新过程

    fsimage更新
  4. 由于HDFS集群的限制,HDFS集群支持两种模式

    1. 1个NameNode+1个SecondayNameNode+n个DataNode
    2. n个NameNode+n个DataNode

    考虑到NameNode作为核心节点,必须对NameNode来进行备份。所以实际过程中,采用上述的第二种结构

机架感知策略

  1. 在HDFS集群中,机架指的是逻辑机架。默认情况下,机架感知策略是不开启的

  2. 逻辑机架:通过一个映射(map)来定义主机和机架之间的关联。将主机名或者IP作为键,将机架作为值,只要值相同,就表示不同的服务器是位于相同的机架上的

    # hadoop01~hadoop03都是属于机架r1,hadoop04~05都是属于机架r2
    rack = {"hadoop01":"r1","hadoop02":"r1","hadoop03":"r1","hadoop04":"r2","hadoop05":"r2"
    }
    
  3. 如果需要开启机架感知策略,那么需要在hadoop-site.xml文件中配置

    <property><name>net.topology.script.file.name</name><value>脚本的路径</value>
    </property>
    

    实际过程中,一般是通过shell或者python来定义脚本文件

  4. 理论上而言,可以将同一个物理机架上的节点配置到不同的逻辑机架上,也可以将不同物理机架上的节点配置到同一个逻辑机架上

副本放置策略

  1. HDFS为了保证数据的可靠性,默认采用的是多副本策略。默认情况下,每一个Block对应了3个副本。副本数量可以通过dfs.replication属性来调节
  2. 在HDFS中,如果不开启机架感知策略,副本是放在相对空闲的节点上;如果开启了机架感知策略,那么对应的会开启副本放置策略
    1. 第一个副本:如果是集群内部上传,谁上传就放在谁身上;如果是集群外部上传,谁空闲就放在谁身上
    2. 第二个副本:放在和第一个副本相同机架的不同节点上
    3. 第三个副本:放在和第二个副本不同机架的节点上
    4. 更多副本:谁空闲放在谁身上

命令和操作

启动命令

命令解释
start-dfs.sh启动HDFS
stop-dfs.sh关闭HDFS
hdfs --daemon start namenode启动NameNode
hdfs --daemon start datanode启动DataNode
hdfs --daemon start secondarynamenode启动SecondaryNameNode
hdfs --daemon stop namenode关闭NameNode
hdfs --daemon stop datanode关闭DataNode
hdfs --daemon stop secondarynamenode关闭SecondaryNameNode

基本命令

命令解释
hadoop fs -put a.txt /
或者
hadoop fs -copyFromLocal a.txt / (过时)
将a.txt上传到HDFS的根目录下
hadoop fs -ls / 查看子文件和子目录
hadoop fs -ls -R /递归查看
hadoop fs -cat /a.txt查看文件内容
hadoop fs -appendToFile b.txt /a.txt将本地的b.txt的内容追加到HDFS的a.txt中
hadoop fs -checksum /a.txt计算校验和(就是获取这个文件的md5计算结果)
hadoop fs -chown tom /a.txt更改文件所属用户
hadoop fs -chmod 777 /a.txt更改文件的权限
hadoop fs -chgrp test /a.txt更改文件的用户组
hadoop fs -copyToLocal /a.txt /opt/test.txt
或者
hadoop fs -get /a.txt /opt/test.txt
下载文件
hadoop fs -cp /a.txt /b.txt复制文件
hadoop fs -mv /a.txt /test.txt剪切或者重命名文件
hadoop fs -df /查看HDFS的容量
hadoop fs -du /b.txt查看文件的大小
hadoop fs -setrep 3 /b.txt(上传文件时指定副本数量,这个参数优先级高于默认的副本数量)指定副本数量

回收站机制

  1. 在HDFS中,回收站机制默认是不开启的,即删除命令会立即生效,无法撤销

  2. 如果需要开启回收站机制,那么需要在core-site.xml文件中做配置

    <!-- 指定文件在回收站中临时的存放时间 -->
    <!-- 单位默认是min -->
    <!-- 如果不指定,默认情况下值为0,即删除要立即生效 -->
    <!-- 如果超过指定时间,没有将文件从回收站中移出来,那么这个文件就会被清理掉 -->
    <property><name>fs.trash.interval</name><value>1440</value>
    </property>
    
  3. 回收站的默认路径是:/user/${user.name}/.Trash/Current/

  4. 如果需要将文件从回收站中挪出来,那么使用hadoop fs -mv命令即可

流程

删除流程

  1. 客户端发起RPC请求到NameNode,请求删除指定文件
  2. NameNode收到请求之后,会进行校验
    1. 校验是否有写入权限 - AccessControlException
    2. 校验是否有指定文件 - FileNotFoundException
  3. 如果校验失败,那么会报错;如果校验成功,那么NameNode修改元数据;修改完元数据之后,NameNode会给客户端返回一个ACK信号表示删除成功!注意,此时文件并没有真正从HDFS上移除,仅仅是修改了元数据!
  4. NameNode会等待DataNode的心跳,收到DataNode的心跳之后,会在心跳响应中要求DataNode删除对应的Block
  5. DataNode收到心跳响应之后,才回去磁盘上删除这个文件对应的Block。注意,此时,文件才真正从HDFS上移除!

写入(上传)流程

  1. 客户端通过DistributedFileSystem向NameNode发送RPC请求,请求上传指定文件

  2. NameNode收到请求之后,会进行校验

    1. 校验是否有写入权限 - AccessControlException
    2. 校验是否有同名文件 - FileAlreadyExistException
  3. 如果校验失败,那么直接报错;如果校验成功,NameNode会给客户端返回一个信号表示允许上传

  4. 客户端在收到信号之后,会再次给NameNode发送请求,请求获取第一个Block的存储地址

  5. NameNode收到请求之后,会查询元数据,根据副本放置策略,将这个Block的存储位置放入队列中返回给客户端。存储位置其实就是DataNode的主机名/IP,默认情况下,返回的是3个地址(副本数量默认为3)

  6. 客户端收到队列之后,会从队列中将地址全部取出,取出之后,会从中选择一个较近(网络拓扑距离的远近)的节点,通过FSDataOutputStream来请求建立pipeline(管道),来写入当前Block的第一个副本;第一个副本写完之后,这个副本所在的节点会通过pipeline将这个Block的第二个副本写入;第二个副本写完之后,这个副本所在的节点会通过管道来写入下一个节点

  7. 当这个Block的最后一个副本写完之后,会给上一个副本所在的节点返回一个ACK信号表示成功;上一个副本所在的节点收到ACK之后,会继续往前返回ACK,直到返回给客户端

  8. 当客户端收到ACK之后,会再次给NameNode发送请求,请求获取下一个Block的存储位置,重复5.6.7三个步骤,直到所有的Block全部写完

  9. 当所有的Block全部写完之后,客户端会给NameNode发送一个结束信号(关流)。NameNode收到信号之后,会关闭文件。文件一旦关闭就不能修改!

    上传流程

读取(下载)流程

  1. 客户端通过DistributedFileSystem向NameNode发送RPC请求,请求读取指定文件

  2. NameNode收到请求之后,会进行校验

    1. 校验是否有读取权限 - AccessControlException
    2. 校验是否有指定文件 - FileNotFoundException
  3. 如果校验失败,则直接报错;如果校验成功, 那么NameNode会给客户端返回一个信号表示允许读取

  4. 客户端收到信号之后,会再次给NameNode发送请求,请求获取第一个Block的存储位置

  5. NameNode收到请求之后,会查询元数据,将这个Block的存储位置以及Block的校验信息放入队列中返回给客户端

  6. 客户端收到队列之后,会将地址从队列中全部取出,从中选择一个较近(网络拓扑距离较近)的节点,通过FSDataInputStream来读取这个Block

  7. 读取完成之后,客户端会对这个Block进行一次checkSum校验。如果校验失败,那么客户端会从剩余的地址中重新选取地址重新读取重新校验;如果校验成功,那么客户端会再次给NameNode发送请求,请求获取下一个Block的位置,重复5.6.7,直到所有的Block全部读取完毕

  8. 当所有的Block都读取完之后,客户端会给NameNode发送一个结束信号

    读取流程

特点

  1. 支持超大文件。HDFS会对文件进行切块处理,所以集群规模越大,能够存储的文件就越大
  2. 能够快速的应对和检测故障。HDFS通过心跳来管理DataNode,通过心跳可以确定DataNode的状态以及Block的状态
  3. 高容错性。HDFS对文件进行备份,从而保证不会因为一个节点宕机就产生数据丢失
  4. 可以在相对廉价的机器上来进行横向扩展
  5. 不支持低延迟数据访问。HDFS的设计初衷就是为了存储超大文件,因此考虑的是数据的吞吐量而不是响应速度
  6. 不建议存储小文件。每一个小文件对应的会产生一条元数据,小文件多了,就意味着元数据会增多,那么会导致内存占用变大,同时会导致查询效率降低
  7. 简化的一致性模型。HDFS支持一次写入多次读取,不支持修改但是支持追加写入
  8. 不支持事务或者支持弱事务。这就意味着在HDFS中,即使数据写错也不能修改
  9. 存储的超大文件允许小部分数据出错。HDFS通常是TB级的日志级别,然后对其数据分析。其中几MB的数据出错并不会影响最终的分析结果。

补充

RPC

  1. RPC(Remote Procedure Call),远程过程调用,指的是允许程序员在一个节点上远程调用另一个节点上的程序或者功能,而不需要显式的实现这个功能
  2. RPC是Nelson在1990年的论文中提出的理论,现在RPC已经成为了分布式中最重要的通讯方式
  3. 存储的超大文件允许小部分数据出错。HDFS通常是TB级的日志级别,然后对其数据分析。其中几MB的数据出错并不会影响最终的分析结果。

补充

RPC

  1. RPC(Remote Procedure Call),远程过程调用,指的是允许程序员在一个节点上远程调用另一个节点上的程序或者功能,而不需要显式的实现这个功能
  2. RPC是Nelson在1990年的论文中提出的理论,现在RPC已经成为了分布式中最重要的通讯方式
  3. stub(存根):保证两端能够调用的函数是相同的,在Java中通常使用接口来实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于java+SpringBoot+Vue的网上书城管理系统设计与实现

基于javaSpringBootVue的网上书城管理系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含&#xff1a; 网上书城管理系统是一个基于互联网的在线购书平台&#…

文献学习-23-MRM:用于遗传学医学图像预训练的掩码关系建模

MRM: Masked Relation Modeling for Medical Image Pre-Training with Genetics Authors: Qiushi Yang, Wuyang Li, Baopu Li, Yixuan Yuan Source: ICCV 2023 Abstract: 关于自动多模态医疗诊断的 ODERN 深度学习技术依赖于大量的专家注释&#xff0c;这既耗时又令人望而却…

【Spring MVC】快速学习使用Spring MVC的注解及三层架构

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【Spring MVC】快速学习使用Spring MVC的注解及三层架构 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 Spring Web MVC一: 什么是Spring Web MVC&#xff1…

何时应用 RAG 与微调

充分发挥 LLM 的潜力需要在检索增强生成&#xff08;RAG&#xff09;和微调之间选择正确的技术。 让我们来看看何时对 LLM、较小的模型和预训练模型使用 RAG 与微调。我们将介绍&#xff1a; LLM 和 RAG 的简要背景RAG 相对于微调 LLM 的优势何时针对不同模型大小对 RAG 进行…

python 贪吃蛇

main.py #!/usr/bin/env python3 # -*- coding: utf-8 -*-import pygame # 导入pygame模块from setting import Setting import startmain as sm from pygame.sprite import Groupdef InitGame():print("InitGame")pygame.init() #初始化pygameai_settings Se…

【图轮】【 最小生成树】【 并集查找】1489. 找到最小生成树里的关键边和伪关键边

本文涉及知识点 图轮 最小生成树 并集查找 关键边 1489. 找到最小生成树里的关键边和伪关键边 给你一个 n 个点的带权无向连通图&#xff0c;节点编号为 0 到 n-1 &#xff0c;同时还有一个数组 edges &#xff0c;其中 edges[i] [fromi, toi, weighti] 表示在 fromi 和 to…

书生·浦语全链路开源开放体系 第二期

文章目录 大模型背景大模型开发流程InternLM 2.0SFT与RLHFInternLM2主要亮点 书生浦语全链路开源开放体系数据-书生万卷InternLM-Train微调 XTuner评测工具 OpenCompass部署 LMDeploy智能体 Lagent智能体工具箱 AgentLego 大模型背景 专用模型&#xff1a;针对特定的任务&…

【Web】NSSCTF Round#20 Basic 个人wp

目录 前言 真亦假&#xff0c;假亦真 CSDN_To_PDF V1.2 前言 感谢17&#x1f474;没让我爆零 真亦假&#xff0c;假亦真 直接getshell不行&#xff0c;那就一波信息搜集呗&#xff0c;先开dirsearch扫一下 扫的过程中先试试常规的robots.txt,www.zip,shell.phps,.git,.sv…

使用Docker Compose一键部署前后端分离项目(图文保姆级教程)

一、安装Docker和docker Compose 1.Docker安装 //下载containerd.io包 yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm //安装依赖项 yum install -y yum-utils device-mapper-persistent-data l…

百度云加速方法「Cheat Engine」

加速网盘下载 相信经常玩游戏的小伙伴都知道「Cheat Engine」这款游戏内存修改器&#xff0c;它除了能对游戏进行内存扫描、调试、反汇编 之外&#xff0c;还能像变速齿轮那样进行本地加速。 这款专注游戏的修改器&#xff0c;被大神发现竟然还能加速百度网盘资源下载&#xf…

c++前言

目录 1. 什么是 C 2. C 发展史 3. C 的重要性 4. 如何学习 C 5. 关于本门课程 1. 什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的 程序&#xff0c;需要高度的抽象和建模时&#xff0c; C 语言则不合适…

【uC/OS-III篇】uC/OS-III 移植到 STM32 简明教程

uC/OS-III 移植到 STM32 简明教程 一、uC/OS-III 介绍 二、获取UCOS-III源码 三、建立项目工程 四、解决工程编译报错 五、修改项目文件 下一篇博客&#xff1a; 【uC/OS-III篇】uC/OS-III 创建第一个任务&#xff08;For STM32&#xff09; 移植后的工程自取方式&#xf…

玩转Django分页器

一、Pagination 分页器编程步骤 View, 导入django.core.paginator.Paginator类&#xff0c;创建Paginator 对象时&#xff0c;输入qs对象&#xff0c;以及每页显示条数。 接收 URL, 从请求参数中读取page数值 &#xff0c;通过 paginator.page(page_num) 返回请求页的page_obj…

从 PG 技术峰会南京站汲取的那些干货

3月30日下午&#xff0c;“PostgreSQL 数据库技术峰会”南京站圆满举办。 这场峰会同步在线上直播&#xff0c;近 2000 人在线观看。 感谢各位大佬带来精彩演讲。 1. 可观测性 第一场正式演讲是白鳝前辈带来的《PostgreSQL 数据库的可观测性能力》。 数据库的可观测性的重要性不…

Mysql数据库:MHA高可用架构

目录 前言 一、MHA概述 1、什么是MHA 2、MHA的特点 3、MHA的组成 4、MHA的工作原理 5、故障切换备选主库的算法 二、部署MHA高可用架构 1、环境部署 2、部署主从同步 2.1 修改主配置文件并创建软链接 2.1.1 master 修改主配置文件并创建软连接 2.1.2 slave1 修改主…

算法学习——LeetCode力扣补充篇5 (52. N 皇后 II、649. Dota2 参议院、1221. 分割平衡字符串、5. 最长回文子串)

算法学习——LeetCode力扣补充篇5 52. N 皇后 II 52. N 皇后 II - 力扣&#xff08;LeetCode&#xff09; 描述 n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的…

免费!微软推出全球第一个生成式AI认证

微软在官网宣布一项新的人工智能计划&#xff0c;包括与 LinkedIn联合推出免费的生成式AI课程和专业认证证书&#xff1b;微软与数据平台data.org、开源社区GitHub 等合作&#xff0c;发一起全球生成式AI挑战赛&#xff0c;为参赛的组织提供资金、技术、培训等帮助。 用户学习…

文生图大模型三部曲:DDPM、LDM、SD 详细讲解!

1、引言 跨模态大模型是指能够在不同感官模态(如视觉、语言、音频等)之间进行信息转换的大规模语言模型。当前图文跨模态大模型主要有&#xff1a; 文生图大模型&#xff1a;如 Stable Diffusion系列、DALL-E系列、Imagen等 图文匹配大模型&#xff1a;如CLIP、Chinese CLIP、…

力扣刷题Days28-第二题-11.盛水最多的容器(js)

目录 1&#xff0c;题目 2&#xff0c;代码 3&#xff0c;学习与总结 3.1思路回顾 1&#xff0c;如何遍历 2&#xff0c;算法流程 3.2剖析问题 1&#xff0c;题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, h…

Keil界面乱了,某些图标消失

文章目录 如图 如图 我都不知道怎么搞的第一个 重启界面解决了