DataWhale 大数据处理技术组队学习task2
三、Hadoop分布式文件系统
1. 产生背景
-
数据量越来越大,一台独立的计算机已经无法存储所有的数据---->将大规模的数据存储到成百上千的计算机中------为了解决数据管理以及维护极其繁琐与低效------>分布式文件系统
-
分布式文件系统是管理网络中跨多台计算机存储的文件系统
-
GFS:谷歌公司开发了第一个大规模商业化应用的分布式文件系统
2. 概述
2.1 分布式文件系统简介
-
普通文件系统:一般会把磁盘空间划分为每512字节一组,称为“磁盘块”,它是文件系统读写操作的最小单位,文件系统的块(Block)通常是磁盘块的整数倍,即每次读写的数据量必须是磁盘块大小的整数倍(以块为单位进行读写)
-
分布式文件系统:也采用了块的概念,文件被分成若干个块进行存储,块是数据读写的基本单元,只不过分布式文件系统的块要比普通文件系统中的块大很多,比如,HDFS默认的一个块的大小是64MB,而且与普通文件系统不同的是,在分布式文件系统中,如果一个文件小于一个数据块的大小,它不会占用整个数据块的储存空间。(依然是块为基本单元,但块更大,同时,不满一个块的文件也不会占用整块存储空间,其他文件依然可以进行填充)
-
块比较大的目的:最小化寻址开销(HDFS寻址开销包括:磁盘的寻道开销和数据块的定位开销)
-
也不能太大:会影响并行的速度
-
设计:客户机/服务器(Client/Server)(客户端以特定的通信协议通过网络与服务器建立连接,提出文件访问请求,客户端和服务器可以通过设置访问权,来限制请求方对底层数据存储块的访问)
-
物理结构:由计算机集群中的多个节点构成的(节点分为两类)
- 主节点(Master Node)/名称节点(Name Node):负责文件和目录的创建、删除和重命名等,同时管理着数据节点和文件块的映射关系
- 从节点(Worker Node)/ 数据节点(DataNode):负责数据的存储和读取。
-
存储方式:多副本存储(文件被复制多次被放在不同的位置,从而能够保障数据的完整性)
-
2.2 HDFS简介
- **HDFS(Hadoop Distribute File System)**是大数据领域一种非常可靠的存储系统,它以分布式方式存储超大数据量文件,但它并不适合存储大量的小数据量文件。
- HDFS要实现的目标:
- **兼容廉价的硬件设备:**实现在硬件故障的情况下也能保障数据的完整性
- **流数据读写:**不支持随机读写的操作
- **大数据集:**数据量一般在GB、TB以上的级别
- **简单的文件模型:**一次写入、多次读取
- **强大的跨平台兼容性:**采用
Java
语言实现
- HDFS的局限性:
- 不适合低延迟数据访问:HDFS主要是面向大规模数据批量处理而设计的,采用流式数据读取,具有很高的数据吞吐率,但是,这也意味着较高的延迟,因此,HDFS不适合用在需要较低延迟(如数十毫秒)的应用场合。
- **无法高效存储大量小文件:**小文件是指文件大小小于一个块的文件,HDFS无法高效存储和处理大量的小文件,过多小文件会给系统扩展性和性能带来诸多问题:
- HDFS采用名称节点(NameNode)来管理文件系统的元数据,这些元数据被保存在内存中,使客户端可以快速获取文件实际存储位置。
- 用MapReduce处理大量小文件时,会产生过多的Map任务,线程管理开销会大大增加,因此处理大量小文件的速度远远低于处理同等大小的大文件的速度;
- 访问大量小文件的速度远远低于访问大文件的速度,因为访问大量小文件,需要不断从一个数据节点跳到另一个数据节点,严重影响性能。
- 不支持多用户写入及任意修改文件:HDFS只允许一个文件有一个写入者,不允许多个用户对同一个文件执行写操作,而且只允许对文件执行追加操作,不能执行随机写操作。
3. HDFS的体系结构
- 结构模型:主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点和若干数据节点
- 名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问
- 数据节点负责处理文件系统客户端的读/写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作
- 每个数据节点会周期性地向名称节点发送**“心跳"信息**,报告自己的状态,没有按时发送心跳信息的数据节点会被标记为“宕机”,不会再给它分配任何I/O请求。(用来判断数据节点是否正常工作的方式)
- 文件存储:一个文件被分为若干数据块----->若干数据块存储到若干数据节点上
- 访问:客户端-----文件名----->名称节点------根据文件名找到------>数据块 ------数据块存储信息------->数据节点的位置------节点位置信息------>客户端 —直接访问对应位置–>获得数据
4. HDFS的存储原理
4.1 数据的冗余存储
- 目的:保证系统的容错性和可用性
- 冗余存储的方式:多副本方式(即一个数据块的多个副本会被分布到不同的数据节点上)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FEVeGbzh-1676720254593)(null)]
- 优点:
- 加快数据传输速度:当多个客户端需要同时访问同一个文件时,可以让各个客户端分别从不同的数据块副本中读取数据,这就大大加快了数据传输速度,实现了并行操作。
- 容易检查数据错误:HDFS的数据节点之间通过网络传输数据,采用多个副本可以很容易判断数据传输是否出错。
- 保证数据的可靠性:即使某个数据节点出现故障失效,也不会造成数据丢失。
4.2 数据存取策略
4.2.1 数据存放
-
采用了以机架(Rack)为基础的数据存放策略。一个HDFS集群通常包含多个机架,不同机架之间的数据通信需要经过交换机或路由器,同一机架的不同机器之间数据通信不需要交换机或路由器,因此同一机架中不同机器之间的通信要比不同机架之间机器的通信带宽大。
-
HDFS默认每个数据节点都是在不同机架上的
- 缺点:
- 写入数据的时候不能充分利用同一机架内部机器之间的带宽
- 优点
- 可以获得很高的数据可靠性,即使一个机架发生故障,位于其他机架上的数据副本仍然可用
- 在读数据的时候,可以在多个机架上并行读取数据,大大提高了数据读取速度。
- 可以更容易实现系统内部负载均衡和错误纠正。
- 缺点:
-
HDFS默认的冗余复制因子是 3,每一个文件会被同时保存到 3 个地方,其中两份副本放在同一个机架的不同机器上面,第三个副本放在不同机架的机器上面。
-
HDFS副本的存放策略是:
- 如果是在集群内发起写操作请求,则把第1个副本放置在发起写操作请求的数据节点上,实现就近写入数据。如果是来自集群外部的写操作,则从集群内部挑选一台磁盘空间较为充足、CPU不太忙的数据节点,作为第1个副本的存放地。
- 第2个副本会被放置在与第1个副本不同的机架的数据节点上。
- 第3个副本会被放置在与第1个副本相同的机架的其他节点上。
- 如果还有更多的副本,则继续从集群中随机选择数据节点进行存放
4.2.2 数据读取
- HDFS提供了一个API,用于确定一个数据节点所属的机架的ID,客户端可以调用该API获取自己所属机架的ID。
4.2.3 数据复制
- 流水线复制:当客户端要向HDFS中写入一个文件时,这个文件会首先被写入本地,并被切分成若干个块,每个块的大小是由HDFS的设定值来决定。每个块都向HDFS集群中的名称节点发起写请求,名称节点会根据系统中各个数据节点的使用情况,选择一个数据节点列表返回给客户端,然后客户端就把数据首先写入列表中的第1个数据节点,同时把列表传给第1个数据节点,当第1个数据节点接收到一个块的数据的时候,将其写入本地,并且向列表中的第2个数据节点发起连接请求,把自己已经接收到的数据和列表传给第2个数据节点,当第2个数据节点接收到数据的时候,将其写入本地,并且向列表中的第3个数据节点发起连接请求,依次类推,列表中的多个数据节点形成一条数据复制的流水线。最后,当文件写完的时候,数据复制也同时完成。
4.3 数据错误与恢复
4.3.1 名称节点出错
- 保证名称节点安全的方式:
- 把名称节点上的元数据信息同步存储到其他文件系统中
- 运行一个第二名称节点,当名称节点宕机以后,利用第二名称节点中的元数据信息进行系统恢复(仍然会丢失部分数据)
- 一般是两者结合使用,当名称节点宕机时,首先到远程挂载的网络文件系统中获取备份的元数据信息,放到第二名称节点上进行恢复,并把第二名称节点作为名称节点来使用。
4.3.2 数据节点出错
- 每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态。当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自这些节点的“心跳”信息,这时,这些节点就会被标记为“宕机”,节点上面的数据都会被标记为“不可读”,名称节点不会再给它们发送任何I/O请求(与HDFS的体系结构下的内容一致)
4.3.3 数据出错
- 网络传输和磁盘错误等因素都会造成数据错误。客户端在读取到数据后,会采用
md5
和sha1
对数据块进行校验,以确保读取到正确的数据。在文件被创建时,客户端会对每一个文件块进行信息摘录,并把这些信息写入到同一个路径的隐藏文件里面。 - 当客户端读取文件的时候,会先读取该信息文件,然后,利用该信息文件对每个读取的数据块进行校验。如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块。
5. HDFS的数据读取过程
- 参考此链接
6. 编程实战(之后会统一完成)
参考自DataWhale学习资料
相关文章:
DataWhale 大数据处理技术组队学习task2
三、Hadoop分布式文件系统 1. 产生背景 数据量越来越大,一台独立的计算机已经无法存储所有的数据---->将大规模的数据存储到成百上千的计算机中------为了解决数据管理以及维护极其繁琐与低效------>分布式文件系统 分布式文件系统是管理网络中跨多台计算机…...
一文读懂select、poll、epoll的用法
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,…...
《C陷阱与缺陷》----词法“陷阱”
导言: 由于一个程序错误可以从不同层面采用不同方式进行考察,而根据程序错误与考察程序的方式之间的相关性,可以将程序错误进行划分为各种陷阱与缺陷: ①.词法“陷阱” ②.语法“陷阱” ③.语义“陷阱” ④.连接问题 ⑤.库函数问…...
千锋教育+计算机四级网络-计算机网络学习-04
UDP概述 UDP协议 面向无连接的用户数据报协议,在传输数据前不需要先建立连接;目地主机的运输层收到UDP报文后,不需要给出任何确认 UDP特点 相比TCP速度稍快些简单的请求/应答应用程序可以使用UDP对于海量数据传输不应该使用UDP广播和多播应用…...
蓝桥杯算法训练合集十四 1.P08052.P07053.同余方程4.P08015.ascii应用
目录 1.P0805 2.P0705 3.同余方程 4.P0801 5.ascii应用 1.P0805 问题描述 当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数&…...
判断字符串中的字符的类型isdecimal();isalpha();isdigit();isalnum()
【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断字符串中的字符的类型 isdecimal();isalpha();isdigit();isalnum() [太阳]选择题 对于代码中isdecimal()和isalnum()输出的结果是? s "ABc123&…...
VSCode远程调试Linux代码,python解释器配置
安装插件并配置 安装后找到插件图标,点击 点击SSH上的 号 在弹出框中输入命令:ssh usernameip -p port username: 远程服务器的用户名 ip: 远程ip port:端口号,没有可以不用 输入完毕后点击enter 选择ssh配置文件保存…...
03:入门篇 - CTK Plugin Framework 基本原理
作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 CTK Plugin Framework 技术是面向 C++ 的动态模型系统。该系统允许插件之间的松散耦合,并且提供了设计良好的方式来进行功能和数据的交互。此外,它没有预先对插件施加限制,这样就可以很容易地将插件的相关…...
面试攻略,Java 基础面试 100 问(九)
数组有没有 length()方法?String 有没有 length()方法? 数组没有 length()方法,有 length 的属性。String 有 length()方法。JavaScript 中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java混淆。 在 Java 中&…...
JavaScript 代码不嵌套主义
文章目录前言一、何为嵌套代码二、避免嵌套1.提炼抽取2.反转排列总结前言 看过不少过度嵌套的代码, 我真正意识到问题的严重性是刚入职那会, 我在一个老项目里看到了40个连续的else if, 套了6层的if, for和forEach, 因为我们并没有做什么限制代码嵌套的提前约定. 呃, 那之后认…...
使用默认参数的4大要点
概述 默认参数是C中新增的特性。在C中,可以为函数的参数指定默认值。调用函数时,如果没有指定实参,则自动使用默认参数。默认参数的基本语法这里就不作介绍了,下面重点介绍使用默认参数的一些知识要点。 基本规则 1、当函数中某个…...
Linux文件系统中的硬链接及常见面试题
如果能对inode的概念有所了解,对理解本文会有所帮助。如果对inode的概念不太清楚也没有关系,我们会捎带介绍一下。在文件系统的实现层面,我们可以认为包含两个组件:一个是包含数据块的池子,池子中的数据块是等大小的&a…...
opencv-StereoBM算法
原理解释目前立体匹配算法是计算机视觉中的一个难点和热点,算法很多,但是一般的步骤是:A、匹配代价计算匹配代价计算是整个立体匹配算法的基础,实际是对不同视差下进行灰度相似性测量。常见的方法有灰度差的平方SD(squ…...
图像分类竞赛进阶技能:OpenAI-CLIP使用范例
OpenAI-CLIP 官方介绍 尽管深度学习已经彻底改变了计算机视觉,但目前的方法存在几个主要问题:典型的视觉数据集是劳动密集型的,创建成本高,同时只教授一组狭窄的视觉概念;标准视觉模型擅长于一项任务且仅擅长于一项任务,并且需要大…...
Metasploit框架基础(一)
文章目录前言一、基础认知二、批量POC/EXP的构想三、poc检测框架的简单实现四、xray五、Meatsploit框架参考前言 Metasploit 一款渗透测试框架漏洞利用的集合与构建和定制满足你的需求的基础漏洞利用和验证的工具 这几个说法都是百度或者官方文档中出现的手法,说…...
pytorch零基础实现语义分割项目(二)——标签转换与数据加载
数据转换与加载项目列表前言标签转换RGB标签到类别标签映射RGB标签转换成类别标签数据数据加载随机裁剪数据加载项目列表 语义分割项目(一)——数据概况及预处理 语义分割项目(二)——标签转换与数据加载 语义分割项目&#x…...
python(8.5)--列表习题
目录 一、求输出结果题 二、计算列表元素个数 三、查找是否存在某元素 四、删除某元素 五、如何在列表中插入元素 六、如何从列表中删除重复的元素 七、 如何将列表中的元素按照从小到大的顺序排序 八、从列表中删除重复的元素 九、大到小的顺序排序 一、求输出结…...
rt-thread pwm 多通道
一通道pwm参考 https://blog.csdn.net/yangshengwei230612/article/details/128738351?spm1001.2014.3001.5501 以下主要是多通道与一通道的区别 芯片 stm32f407rgt6 1、配置PWM设备驱动相关宏定义 添加PWM宏定义 #define BSP_USING_PWM8 #define BSP_USING_PWM8_CH1 #d…...
C语言练习 | 初学者经典练习汇总
目录 1、下面代码输出多少,为什么? 2、你要好好学习么? 3、一直写代码, 4、两个数求最大值 5、输入1-5输出工作日,输入6-7输出休息日,其他输入错误 6、写一个输入密码的代码 7、怎么样当输入数字时候…...
华为OD机试 - 自动曝光(Python) | 机试题算法思路 【2023】
最近更新的博客 华为OD机试 - 卡片组成的最大数字(Python) | 机试题算法思路 华为OD机试 - 网上商城优惠活动(一)(Python) | 机试题算法思路 华为OD机试 - 统计匹配的二元组个数(Python) | 机试题算法思路 华为OD机试 - 找到它(Python) | 机试题算法思路 华为OD机试…...
「6」线性代数(期末复习)
🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录 第五章 相似矩阵及二次型 &2)方阵的特征值与特征向量 &3ÿ…...
1.1 硬件与micropython固件烧录及自编译固件
1.ESP32硬件和固件 淘宝搜ESP32模块,20-50元都有,自带usb口,即插即用. 固件下载地址:MicroPython - Python for microcontrollers 2.烧录方法 为简化入门难度,建议此处先使用带GUI的开发工具THonny,记得不是给你理发的tony老师. 烧录的入口是: 后期通过脚本一次型生成和烧…...
【MySQL进阶】视图 存储过程 触发器
😊😊作者简介😊😊 : 大家好,我是南瓜籽,一个在校大二学生,我将会持续分享Java相关知识。 🎉🎉个人主页🎉🎉 : 南瓜籽的主页…...
[Linux篇] Linux常见命令和权限
文章目录使用XShell登录Linux1.Linux常用基本命令:1.1 ls(列出当前的目录下都有哪些文件和目录)1.2 cd (change directory 切换目录)1.3 pwd(查看当前目录的绝对路径)1.4 touch(创建文件)1.5 ca…...
29岁从事功能测试被辞,面试2个月都找不到工作吗?
最近一个28岁老同学联系我,因为被公司辞退,找我倾诉,于是写下此文。 他是14年二本毕业,在我的印象里人特别懒,不爱学习,专业不好,毕业前因为都没找到合适工作,直接去创业了…...
【C#个人错题笔记1】
观前提醒 记录一些我不会或者少见的内容,不一定适合所有人 字符串拼接 int a3,b8; Console.WriteLine(ab);//11 Console.WriteLine("ab");//ab Console.WriteLine(a""b);//38 Console.WriteLine("ab"ab);//ab38 Console.WriteLine…...
基于lambda的mongodb查询插件
需求背景需要一个像mybatis plus 一样的基于lambda, 且面向对象的查询mongo数据的插件。在网上找了很久,没有发现有类似功能的插件。于是自己手写了一个,借助mongoTemplate屏蔽了底层查询语句的实现细节。在此基础上,实现了查询的统一封装。技…...
基于微信小程序的微信社团小程序
文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…...
GEE学习笔记 七十三:【GEE之Python版教程七】静态展示影像和动态展示影像
我们使用GEE在线编辑可以直接通过在线的网页可以加载展示我们计算的结果,而python版的GEE要展示我们的计算结果可能就比较麻烦。如果有同学看过GEE的python版API中可以找到一个类ee.mapclient,这个类的介绍是它是GEE官方通过Tk写的一个加载展示地图的类。…...
PGLBox全面解决图训练速度、成本、稳定性、复杂算法四大问题!
图神经网络(Graph Neural Network,GNN)是近年来出现的一种利用深度学习直接对图结构数据进行学习的方法,通过在图中的节点和边上制定聚合的策略,GNN能够学习到图结构数据中节点以及边内在规律和更加深层次的语义特征。…...
如何逐步提升网站权重/sem竞价外包公司
缓冲区如何让代码加速 文件读写流 接下来,我会以文件读取和写入字符流为例进行讲解。 Java 的 I/O 流设计,采用的是装饰器模式,当需要给类添加新的功能时,就可以将被装饰者通过参数传递到装饰者,封装成新的功能方法…...
做网站计划/我要下载百度
Back up 1,右键选中需要备份的数据库,Tasks-->Backup 2.General中,Destination,先remove掉之前的,然后再Add 需要注意的是,add的文件,必须要以.bak为后缀名,否则后面restore的话,…...
提供手机自适应网站公司/如何创建自己的网站
欢迎关注头条号:Java小野猫web项目部署到tomcat上之后,有时需要打断点单步调试,如果用的是Intellij idea,可以通过如下方法实现:开启debug端口,启动tomcat以tomcat7.0.75为例,打开bin目录下的ca…...
网站内容管理系统下载/淘宝推广运营
对口高考是什么?对口高考是指普通高校对口招收中等职业学校学生的入学考试,对口高考属于普通高校招生,与高中生参加的高考属于同一类型,考试时间相同,每年6月7~8日,都是由教育主管部门按照一定程序统一组织的考试。与普通高考考上的大学性质完全相同。面向职业院校…...
php创建网站/企业整站优化
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、Dart中函数定义内置函数自定义函数二、函数传参可选参数默认参数命名参数函数作为参数进行传递三、特别函数箭头函数自执行函数函数闭包总结前言 本篇是笔者…...
flash 可以做网站吗/大数据免费查询平台
我这边有三个库,分别是:k1,k2,k3.分别在不同的网络,其中k2为中间交换库,上面有DBLINK分别到k1和k3开发经常做一个操作就是:insert into table1k1 (select tt.*,null from table1k3 tt where xxxx201510);从k3的表中筛选…...