HDFS(一)HDFS基本介绍

2023-05-16

HDFS基本介绍

  • HDFS的Master-Slave结构
  • HDFS角色作用简介
  • HDFS 分块存储
  • 抽象成数据块的好处
  • HDFS 副本机制
  • 名字空间(NameSpace)
  • NameNode 功能
  • DataNode 功能
  • 机架感知原理

HDFS 是 Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统。是 Hadoop 核心组件之一,作为最底层的分布式存储服务而存在。

HDFS使用Master和Slave结构对集群进行管理。一般一个 HDFS 集群只有一个 Namenode 和一定数目的Datanode 组成。Namenode 是 HDFS 集群主节点,Datanode 是 HDFS 集群从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。

HDFS的Master-Slave结构

在这里插入图片描述


1)HDFS集群包括,NameNode和DataNode以及Secondary Namenode。
2)NameNode负责管理整个文件系统的元数据,以及每一个路径(文件)所对应的数据块信息。
3)DataNode 负责管理用户的文件数据块,每一个数据块都可以在多个datanode上存储多个副本。
4)Secondary NameNode用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。
   最主要作用是辅助namenode管理元数据信息
   

HDFS角色作用简介

在这里插入图片描述


	NameNode(Master)管理者 - 只负责管理,管理集群内各个节点。
	SecondaryNameNode 辅助管理 – 只负责辅助NameNode管理工作。
	DataNode(Slave) 工作者,是负责工作,周期向NameNode汇报,进行读写数据。
	

HDFS 分块存储


 hdfs将所有的文件全部抽象成为block块来进行存储,不管文件大小,
 全部一视同仁都是以block块的统一大小和形式进行存储,方便我们的分布式文件系统对文件的管理

所有的文件都是以block块的方式存放在HDFS文件系统当中,在Hadoop1当中,文件的block块默认大小是64M,
Hadoop2当中,文件的block块大小默认是128M,block块的大小可以通过hdfs-site.xml当中的配置文件进行指定

	<property>
        <name>dfs.block.size</name>
        <value>块大小 以字节为单位</value>//只写数值就可以
    </property>

在这里插入图片描述

数据超过128M,便进行切分,如果没有超过128M,就不用切分,有多少算多少,不足128M的也是一个快。这个快的大小就是100M,没有剩余28M这个概念。

抽象成数据块的好处


1.	一个文件有可能大于集群中任意一个磁盘 
	 20T/128 = xxx块,这些block块属于一个文件
2.	使用块抽象而不是文件,可以简化存储子系统。
3.	块非常适合用于数据备份进而提供数据容错能力和可用性

块缓存


	通常DataNode从磁盘中读取块,但对于访问频繁的文件,其对应的块可能被显示的缓存在DataNode的内存中,
以堆外块缓存的形式存在。默认情况下,一个块仅缓存在一个DataNode的内存中,当然可以针对每个文件配置
DataNode的数量。作业调度器通过在缓存块的DataNode上运行任务,可以利用块缓存的优势提高读操作的性能。

HDFS 副本机制


	HDFS视硬件错误为常态,硬件服务器随时有可能发生故障。
	为了容错,文件的所有 block 都会有副本。每个文件的 block 大小和副本系数都是可配置的。
应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。
	数据副本默认保存三个副本,我们可以更改副本数以提高数据的安全性
	在hdfs-site.xml当中修改以下配置属性,即可更改文件的副本数

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


低版本Hadoop副本节点选择
	第一个副本在client所处的节点上。如果客户端在集群外,随机选一个。
	第二个副本和第一个副本位于不相同机架的随机节点上。
	第三个副本和第二个副本位于相同机架,节点随机。

在这里插入图片描述


Hadoop2.7.2副本节点选择
	第一个副本在client所处的节点上。如果客户端在集群外,随机选一个。
	第二个副本和第一个副本位于相同机架,随机节点。
	第三个副本位于不同机架,随机节点。

在这里插入图片描述

名字空间(NameSpace)


	HDFS 支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。
文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。 
	Namenode 负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被Namenode 记录下来。 
	HDFS 会给客户端提供一个统一的目录树,客户端通过路径来访问文件,
形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。 

NameNode 功能


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


	Namenode节点负责确定指定的文件块到具体的Datanode结点的映射关系。在客户端与数据节点之间共享数据。

在这里插入图片描述


	管理Datanode结点的状态报告,包括Datanode结点的健康状态报告和其所在结点上数据块状态报告,
以便能够及时处理失效的数据结点。


总结:
	NameNode 的功能
	1.维护目录树。
	2.Namenode节点负责确定指定的文件块到具体的Datanode结点的映射关系。
	3.管理Datanode结点的状态报告。

DataNode 功能


	文件的各个 block 的具体存储管理由 datanode 节点承担。每一个 block 都可以在多个datanode 上。
Datanode 需要定时向 Namenode 汇报自己持有的 block信息。 存储多个副本(副本数量也可以通过参数设置 
dfs.replication,默认是 3)。


	向Namenode结点报告状态。每个Datanode结点会周期性地向Namenode发送心跳信号和文件块状态报告。

	心跳是每3秒一次,心跳返回结果带有namenode给该datanode的命令如复制块数据到另一台机器,
或删除某个数据块。如果超过10分钟没有收到某个datanode的心跳,则认为该节点不可用。
	DataNode启动后向namenode注册,通过后,周期性(1小时)的向namenode上报所有的块信息。
	

	执行数据的流水线复制。当文件系统客户端从Namenode服务器进程获取到要进行复制的数据块列表后,
完成文件块及其块副本的流水线复制。
	一个数据块在datanode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,
一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。

在这里插入图片描述


总结:
	DataNode 的功能
	1.负责管理它所在结点上存储的数据的读写,及存储数据。
	2.向Namenode结点报告状态。
	3.执行数据的流水线复制。

机架感知原理

机架感知需要人为进行配置,编写Python脚本“RackAware.py”。内容为服务器IP与交换机的对应关系。(开源hadoop,使用RackAware.sh)

#!/usr/bin/python  
#-*-coding:UTF-8 -*-  
import sys  
  
rack = {  

        "12.12.3.1":"SW6300-1",  
        "12.12.3.2":"SW6300-1",  
        "12.12.3.3":"SW6300-1",  
        "12.12.3.4":"SW6300-1",  
        "12.12.3.5":"SW6300-1",  
        "12.12.3.6":"SW6300-1",  

        "12.12.3.25":"SW6300-2",  
        "12.12.3.26":"SW6300-2",  
        "12.12.3.27":"SW6300-2",  
 
        "12.12.3.49":"SW6300-3",  
        "12.12.3.50":"SW6300-3",  
        "12.12.3.51":"SW6300-3",  
     
        "12.12.3.73":"SW6300-4",  
        "12.12.3.74":"SW6300-4",  
        "12.12.3.75":"SW6300-4",  
		}  
if __name__=="__main__":  
    print "/" + rack.get(sys.argv[1],"SW6300-1-2")  

使用以下命令验证

[root@node01 sbin]# python RackAware.py 12.12.3.1
/SW6300-1 
[root@node01 sbin]# python RackAware.py 12.12.3.25
/SW6300-2
[root@node01 sbin]# python RackAware.py 12.12.3.75
/SW6300-4
[root@node01 sbin]# python RackAware.py 12.12.3.100
/SW6300-1-2

编辑core-site.xml配置文件,将脚本配置为topology.script.file.name的值

<property>
<name>topology.script.file.name</name>
<value>/home/bigdata/apps/hadoop/etc/hadoop/RackAware.py </value>
</property>

觉得有用的点个赞吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDFS(一)HDFS基本介绍 的相关文章

随机推荐

  • leetcode 941. 有效的山脉数组

    给定一个整数数组 A xff0c 如果它是有效的山脉数组就返回 true xff0c 否则返回 false 让我们回顾一下 xff0c 如果 A 满足下述条件 xff0c 那么它是一个山脉数组 xff1a A length gt 61 3
  • Java面向对象-继承

    Java继承的概念与实现 继承是Java面向对象编程技术的一块基石 xff0c 因为它允许创建分等级层次的类 继承是类与类之间的关系 xff0c 是一个很简单很直观的概念 xff0c 与现实世界中的继承 xff08 例如儿子继承父亲财产 x
  • 【IT-Windows】某些设置由你的组织来管理

    方法一 xff1a 1 xff0c 桌面右击 此电脑 xff0c 在右键菜单选择 属性 选项 p1 win10更新取消组织管理图 2 xff0c 在打开的 系统 窗口 xff0c 点击计算机名右边的 更改设置 选项 p2 某些设置有你的组织
  • Debian各个依赖包下载地址

    https packages debian org bullseye amd64 libcrypt1 udeb download https packages debian org bullseye amd64 gcc 10 base do
  • CubeMX生成的代码烧录一次后无法再烧录(识别)STM32,需按住reset后放开才能烧录

    序言 其实很早就遇见过这个问题 xff0c 但因为这个问题太小太基础了 xff0c 就没有做记录 但是过了很久过后再重新回来用CubeMX做STM32开发的时候却总是记不住这点小设置 xff0c 所以又回来写一下这个 这个小问题会在不同的软
  • 程序员晒出了15万的年终奖:辛苦一年,对结果很满意

    又是一年一度炫耀年终奖的日子了 xff0c 在互联网匿名社区 xff0c 有程序员晒出了自己刚到手的年终奖 xff0c 高达15之多的银行流水 xff0c 其称这是税后收入 xff0c 扣税就扣了3 5万之多 xff0c 但对这样的年终奖还
  • 撞库、脱库和洗库是什么意思

  • 解决新安装的 Arch Linux 在 GNOME 中搜狗输入法不显示候选词和输入延迟的问题

    问题描述 新安装的 Arch Linux 系统 在 AUR 中安装 fcitx sogoupinyin 后 fcitx 的图标不显示 xff0c 且切换到搜狗输入法后不显示候选词 xff0c 输入的延迟也极高 xff0c 切换回英文输入法后
  • hashCode和equals作用

    什么是hashCode hashCode 的作用是获取哈希码 xff0c 返回一个int整数 xff0c 作用是查找hashMap的索引位置 hashCode 在JDK的Object类中 xff0c 也就表明每一个类中都有此方法 hashC
  • python学习——while True的用法

    古月金真 while True 是python中经常会被应用到 下面通过个例子进行解释 xff1a 例子 xff1a 建立一个用户登录系统 xff0c 用户输入用户名和密码 xff0c 如果正确就可以进入系统 法一 xff1a d 61 古
  • linux下将gbk文件转换为utf-8

    titledatetagscategories linux下将gbk文件转换为utf 8 2019 11 23 10 49 58 0800 编码 problems 转自Linux下GBK文件编码批量转换UTF 8命令 在工作中 xff0c
  • ubuntu上不了网的解决方法(简便)

    用于我们对于ubuntu的使用比较多 xff0c 网络有时需要更改设置 下面笔者分享一个实用的方法 1 增加多一个网络连接 将鼠标移至左上角上下箭头 xff0c 之后点击爱编辑连接 xff08 不同版本操作方法不一样但其实都是一样的操作路径
  • C++ 快读快输模板

    C 43 43 快读快输模板 快读 span class token keyword inline span span class token keyword int span span class token function read
  • sql server2008支持json函数以及2016版内置json函数

    一 sql server2008支持json函数 1 json 转化成数据集合 1 xff09 转化用函数 CREATE FUNCTION dbo parseJSON 64 JSON NVARCHAR MAX RETURNS 64 hier
  • 家庭宽带 动态公网IP,使用腾讯云DDNS实现实时更新DNS解析记录

    解决DDNS问题 动态公网IP 环境说明 xff1a 我是家庭宽带 只能申请到动态的公网ip xff0c 好处是不花钱 xff0c 弊端是每次重启光猫 xff0c 都会重新获取一个新的公网IP 为解决此办法 xff0c 我尝试了很多个DDN
  • 用c语言实现一个简单的计算器(数据结构)

    概要 xff1a 主要以c语言为例对数据结构中写一个简易的计算器 xff08 计算整数间加减乘除括号运算 xff09 的算法进行大致讲述 xff0c 细说如何去实现符号优先级的比较的函数实现 注 xff1a 由于编辑器缘故 xff0c 本文
  • apache网页中文乱码解决方法

    apache的配置文件 xff1a 进入httpd conf xff0c 在文件的最后添加AddDefaultCharset gb2312 xff0c 注意 xff0c 新版本的apache是没有默认的AddDefaultCharset字段
  • 将ubuntu设置为NAS——搭建Jellyfin影音服务器

    Jellyfin安装 前提是你已经安装好了docker docker ps 查看docker 安装容器 docker ps a 下载docker jellyfin的镜像文件 sudo docker pull jellyfin jellyfi
  • CommonJS概述及使用

    在web开发中 xff0c 我们的js文件都是在html文件中引入 xff0c 在浏览器环境运行 但是在nodejs的环境中可没有html文件 xff0c 且nodejs中 xff0c 有且只有一个入口文件index js xff08 在执
  • HDFS(一)HDFS基本介绍

    HDFS基本介绍 HDFS的Master Slave结构HDFS角色作用简介HDFS 分块存储抽象成数据块的好处HDFS 副本机制名字空间 xff08 NameSpace xff09 NameNode 功能DataNode 功能机架感知原理