2.HDFS

news/2024/11/13 10:10:56/文章来源:https://www.cnblogs.com/swh666/p/18404627

HDFS

一.HDFS概述

1.HDFS的产生背景和定义

(1)HDFS产生背景

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

(2)HDFS定义

HDFS是一个文件系统,用于存储文件,通过目录树来定位文件;其次,他是 分布式的,有很多服务器联合起来实现其功能,集群中的服务器有各自的 角色

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

2.优缺点

优点:

(1)高容错性

A.数据自动保存多个副本.它通过增加副本的形式,提高容错性

B.某一个人副本丢失以后,它可以自动恢复

(2)适合处理大数据

A.数据规模:能够处理数据规模达到GB,TB,甚至PB级别的数据

B.文件规模:能够处理百万规模以上的文件数量,数量相当之大

(3)可构建在廉价的机器上,通过多副本机制,提高可靠性

缺点:

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

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

A.存储大量小文件,他会占用namenode大量的内存来存储文件目录和块 信息.这样是不可取的,因为namenode的内存总是有限的

B.小文件存储的寻址时间会超过读取时间,他违反了HDFS的设计目标

(3)不支持并发写入,文件随机修改

A.一个文件只能有一个写,不允许多个线程同时写

B.仅支持数据append(追加),不支持文件的随机修改

3.组成

(1)namenode(nn):就是master,他是一个主管,管理者

A.管理HDFS的名称空间

B.配置副本策略

C.管理数据块(block)映射信息

D.处理客户端读写请求

(2)datanode:就是slave.namenode下达命令,datanode执行实际的操作

A.存储实际的数据块

B.执行数据块的读写操作

(3)Client:就是客户端

A.文件切分.文件上传HDFS的时候,Client将文件切分成一个一个的 block,然后进行上传

B.与namenode交互,获取文件的位置信息

C.与datanode交互,读取或者写入数据

D.client提供一些命令来管理HDFS,比如namenode格式化

E.client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作

(4)Secondarynamenode:并非namdenode的热备.当namenode挂掉的时候,它并 不能马上替换namenode并提供服务

A.辅助namenode,分担其工作量,比如定期合并fsimage和edits,并推给 namenode

B.在紧急情况下,可辅助恢复namenode

4.文件块大小(面试重点)

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

(1)集群中的block:block1,block2...

(2)如果寻址时间约为10ms,及查找到目标block的时间为10ms

(3)寻址时间为传输时间的1%时,则为最佳状态.因此传输时间=10ms/0.01=1s

(4)目前磁盘的传输速率普遍为100ms

思考:为什么块的大小不能设置太小,也不能设置太大

(1)HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始位置

(2)如果块设置太大,从磁盘传输数据的时间会明显大于定位这个块开始位置 所需时间.导致程序在处理这块数据时,会非常慢

总结:HDFS块的大小主要取决于磁盘传输速率

二.HDFS的shell操作(开发重点)

1.基本语法

hadoop fs -具体命令

hdfs dfs -具体命令

2.命令大全

3.常见命令实操

3.1.准备工作

(1)启动hadoop集群

(2)-help:输入这个命令参数

(3)准备/sanguo文件夹

3.2.上传

(1)-moveFromLocal:从本地剪切粘贴到HDFS

(2)-copyFromLocal:从本地文件系统中拷贝文件到HDFS路径

(3)-put:等同于copyFromLocal,生产环境更习惯用put

(4)-appendToFile:追加一个文件到已经存在的文件末尾

3.3.下载

(1)-copyToLacol:从HDFS拷贝到本地

(2)-get:等同于copyToLoacl,生产环境习惯用get

3.4.HDFS直接操作

(1)-ls:显示目录信息

(2)-cat:显示文件内容

(3)-chgrp,-chmod,-chown:linux文件系统中的用法一样,修改文件所属权限

(4)-mkdir:创建路径

(5)-cp:从HDFS的一个路径拷贝到HDFS的另一个路径

(6)-mv:在HDFS目录中移动文件

(7)-tail:显示一个文件的末尾1kb的数据

(8)-rm:删除文件或文件夹

(9)-rm -r:递归删除目录及目录里的内容

(10)-du:统计文件夹的大小信息

(11)-setrep:设置HDFS中文件的副本数量

三.HDFS的api操作

1.客户端环境准备

(1)将windows所需的依赖放到非中文路径中(E:\software\hadoop-3.1.1)

(2)配置HADOOP_HOME环境变量

(3)在IDEA中创建一个maven工程,导入依赖坐标+日志添加

2.HDFS的api操作实例

封装相同的步骤

2.1.HDFS文件上传(测试参数优先级)

(1)文件的上传

(2)将hdfs-site.xml拷贝到项目的resources资源目录下

(3)参数优先级

参数优先级排序:A.客户端代码中设置的值>B.ClassPath下的用户自 定义配置文件>C.服务器的自定义配置(xxx.site.xml)>D.服务器 的默认 配置(xxx-default.xml)

2.2.HDFS文件下载

2.3.HDFS文件更名和移动

2.4.HDFS删除文件和目录

2.5.HDFS文件详情查看

2.6.HDFS文件和文件夹判断

四.HDFS的读写操作(面试重点)

1.HDFS写数据流程

1.1.剖析文件写入

1.2.网络拓扑-节点距离计算

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

节点距离:两个节点到达最近的共同祖先的距离总和

例如,假设有数据中心d1机架r1中的节点n1.该节点可以表示为 /d1/r1/n1.利用这种标记,这里给出了四种距离描述

1.3.机架感知(副本存储节点选择)

(1)机架感知说明

A.官方

B.源码

Ctrl+n查找blockplacementpolicydefault,在该类中查找 choosetargetinorder方法

(2)副本节点选择

2.HDFS读数据流程

读数据的时候选择哪个节点考虑两个因素:(1)距离最近(2)负载均衡

五.namenode和secondarynamenode

1.NN和2NN工作机制

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

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

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

(1)第一阶段:namenode启动

A.第一次启动nn格式化后,创建fsimage和edits文件.如果不是第一次 启动,直接加载编辑日志和镜像文件到内存

B.客户端对元数据进行增删改的请求

C.nn记录操作日志,更新滚动日志

D.nn在内存中对元数据进行增删改

(2)第二阶段:2nn工作

A.2nn询问nn是否需要checkpoint.直接带回nn是否检查结果

B.2nn请求执行checkpoint

C.nn滚动正在写的edits日志

D.将滚动前的编辑日志和镜像文件拷贝到2nn

E.2nn加载编辑日志和镜像文件到内存,并合并

F.生成新的镜像文件fsimage.chkpoint

G.拷贝fsimage.chkpoint到nn

H.nn将fsimage.chkpoint重新命名成fsimage

2.fsimage和edits解析

2.1.概念

nn被格式化之后,将在 目录中产生如下文件

(1)fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含 HDFS文件系统的所有目录和文件inode的序列化信息

(2)edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户 端执行的所有写操作首先会被记录到edits中

(3)seen_txid文件保存的是一个数字,就是最后一个edits_的数字

2.2.操作

(1)oiv查看fsimage文件

A.查看oiv和oev命令

B.基本语法

hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径

C.案例实操

(2)oev查看edits日志

A.基本语法

hdfs ove -p 文件类型 -i 编辑日志 -o 转换后文件输出路径

B.案例实操

3.checkpoint时间设置

(1)通常情况下,2nn每隔一小时执行一次

(2)一分钟检查一次操作次数,当操作次数达到1百万时,2nn执行一次

六.Datanode

1.dn工作机制

(1)一个数据块在dn上以文件的形式存储在磁盘上,包括两个文件,一个是数 据本身,一个是元数据包括数据块的长度,快数据的校验和,以及时间戳

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

dn向nn汇报当前解读信息的时间间隔,默认为6小时

Dn扫描自己节点块信息列表的时间,默认6小时

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

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

2.数据完整性

思考:如果电脑磁盘里面存储的数据是控制高铁信号灯的红灯信号(1)和绿灯 信号(0),但是存储该数据的磁盘坏了,一直显示是绿灯,是否很危险?同理节点 上的数据损坏了,却没有发现,是否也很危险,那么如何解决

如下是datanode节点保证数据完整性的方法:

A.当dn读取block的时候,他会计算checksum

B.如果计算后的clecksum,与block创建时值不一样,说明block已经损 坏

C.client读取其他dn上的block

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

E.dn在其文件创建后周期验证clecksum

3.掉线时限参数设置

需要注意的是hdfs-site.xml配置文件中的heartbeat.recheck.interval的 单位为 毫秒,dfs.hearbeat.interval的单位为秒

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

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

相关文章

编译hello world

新建一个文件夹存放代码 在文件夹内新建一个java文件。hello.java 在文件内编写代码public class hello{public static void main(String[] args){System.out.print("hello world!");} }编译java文件,在文件目录下打开命令提示符窗口,输入:javac hello.java编译ja…

海外合规|新加坡 【数据保护新风向】你的DPO注册了吗?

数据安全已经成为了我们不可忽视的重要议题。新加坡个人数据保护委员会(PDPC)提醒,2024年9月30日之前,根据新加坡的个人资料保护法(PDPA),每个组织都必须指定至少一名数据保护官(DPO)来确保数据的合规使用。 DPO注册相关问题: 1、是否必须通过BizFile+注册我组织的DP…

Linux脚本中 指令返回值得获取,以及参数等获取

在写脚本时,经常遇到这样的问题: 如何获取当前进程号,脚本执行过的命令的进程号? 如何获取当前时间? 如何得到参数个数? 如何得到脚本中各命令的返回信息?。。。。 其实这些信息都能轻松从shell预定义的一些特殊变量获得,下面总结了一些常用的。特殊的shell变量:#获取当…

51nod 1296 有限制的排列

题目链接 学习链接 设状态 \(dp[i][j]\) 表示整数 \([1,i]\) 满足要求的排列中,最后一个数选 \(j\) 的排列数。 开一个数组记录他的状态:把前面已选好的序列中大于等于 \(j\) 的数都加一后再把 \(j\) 加到后面。#include <bits/stdc++.h> using namespace std; #define…

canvas版本中国象棋,象棋的棋子控制还是复杂一些

代码:<!Doctype html> <html lang="zh_cn"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>中国象棋</title><meta name="Keywords" content="&q…

yolo与目标检测(v1-v5)

yolo v1-v5与目标检测 深度学习经典检测方法概述 目标检测的两种方法从yolov1开始讲解,v2,v3都是在此基础上 单阶段目标检测,需要输出的就是四个值(x,y,w,h) 这样看起来很像是一个回归任务而双阶段目标检测,是先选出候选区域,在进行预测,具体细节可以看完之前文章,物体检…

Hadoop(二)Hadoop概述

概述 Hadoop是什么Hadoop是一个由Apache基金会所开发的分布式系统基础架构 分布式系统:多台服务器共同完成一个任务(例如多台计算机共同存储一份大数据) 主要解决:海量数据的存储和海量数据的分析计算问题 广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈Hado…

出库申请单、其他出库单套件使用指南

出库申请单、其他出库单套件使用指南 出库申请单使用套件需要把业务类型​修改为空 点击套件展开或者保存时会自动展开套件​​ ‍ 其他出库单 如图,套件的单据,新明细会出现在第一个标签,只有一个删除行的功能。 修改新明细​中的数量会自动联动到明细信息​中 ​​ ‍博客…

程序安装:不会安装该公布程序,因为它可能不安全,请与管理员联系解决办法

程序安装:不会安装该公布程序,因为它可能不安全,请与管理员联系解决办法 删除注册表中Products下的项。该方法确实能解决问题,但为防止误删其他软件注册信息,将此法作如下改进,发现依然好使: 将注册表中 HKEY_CURRENT_USER \ Software \ Microsoft \ Installer \ Produc…

KernelWarehouse:英特尔开源轻量级涨点神器,动态卷积核突破100+ | ICML 20242A

动态卷积学习n个静态卷积核的线性混合,加权使用它们输入相关的注意力,表现出比普通卷积更优越的性能。然而,它将卷积参数的数量增加了n倍,因此并不是参数高效的。这导致不能探索n>100的设置(比典型设置n<10大一个数量级),推动动态卷积性能边界提升的同时享受参数的…

tarjan—算法的神(一)cw

本篇包含 tarjan 求强连通分量、边双连通分量、割点 部分, tarjan 求点双连通分量、桥(割边)在下一篇。伟大的 Robert Tarjan 创造了众多被人们所熟知的算法及数据结构,最著名的如:(本文的)连通性相关的 tarjan 算法,Splay-Tree,Toptree,tarjan 求 lca 等等。 注:有…

【微信小程序反编译】入门1

原创 zkaq - Tobisec 掌控安全EDU一、前言 这几天在跟着师傅一起学习微信小程序的相关知识点,前面的微信小程序的漏洞挖掘蛮简单的,但是到后面需要黑盒测试了,就需要我们对小程序进行一个反编译,进行一个代码审计相关的知识点了。 小程序的反编译相关工具有好几个,下面我给…