Hadoop中HDFS概述

news2024/9/24 15:27:38

Hadoop概述之HDFS

    • HDFS架构概述
      • 优缺点
      • HDFS架构
      • HDFS文件块大小
      • HDFS的shell命令
      • HDFS读写流程
        • 写数据流程
      • HDFS读数据流程
      • NameNode 和 SecondaryNameNode工作机制
      • DataNode工作机制
        • DataNode数据完整性如何保证

端口名称Hadoop2.xHadoop3.x
NameNode内部通信端口8020/9000
NameNode HTTP UI500709870
MapReduce查看执行任务端口80888088
历史服务器通信端口1988819888

HDFS架构概述

Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。

随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。

HDFS的使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。

优缺点

优点
1)高容错性

数据自动保存多个副本。它通过增加副本的形式,提高容错性。
2)适合处理大数据

数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据;
文件规模:能够处理百万规模以上的文件数量,数量相当之大。
3)可构建在廉价机器上,通过多副本机制,提高可靠性。

缺点
1)不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。

2)无法高效的对大量小文件进行存储。

存储大量小文件的话,它会占用NameNode大量的内存来存储文件目录和块信息。这样是不可取的,因为NameNode的内存总是有限的;
小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标。
3)不支持并发写入、文件随机修改。

一个文件只能有一个写,不允许多个线程同时写;
仅支持数据append(追加),不支持文件的随机修改。

HDFS架构

在这里插入图片描述

包含以下三个组件:

1)NameNode(nn):就是Master,它是一个主管、管理者。

(1)管理HDFS的名称空间;

(2)配置副本策略;

(3)管理数据块(Block)映射信息;

(4)处理客户端读写请求。

2)DataNode:就是Slave。NameNode下达命令,DataNode执行实际的操作。

(1)存储实际的数据块;

(2)执行数据块的读/写操作。

3)Client:就是客户端。

(1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传;

(2)与NameNode交互,获取文件的位置信息;

(3)与DataNode交互,读取或者写入数据;

(4)Client提供一些命令来管理HDFS,比如NameNode格式化;

(5)Client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作;

4)Secondary NameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。

(1)辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode ;

(2)在紧急情况下,可辅助恢复NameNode。

HDFS文件块大小

HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M。

思考:为什么块的大小不能设置太小,也不能设置太大?
(1)HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始位置;(2)如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。
总结:HDFS块的大小设置主要取决于磁盘传输速率。

HDFS的shell命令

HDFS shell命令基本以hadoop fs开头,输入hadoop fs会看到对应指令和说明

hadoop fs #查看指令说明

下面几个例子可以看出,基本和linux上的命令相似

hadoop fs -mkdir /mydir #创建文件夹
hadoop fs -ls /mydir #查看目录信息
hadoop fs -put ./demo.txt /mydir #上传文件到hdfs上
hadoop fs -get /mydir /demo.txt ./demo.txt #下载hdfs文件到本地
hadoop fs  -chmod 666  /mydir /demo.txt #修改文件权限

HDFS读写流程

写数据流程

在这里插入图片描述
(1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。

(2)NameNode返回是否可以上传。

(3)客户端请求第一个 Block上传到哪几个DataNode服务器上。

(4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。

(5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。

(6)dn1、dn2、dn3逐级应答客户端。

(7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。

(8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。

在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据。那么这个最近距离怎么计算呢?

依据节点距离,及待上传数据所在节点和DataNode所在节点距离。
不同数据中心节点距离=6;
同数据中心不同机架=4;
同机架不同节点=2;
相同节点=0;
在这里插入图片描述

HDFS读数据流程

在这里插入图片描述
(1)客户端通过DistributedFileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。

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

(3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。

(4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

NameNode 和 SecondaryNameNode工作机制

思考:NameNode中的元数据是存储在哪里的?

首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage。

这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。

但是,如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits的合并。

在这里插入图片描述
1)第一阶段:NameNode启动

(1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。

(2)客户端对元数据进行增删改的请求。

(3)NameNode记录操作日志,更新滚动日志。

(4)NameNode在内存中对元数据进行增删改。

2)第二阶段:Secondary NameNode工作

(1)Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。

(2)Secondary NameNode请求执行CheckPoint。

(3)NameNode滚动正在写的Edits日志。

(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。

(5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。

(6)生成新的镜像文件fsimage.chkpoint。

(7)拷贝fsimage.chkpoint到NameNode。

(8)NameNode将fsimage.chkpoint重新命名成fsimage。

DataNode工作机制

在这里插入图片描述
(1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。

(2)DataNode启动后向NameNode注册,通过后,周期性(6小时)的向NameNode上报所有的块信息。

(3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。

(4)集群运行中可以安全加入和退出一些机器。

DataNode数据完整性如何保证

如下是DataNode节点保证数据完整性的方法。

(1)当DataNode读取Block的时候,它会计算CheckSum。

(2)如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏。

(3)Client读取其他DataNode上的Block。

(4)常见的校验算法crc(32),md5(128),sha1(160)

(5)DataNode在其文件创建后周期验证CheckSum。

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

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

相关文章

【STM32单片机】基于语音识别的智能分类垃圾桶,ld3320语音识别模块如何使用,mp3播放模块如何使用

文章目录 需求语音识别模块MY1690 播放模块舵机源码 需求 对于“可回收物”“有害垃圾”“厨余垃圾”“其它垃圾”,不能分清扔到哪个垃圾桶怎么办? 基于语音识别的智能分类垃圾桶,识别到关键词就打开对应的垃圾桶,完全没有分不清…

echarts中彻底清除所有实例和相关数据

单个实例 dispose销毁实例&#xff0c;销毁后实例无法再被使用。 myChart.dispose();实例比较多的时候 获取Dom元素 let doms document.getElementsByClassName(my-chart)销毁所有实例 if(doms && doms.length) {for (let i 0; i < doms.length; i) {let chartIn…

Jumpserver 2.28.8使用分享

目录 一、Jumpserver 介绍 1、跳板机和堡垒机理解 1.1、跳板机 1.2、堡垒机 2、jumpserver简介 二、Jumpserver 安装部署 2.1、部署规划 2.2 、安装要求 JumpServer 环境要求: 2.3、安装方法介绍 官方提供了多种安装方法 三、Jumpserver平台使用 3.1、Admin登录 3.…

bug(Tomcat):StandardContext.startInternal 由于之前的错误,Context[/day01]启动失败

引出 项目启动失败&#xff0c;一个困扰了一上午的bug 报错信息 org.apache.catalina.core.StandardContext.startInternal 一个或多个筛选器启动失败。完整的详细信息将在相应的容器日志文件中找到 org.apache.catalina.core.StandardContext.startInternal 由于之前的错误…

骨传导是哪个意思,推荐几款性能优的骨传导耳机

​骨传导耳机是通过头部骨迷路传递声音&#xff0c;而不是直接通过耳膜的振动来传递声音。与传统的入耳式耳机相比&#xff0c;骨传导耳机不会堵耳朵&#xff0c;在跑步、骑车等运动时可以更好的接收外界环境音&#xff0c;保护听力&#xff0c;提升安全性。此外&#xff0c;骨…

图解LeetCode——114. 二叉树展开为链表

一、题目 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 二…

公式+ChatGPT:为你的标题创作注入新鲜活力

大家是不是经常遇到文章已经写好了&#xff0c;但是标题却还空着&#xff0c;不是不会写&#xff0c;就是写得平淡无奇&#x1f602;。自己都觉得无趣的标题又怎么能吸引有趣的灵魂呢&#xff1f;何不让chatGPT来试试呢&#xff1f; 首先&#xff0c;我们要明白一个基础理念&am…

微软 AD 已成过去式,这个身份领域国产化替代方案你了解吗?

随着全球互联网和数字化浪潮的不断发展&#xff0c;信息安全已成为不可忽视的问题&#xff0c;并随着日益复杂的国内外市场格局&#xff0c;其重要性更加凸显。我国政府也相继印发和实施了《数字中国建设整体布局规划》、《全国一体化大数据体系建设指南》等一系列政策&#xf…

【JavaEE】Servlet的API详解

Servlet的API详解O(∩_∩)O~&#xff1a; 文章目录 JavaEE & Servlet的API详解1. HttpServlet抽象类1.1 init方法1.2 destroy方法1.3 service方法 2. HttpRequest接口2.1 在浏览器上显示请求首行2.2 在浏览器上显示请求header2.3 getParameter方法 - 最常用的API之一2.4 js…

Stable Didffusion 学习笔记经验总结

值的概念 在Stable Diffusion中&#xff0c;有很多要设置的参数&#xff0c;这些参数起到的作用非常重要&#xff0c;直接决定了出图的各种样子和质量&#xff0c;经过实践&#xff0c;我大概搞明白他们遵循的规律&#xff0c;因为程序员是要与AI对话的&#xff0c;所以所谓的…

【CMake 入门与进阶(3)】 CMakeLists.txt 语法规则基础及部分常用指令(附使用代码)

在上两篇中&#xff0c;笔者通过几个简单地示例向大家演示了 cmake 的使用方法&#xff0c;由此可知&#xff0c;cmake 的使用方法其实还是非常简单的&#xff0c;重点在于编写 CMakeLists.txt&#xff0c;CMakeLists.txt 的语法规则也简单&#xff0c;并没有 Makefile 的语法规…

操作系统复习2.3.4-进程同步问题

生产者-消费者 系统中有一组生产者进程和一组消费者进程 两者共享一个初始为空&#xff0c;大小为n的缓冲区 缓冲区没满&#xff0c;生产者才能放入 缓冲区没空&#xff0c;消费者才能取出 互斥地访问缓冲区 互斥要在同步之后&#xff0c;不然会导致想要同步&#xff0c;但由…

39从零开始学Java之面向对象的继承到底是怎么回事?

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家讲解了面向对象三大特征之一的封装&#xff0c;现在我们还有另…

JWT strings must contain exactly 2 period characters. Found: 0

登录接口异常报错&#xff1a; 这是登录接口报错&#xff0c;实际上他不走登录接口&#xff0c;直接走的拦截器&#xff0c;拦截器应配置好了登录接口的放行&#xff0c;登录接口写的也没有问题&#xff0c;拦截器解析也没有问题&#xff0c;因为之前都是好用的&#xff0c;本…

人车网租赁软件开发|人车网租赁系统|租赁系统源码功能

经过租赁小程序不只可以使物品得到充沛的运用&#xff0c;还能减少一些资源的浪费&#xff0c;租赁行业这两年因为互联网技术的完善&#xff0c;发展也在不断进步&#xff0c;租赁系统定制开发功能也在不断完善&#xff0c;那么企业想要开发租赁小程序的时分需求留意哪些方面呢…

深入了解Java虚拟机之高效并发

目录 Java内存模型与线程 概述 硬件的效率与一致性 Java内存模型 主内存与工作内存 内存间交互操作 对于volatile型变量的特殊规则 原子性、可见性与有序性 先行发生原则 Java与线程 线程实现 线程调度 状态切换 小结 线程安全与锁优化 概述 线程安全 Java中…

HDR显示技术

什么是HDR? HDR&#xff08;High-Dynamic Range&#xff0c;简称HDR&#xff09;是指高动态范围图像&#xff0c;是一种能够显示更大的亮度范围和对比度的图像技术。HDR可以让暗部的细节变亮&#xff0c;亮部的细节不失真&#xff0c;呈现出更自然、更真实的画面&#xff0c;…

记一次618军演压测TPS上不去排查及优化 | 京东云技术团队

本文内容主要介绍&#xff0c;618医药供应链质量组一次军演压测发现的问题及排查优化过程。旨在给大家借鉴参考。 背景 本次军演压测背景是&#xff0c;2B业务线及多个业务侧共同和B中台联合军演。 现象 当压测商品卡片接口的时候&#xff0c;cpu达到10%&#xff0c;TPS只有…

Tomcat基本原理

1.Tomcat核心&#xff1a; Http服务器Servlet容器 组件分工&#xff1a; 连接器Connector&#xff1a;处理 Socket 连接&#xff0c;负责网络字节流与 Request 和 Response 对象的转化。容器Container&#xff1a;加载和管理 Servlet&#xff0c;以及具体处理 Request 请求。 …

静态杂波滤波算法

静态杂波滤波算法 1.零速通道置零法2.动目标显示&#xff08;MTI&#xff09;3.相量均值相消算法&#xff08;平均相消算法&#xff09;4.总结 1.零速通道置零法 零速通道置零法&#xff0c;是指在2D-FFT&#xff08;速度维FFT&#xff09;后直接将R-V谱矩阵&#xff08;RD图&…