Hadoop:HDFS--分布式文件存储系统

目录

 

HDFS的基础架构

VMware虚拟机部署HDFS集群

HDFS集群启停命令

HDFS Shell操作

hadoop 命令体系:

创建文件夹 -mkdir

 查看目录内容 -ls

 上传文件到hdfs -put

查看HDFS文件内容 -cat

下载HDFS文件 -get

复制HDFS文件 -cp

追加数据到HDFS文件中 -appendToFile

HDFS文件移动 -mv

 删除HDFS文件 -rm

 HDFS存储原理

存储原理

 修改副本数量

fsck检查文件副本状态

NameNode元数据

edits和fsimage文件

元数据合并参数

 SecondaryNameNode的作用

HDFS数据的读写请求


HDFS的基础架构

Hadoop由三个部分组成,分别是HDFS、MapReduce和yarn:

HDFS由三个角色,主角色、从角色、主角色辅助角色:

NameNode

  • HDFS系统的主角色,是一个独立的进程
  • 负责管理HDFS整个文件系统
  • 负责管理DataNode

SecondaryNameNode

  • NameNode的辅助,是一个独立进程
  • 主要帮助NameNode完成元数据整理工作

DataNode

  • HDFS系统的从角色,是一个独立进程
  • 主要负责数据的存储,即存入数据和取出数据

VMware虚拟机部署HDFS集群

第二章-04-[实操]VMware虚拟机部署HDFS集群_哔哩哔哩_bilibili

HDFS集群启停命令

$HADOOP_HOME/sbin/start-dfs.sh ,一键启动 HDFS 集群

执行原理:

在执行此脚本的机器上,启动 SecondaryNameNode
读取 core-site.xml 内容(fs.defaultFS项),确认 NameNode 所在机器,启动 NameNode
读取 workers 内容,确认 DataNode 所在机器,启动全部 DataNode
$HADOOP_HOME/sbin/stop-dfs.sh ,一键关闭 HDFS 集群

执行原理:

在执行此脚本的机器上,关闭SecondaryNameNode
读取core-site.xml内容(fs.defaultFS项),确认NameNode所在机器,关闭NameNode
读取workers内容,确认DataNode所在机器,关闭全部NameNode

      $HADOOP_HOME/sbin/hadoop-daemon.sh,此脚本可以单独控制所在机器的进程的启停

用法:hadoop-daemon.sh (start|status|stop) (namenode|secondarynamenode|datanode)

或者 hdfs --daemon (start|status|stop) (namenode|secondarynamenode|datanode)

HDFS Shell操作

hadoop 命令体系:

hadoop fs [generic options]  或者 hdfs dfs  [generic options]

没有任何区别

创建文件夹 -mkdir

hdfs dfs -mkdir [-p] <path> 

 查看目录内容 -ls

清测-ll等是不可行的 

hdfs dfs -ls [-h] [-R] [<path> ...] 

  -h 人性化显示文件   -R 递归查看指定目录及其子目录

 上传文件到hdfs -put

hdfs dfs -put [-f] [-p] <localsrc> ... <dst>
  • -f 覆盖目标文件(已存在下)
  • -p 保留访问和修改时间,所有权和权限
  •   localsrc 本地文件系统(客户端所在机器)
  •   dst 目标文件系统(HDFS
  • 查看HDFS文件内容 -cat

  • hdfs dfs -cat <src> ...
    

    当文件很大时,可以配合more翻页

  • hdfs dfs -cat <src> | more
    

    下载HDFS文件 -get

  • hdfs dfs -get [-f] [-p] <src> ... <localdst>
    

    下载文件到本地文件系统指定目录localdst必须是目录

            -f 覆盖目标文件(已存在下)

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

  • 复制HDFS文件 -cp

  • hdfs dfs -cp [-f] <src> ... <dst>
    

    src和dst都只能是hdfs的文件路径

  • 追加数据到HDFS文件中 -appendToFile

  • HDFS的文件修改只支持追加删除

  • hdfs dfs -appendToFile <localsrc> ... <dst>
    

    将localsrc的内容追加到dst

  • HDFS文件移动 -mv

  • hdfs dfs -mv <src> ... <dst>

            移动文件到指定文件夹下,可以使用该命令移动数据,重命名文件的名称

  •  删除HDFS文件 -rm

  • hdfs dfs -rm -r [-skipTrash] URI [URI ...]

    删除指定路径的文件或文件夹      -skipTrash 跳过回收站,直接删除

  • 回收站功能默认关闭,如果要开启需要在core-site.xml内配置:

    <property>

    <name>fs.trash.interval</name>

    <value>1440</value>

    </property>

    <property>

    <name>fs.trash.checkpoint.interval</name>

    <value>120</value>

    </property>

    无需重启集群,在哪个机器配置的,在哪个机器执行命令就生效。

    回收站默认位置在:/user/用户名(hadoop)/.Trash

  • 其他的一些用法跟linux里面是基本一致的

  •  HDFS存储原理

  • 存储原理

  • 将每个文件分成n(n个服务器)份,每一份又分成m个block(Block块,HDFS最小存储单位,每个256MB(可以修改))
  • 分成block的目的是统一hdfs的存储单元,便于管理

但是这样如果丢了一个block,那么整个文件都会失效,那么 使用备份解决

将每个block备份n份,放入不同的服务器

 修改副本数量

可以在hdfs-site.xml中配置属性以设置默认文件上传到HDFS中拥有的副本数量:

<property><name>dfs.replication</name><value>3</value>
</property>

一般不需要设置,默认是3

除了配置文件外,我们还可以在上传文件的时候,临时决定被上传文件以多少个副本存储。

hadoop fs -D dfs.replication=2 -put test.txt /tmp/

如上命令,就可以在上传test.txt的时候,临时设置其副本数为2

对于已经存在HDFS的文件,修改dfs.replication属性不会生效,如果要修改已存在文件可以通过命令

hadoop fs -setrep [-R] 2 path

如上命令,指定path的内容将会被修改为2个副本存储。-R选项可选,使用-R表示对子目录也生效。

fsck检查文件副本状态

hdfs fsck path [-files [-blocks [-locations]]]

fsck可以检查指定路径是否正常

  • -files可以列出路径内的文件状态
  • -files -blocks  输出文件块报告(有几个块,多少副本
  • -files -blocks -locations 输出每一个block的详情

 

红色线表示副本数量(这里是总的数量,也就是总共3个block) 

蓝色的是三个block存放的位置,可以看到是存放在了三个不同的服务器

0:hdfs系统的状态  1:有多少个副本  2:丢失了多少blocks

NameNode元数据

edits和fsimage文件

Hadoop是通过NameNode来记录和整理文件和block的关系

NameNode基于一批edits和一个fsimage文件的配合完成整个文件系统的管理和维护

edits文件,是一个流水账文件,记录了hdfs中的每一次操作,以及本次操作影响的文件其对应的block,会有多个edits文件

将全部的edits文件,合并为最终结果,即可得到一个Fsimage文件

对于存放的位置,在hdfs-site.xml文件中,配置了

  <property><name>dfs.datanode.data.dir</name><value>/data/dn</value></property>

那么此处的edits和fsimage就存放在了data/nn文件夹下的current文件夹

元数据合并参数

对于元数据合并成fsimage,是一个定时过程,基于两个参数

dfs.namenode.checkpoint.period,默认3600(秒)即1小时
dfs.namenode.checkpoint.txns,默认1000000,即100W次事务

只需要达到一个条件就需要合并

默认60秒检查一次是否符合条件,基于

dfs.namenode.checkpoint.check.period,默认60(秒),来决定

 SecondaryNameNode的作用

SecondaryNameNode会通过httpNameNode拉取数据(editsfsimage)然后合并完成后提供给NameNode使用

HDFS数据的读写请求

数据写入流程

  1. 1. 客户端向NameNode发起请求
  2. 2. NameNode审核权限、剩余空间后,满足条件允许写入,并告知客户端写入的DataNode地址(一般来说会分配网络距离最近的datanode)
  3. 3. 客户端向指定的DataNode发送数据包
  4. 4. 被写入数据的DataNode同时完成数据副本的复制工作,将其接收的数据分发给其它DataNode
  5. 5. 写入完成客户端通知NameNodeNameNode做元数据记录工作
  6. 数据读取流程
  7. 1、客户端向NameNode申请读取某文件
  8. 2 NameNode判断客户端权限等细节后,允许读取,并返回此文件的block列表
  9. 3、客户端拿到block列表后自行寻找DataNode读取即可(会去找最近的datanode)

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

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

相关文章

【FusionInsight 迁移】HBase从C50迁移到6.5.1(01)迁移概述

【FusionInsight 迁移】HBase从C50迁移到6.5.1&#xff08;01&#xff09;迁移概述 HBase从C50迁移到6.5.1&#xff08;01&#xff09;迁移概述迁移范围迁移前的准备HDFS文件检查确认HBase迁移目录确保数据落盘停止老集群HBase服务停止新集群HBase服务 HBase从C50迁移到6.5.1&a…

设计模式之观察者模式、访问者模式与模板方法模式

目录 观察者模式 简介 优缺点 结构 实现 运用场景 访问者模式 简介 优缺点 结构 实现 运用场景 模板方法模式 简介 优缺点 结构 实现 运用场景 观察者模式 简介 又叫发布-订阅模式&#xff0c;定义对象间一种一对多的依赖关系&#xff0c;使得每当一个对象改…

vue3自定义指令

自定义指令是用来增强与扩展元素功能的 在vue官方文当中写的很明白,这里我就不在赘述官方文档.只记录在项目中的实际应用. 局部定义 <template><h4>指令</h4><p v-color-red>字体固定颜色的指令</p><p v-color-value"blue">可…

【List篇】ArrayList 详解(含图示说明)

Java中的ArrayList是一个动态数组&#xff0c;可以自动扩展容量以适应数据的添加和删除。它可以用来存储各种类型的数据&#xff0c;例如String&#xff0c;Integer&#xff0c;Boolean等。ArrayList实现了List接口&#xff0c;可以进行常见的List操作&#xff0c;例如添加、插…

Gridea+GitPage+Gittalk 搭建个人博客

&#x1f44b;通过GrideaGitPage 搭建属于自己的博客&#xff01; &#x1f47b;GitPage 负责提供 Web 功能&#xff01; &#x1f63d;Gridea 作为本地编辑器&#xff0c;方便 push 文章&#xff01; &#x1f3f7;本文讲解如何使用 GrideaGitPage 服务域名&#xff08;可选&a…

原生Js Canvas去除视频绿幕背景

Js去除视频背景 注&#xff1a; 这里的去除视频背景并不是对视频文件进行操作去除背景 如果需要对视频扣除背景并导出可以使用ffmpeg等库&#xff0c;这里仅作播放用所以采用这种方法 由于uniapp中的canvas经过封装&#xff0c;且 uniapp 的 drawImage 无法绘制视频帧画面&…

TOWE雷达光敏感应开关,让生活更智能、更安全

现代生活中&#xff0c;智能家居成为人们追求品质生活的必备之选。其中&#xff0c;照明控制的智能化已然成为一种趋势&#xff0c;传统的灯光开关需要人们手动操作&#xff0c;既不方便&#xff0c;有时候也会造成资源的过度浪费&#xff0c;而雷达光敏感应开关的出现&#xf…

QT之形态学操作

形态学操作包含以下操作&#xff1a; 腐蚀 (Erosion)膨胀 (Dilation)开运算 (Opening)闭运算 (Closing)形态梯度 (Morphological Gradient)顶帽 (Top Hat)黑帽(Black Hat) 其中腐蚀和膨胀操作是最基本的操作&#xff0c;其他操作由这两个操作变换而来。 腐蚀 用一个结构元素…

【MySQL】MySQL的安装,登录,配置和相关命令

文章目录 前言一. 卸载不需要的环境二. 获取MySQL的yum源三. 安装MySQL和启动四. 尝试登录MySQL方法1&#xff1a;获取临时root密码方法2&#xff1a;没有密码方法3&#xff1a;配置文件 五. 简单配置结束语 前言 本篇文章是基于云服务器&#xff1b;Linux&#xff1a;Centos7…

Leetcode.174 地下城游戏

题目链接 Leetcode.174 地下城游戏 hard 题目描述 恶魔们抓住了公主并将她关在了地下城 d u n g e o n dungeon dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公…

Vuepress样式修改内容宽度

1、相关文件 一般所在目录node_modules\vuepress\theme-default\styles\wrapper.styl 2、调整宽度&#xff0c;截图中是已经调整好的&#xff0c;在我电脑上显示刚刚好。

【Maven教程】(五)仓库:解析Maven仓库—布局、分类和配置,远程仓库的认证与部署,快照版本,依赖解析机制,镜像和搜索服务 ~

Maven 仓库 1️⃣ 什么是Maven仓库2️⃣ 仓库的布局3️⃣ 仓库的分类3.1 本地仓库3.2 远程仓库3.3 中央仓库3.4 私服 4️⃣ 远程仓库的配置4.1 远程仓库的认证4.2 部署至远程仓库 5️⃣ 快照版本6️⃣ 从仓库解析依赖的机制7️⃣ 镜像8️⃣ 仓库搜索服务8.1 Sonatype Nexus8.2…

微信小程序开发---事件的绑定

目录 一、事件的概念 二、小程序中常用的事件 三、事件对象的属性列表 四、bindtap的语法格式 &#xff08;1&#xff09;绑定tap触摸事件 &#xff08;2&#xff09;编写处理函数 五、在事件处理函数中为data中的数据赋值 六、事件传参 七、bindinput的语法格式 八、…

⛳ MVCC 原理详解

&#x1f38d;目录 ⛳ MVCC 原理详解&#x1f43e; 一、事务回顾&#x1f4d0; 1.1、什么是数据库事务&#xff0c;为什么要有事务&#x1f389; 1.2、事务包括哪几个特性&#xff1f;&#x1f38d; 1.3、事务并发存在的问题1.3.1、脏读1.3.2、不可重复读1.3.3、幻读 &#x1f…

Linux命令200例:Yum强大的包管理工具使用(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

LeetCode 1123. Lowest Common Ancestor of Deepest Leaves【树,DFS,BFS,哈希表】1607

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

09-JVM垃圾收集底层算法实现

上一篇&#xff1a;08-JVM垃圾收集器详解 1.三色标记 在并发标记的过程中&#xff0c;因为标记期间应用线程还在继续跑&#xff0c;对象间的引用可能发生变化&#xff0c;多标和漏标的情况就有可能发生。 这里我们引入“三色标记”来给大家解释下&#xff0c;把Gcroots可达性…

Java 内部类

目录 一、什么是内部类及为何要有内部类 二、四种内部类 1.成员内部类 成员内部类定义&#xff1a; 获取成员内部类对象的方法&#xff1a; 成员内部类获取外部类变量: 额外&#xff1a; 2.局部内部类 局部内部类定义: 如何实现内部类当中的方法&#xff1a; 3.静态内…

【opencv】多版本安装

安装opencv3.2.0以及对应的付费模块 一、安装多版本OpenCV如何切换 按照如下步骤安装的OpenCV&#xff0c;在CMakeLists.txt文件中&#xff0c;直接指定opencv的版本就可以找到相应版本的OpenCV&#xff0c;为了验证可以在CMakeLists.txt文件中使用如下指令输出版本验证&…

二、创建个人首页页面

简介 改造 App.vue 创建一个展示页面,实现一个可以轮播的功能效果。欢迎访问个人的简历网站预览效果 本章涉及修改与新增的文件:style.css、App.vue、assets 一、 自定义全局样式 将 style.css 中的文件样式内容替换为如下代码 /* 初始化样式 --------------------------…