简述hdfs工作原理_HDFS原理概念扫盲
1、概述
hdfs文件系统主要设计为了存储大文件的文件系统;如果有个TB级别的文件,我们该怎么存储呢?分布式文件系统未出现的时候,一个文件只能存储在个服务器上,可想而知,单个服务器根本就存储不了这么大的文件;退而求其次,就算一个服务器可以存储这么大的文件,你如果想打开这个文件,效率会高吗
hdfs的出现就是为了解决上面的问题
hdfs为了满足大文件的存储和可读性,对数据进行切成多个小块进行存储,同时为了保证数据的可靠性,又对每个小块数据做复制,然后分别存储到多个节点中
hdfs2.7.3后,默认每个块的大小是128MB,在hdfs1.0的时候,默认每个块的大小是64MB
可以通过修改hdfs的配置文件自定义块大小
hdfs-site.xml文件中的dfs.blocksize
默认每个块的副本数是3,可以通过修改hdfs的配置文件自定义副本数
hdfs-site.xml的dfs.replication
二、hdfs的结构体系
hdfs是一个分布式的文件系统,采用主从(master/slave)的结构体系,一个hdfs集群由NameNode和多个datanode组成,其中namenode作为主节点,DataNode为从节点
Namenode简称NN
DataNode简称DN
NN的作用
a、存储元数据信息
b、元数据存储两份,一份在内存中,一份在硬盘中
c、保存文件、block、datanode的映射关系
DN的作用
a、存储block信息
b、block存储在硬盘中
c、维护block和文件的映射关系
数据存储在内存中是为了读取性能,保证效率,数据存储在硬盘中,为了持久化数据,保证数据不丢失
三、hdfs的优缺点
1、hdfs的优点
a、支持超大文件
支持超大文件,这里的超大文件几百MB,几百GB,甚至TB级别大小的文件,一般来说hadoop的文件系统会存储TB级别或者 PB级别的数据,所以在企业节点中,数据节点可能有上千个
b、检测和快速 应对 硬件故障
在集群中 环境中,硬件故障是常见的问题,因为 有上千台服务器,这样会导致高故障率,因此故障检测和自动 恢复 是hdfs文件系统 的一个设计目标
c、流式数据访问
Hdfs的数据处理规模比较大,应用一次要 访问大量的 数据,同时这些应用一般都是批量处理,而不是用户交互式 处理,应用程序能以流的形式访问数据集,主要是数据的吞吐量,而不是访问速度;适合做离线数据的处理
d、简化的一致性模型
大部分 hdfs操作文件时,需要一次 写入,多次读取,在 hdfs文件系统中,一个文件块一旦经过 创建,写入,关闭后就不允许 修改了,在hdfs2.7后 ,才允许对block进行追加修改,但是不能改变已有的数据,这样简单的一致性模型,保证数据操作的简单化
e、高容错性
数据自动保存多个 副本,副本丢失自动恢复
f、可构建在廉价的机器上
构建在廉价的机器上,可以启动通过扩展机器 个数里线性提高存储能力
2、hdfs的缺点
a、低延迟数据访问
低延迟数据 ,如果用户进行交互的应用,比如京东,需要数据在毫秒后者秒级范围内得到响应,由于 hadoop对高吞吐 模型 做了优化,牺牲了获取数据的延迟,所以对于低延时的应用,不适合 用hadoop,而且hdfs的数据也不是结构化的数据
b、不适合大量小文件
Hdfs支持超大的文件,是通过数据分别在不同的数据节点,数据的元数据保存在namenode上,namenode的内存大小决定了hdfs可以保存的文件数量,虽然现在 内存已经很大,但是大量的 小文件还是会 影响namenode的节点性能,每个block会占用一片内存空间
c、不支持多次写入文件,修改文件
为了保证吞吐量,设计为这样
四、hdfs的技术细节
1、Block
数据块(block)是hdfs存储文件的基本单位
在hdfs中,有一个特别重要的概念,数据块(block),前面介绍过,在hdfs存储的文件都是超大数据的文件,我们可以把这个超大规模的文件以一个标准切分成几块,分别存储到不同的磁盘上,这个标准就是block
a、为了存储大文件,一个服务器很难存储超大型的文件,拆分的话,文件块可以保存在不同的磁盘,在hdfs文件系统中,一个文件可以分成不同的block存储在不同的磁盘上
b、简化存储系统,这样就不需要管理文件,而是直接管理文件块就可以了
c、有利于数据的复制,在hdfs系统中,一个block块一般会复制三份(可以修改),比如复制一个1TB的数据和复制多个128MB的文件复制哪个更快?
对于一个文件而言,一个block id从0开始,按照固定的大小,顺序对文件进行划分和编号,划分好的每一块称一个block。Hdfs默认的block的大小是128MB,所以一个256MB的文件,共有256/128=2个块
不同于普通的文件系统(比如ext4或者ntfs),hdfs中,如果一个文件小于一个数据块的大小,并不用占用整个数据存储空间,而是仅仅会占用文件实际大小的空间
2、Namenode
Namenode是维护hdfs中的元信息,包括文件和block之间的映射关系,block数量的信息,block和datanode之间的关系信息,数据格式参照入下
Filename replicas block-ids id2host/test/log,3,{b1,b2},{b1:[host0,host1,host2]} ,{b2:[host3,host4,host5]}
Namenode中的元数据信息存储在内存/磁盘中,内存中为实时信息,磁盘中为数据的持久化存储使用使用
在磁盘中存储的信息主要下面两个
fsimage:元数据的镜像文件,存储namenode元数据信息
edit:操作日志文件(比如你上次,追加内容,这里只有写操作的日志,读操作不会记录)
下面重点讲一下这2个文件流程
上面的流程如果明白了,就会发现有2个问题
a、一般namenode会持续运行,不会被启动,那么edit文件会增长很大,这个时候就不好管理
b、如果edit文件增长到很大,那么每次namenode启动合并edit文件和fsimage就会很久,那namenode启动就会很慢
这个时候就有了SNN(second NameNode)
听名字,大家以为SNN是NN的热备份,其实SNN是NN的协助者,帮助进行元数据合并的
a、SNN会定时通过http的get方法从NN获取最新的edit和fsimage文件
b、然后NN会生成一个空的edit文件,该文件继续接受client的i写请求操作日志
c、SNN拿到最新的edit文件和fsimage文件,进行合并,生成最新的fsimage文件
d、SNN通过http的post方法把最新的fsimage文件发送到NN
e、这样就把上面那2个文件解决了
触发checkpoint的条件有3个
a、默认是3600s合并一次,可以通过修改fs.checkpoint.period自定义
b、根据edit.log文件的大小触发合并,默认是64MB会触发合并,可以通过修改fs.checkpoint.size自定义
3、Datanode
在hadoop中,数据是存放在datanode上面的,是以block的形式存储的,datanode节点会不断的向namenode节点发送心跳报告,初始化,每个数据节点将当前存储的数据告知namenode节点,通过向namenode主动发送心跳保持联系,3s会发送一次
Datanode节点在工作的过程中,数据节点仍会不断的更新namenode节点与之对应的元数据信息,并接受来自namenode节点的指令,创建,移动或者删除本地磁盘上的数据块
如果10min都没有收到nd的心跳,则认为其已经挂了,并copy其上的block到其他dn
五、hdfs的执行流程
1、读数据流程
a、client向远程namenode发起读请求
b、NN会视情况返回文件的部分或者全部block列表,对于每个block,namenode都会返回该block的地址和副本的DN的地址
c、客户端会选取最接近的DN来读取block
d、读取完当前的block的数据后,关闭与当前的DN的连接,并为读取下一个block寻找最佳的DN
e、当读完列表的block后,且文件读取还没有结束,客户端会继续向NN获取下一批的block列表
f、读取完一个block都会进行checksum验证,如果读取的时候出现错误,client会通知NN,然后在从下一个拥有该block块的DN继续读取数据
2、写数据流程
a、client向namenode发起写请求
b、NN会检查路径是否存在、权限是否正确、文件是否存在
c、条件满足后,client开始写入文件,首先开发库会将文件拆分成多个packets,并在内部以数据队列的形式来管理这些packet,并向NN申请新的blocks,获取用来存储block和副本的DN的列表,
d、开始已经pipiline(管道)的形式将packet写入到第一个DN中,当第一个DN写入成功后,在将其传递给下一个DN,直到最后一个DN存储完成
e、然后开始上传下一个packet
3、删除流程
a、现在NN上执行节点名字的删除
b、当NN上执行delete方式时,他这是标记操作涉及需要被删除的数据块,而不是主动联系这些数据块所在的DN节点
c、当保存这些数据库的DN节点向NN节点发送心跳时,在心跳应答里,NN会向DN发出指令,从而把数据删除
d、所以在执行delete方法后一段时间内,数据块才会被删除掉
六、hdfs常见命令
1、查看当前的目录信息
[root@abdi1 current]# hdfs dfs -ls /
Found 9 items
drwxrwxrwt - yarn hadoop 0 2019-12-03 09:59 /app-logs
drwxr-xr-x - yarn hadoop 0 2019-12-03 09:56 /ats
drwxr-xr-x - hdfs hdfs 0 2019-12-03 09:57 /atsv2
drwxr-xr-x - hdfs hdfs 0 2019-12-03 09:56 /hdp
drwxr-xr-x - mapred hdfs 0 2019-12-03 09:56 /mapred
drwxrwxrwx - mapred hadoop 0 2019-12-03 09:58 /mr-history
drwxr-xr-x - hdfs hdfs 0 2019-12-03 09:57 /services
drwxrwxrwx - hdfs hdfs 0 2019-12-03 09:56 /tmp
drwxr-xr-x - hdfs hdfs 0 2019-12-03 09:57 /user
2、创建目录
[root@abdi1 current]# hdfs dfs -mkdir /test
[root@abdi1 current]# hdfs dfs -ls /
Found 10 items
drwxrwxrwt - yarn hadoop 0 2019-12-03 09:59 /app-logs
drwxr-xr-x - yarn hadoop 0 2019-12-03 09:56 /ats
drwxr-xr-x - hdfs hdfs 0 2019-12-03 09:57 /atsv2
drwxr-xr-x - hdfs hdfs 0 2019-12-03 09:56 /hdp
drwxr-xr-x - mapred hdfs 0 2019-12-03 09:56 /mapred
drwxrwxrwx - mapred hadoop 0 2019-12-03 09:58 /mr-history
drwxr-xr-x - hdfs hdfs 0 2019-12-03 09:57 /services
drwxr-xr-x - root hdfs 0 2019-12-09 16:31 /test
drwxrwxrwx - hdfs hdfs 0 2019-12-03 09:56 /tmp
drwxr-xr-x - hdfs hdfs 0 2019-12-03 09:57 /user
3、上传文件到hdfs
[root@abdi1 current]# hdfs dfs -put ./aaaaaaaa /test
[root@abdi1 current]# hdfs dfs -ls /test
Found 1 items
-rw-r--r-- 3 root hdfs 0 2019-12-09 16:32 /test/aaaaaaaa
4、下载文件到本地文件系统
[root@abdi1 current]# hdfs dfs -get /test/aaaaaaaa /
[root@abdi1 current]# ls /
aaaaaaaa bin boot cgroups_test dev etc home lib lib64 lost+found media mnt opt proc root run sangfor sbin srv sys tmp usr var
5、删除hdfs的文件,默认会把文件放到回收站中
[root@abdi1 current]# hdfs dfs -rm /test/aaaaaaaa
19/12/09 16:35:18 INFO fs.TrashPolicyDefault: Moved: 'hdfs://abdi1/test/aaaaaaaa' to trash at: hdfs://abdi1/user/root/.Trash/Current/test/aaaaaaaa
[root@abdi1 current]# hdfs dfs -ls /test
6、从hdfs的一个目录拷贝到另外一个目录
[root@abdi1 current]# hdfs dfs -put ./aaaaaaaa /test
[root@abdi1 current]# hdfs dfs -mkdir /test1
[root@abdi1 current]# hdfs dfs -ls /test1
[root@abdi1 current]# hdfs dfs -ls /test
Found 1 items
-rw-r--r-- 3 root hdfs 0 2019-12-09 16:36 /test/aaaaaaaa
[root@abdi1 current]# hdfs dfs -cp /test/aaaaaaaa /test1
[root@abdi1 current]# hdfs dfs -ls /test1
Found 1 items
-rw-r--r-- 3 root hdfs 0 2019-12-09 16:37 /test1/aaaaaaaa
[root@abdi1 current]#
7、查看文件内容
[root@abdi1 current]# echo aaaa >> c.txt
[root@abdi1 current]# cat c.txt
aaaa
[root@abdi1 current]# hdfs dfs -put ./c.txt /test
[root@abdi1 current]# hdfs dfs -cat /test/c.txt
aaaa
简述hdfs工作原理_HDFS原理概念扫盲相关推荐
- 简述hdfs工作原理_hdfs工作机制和原理 简述hdfs的原理
Hadoop如何快速入门? 总之,我对Hadoop的理解. 从狭义上讲, Hadoop版本1.X是HDFS MapReduce Hadoop版本2.X是HDFS纱线MapReduce 广义上讲,Had ...
- 一图看懂hadoop分布式文件存储系统HDFS工作原理
一图看懂hadoop分布式文件存储系统HDFS工作原理 转载于:https://www.cnblogs.com/AlexQY/p/9856477.html
- php中mvc的工作原理,简述MVC工作原理
简述MVC工作原理 1.由客户端发起请求:2.服务端接收请求,并解析请求:3.根据解析出来的请求,找到对应的控制器,并执行控制器:4.控制器调用模型获取数据,并将数据传给视图:5.视图将数据渲染出来. ...
- 第四天 hadoop HDFS上传下载原理
HDFS上传下载原理 一.HDFS数据流向模型(上传和下载) 1>网络拓扑结构和机架感知 <2>上传操作数据流向模型 <3>下载操作数据流向模型 二.NameNode和S ...
- JAVA基础加强(张孝祥)_类加载器、分析代理类的作用与原理及AOP概念、分析JVM动态生成的类、实现类似Spring的可配置的AOP框架...
1.类加载器 ·简要介绍什么是类加载器,和类加载器的作用 ·Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader ...
- 初步掌握HDFS的架构及原理
原文链接:http://www.cnblogs.com/codeOfLife/p/5375120.html 目录 HDFS 是做什么的 HDFS 从何而来 为什么选择 HDFS 存储数据 HDFS 如 ...
- HDFS读写数据的原理
目录 1 概述 2 HDFS写数据流程 3 HDFS读数据流程 目录 最近由于要准备面试,就把之前学过的东西好好整理下,权当是复习. 下面说下HDFS读写数据的原理. 1 概述 HDFS集群分为两大角 ...
- 建矩阵力学奠基新量子论 不确定原理颠覆经典概念|量子群英传
建矩阵力学奠基新量子论 不确定原理颠覆经典概念|量子群英传 "大师之师"索末菲是旧量子论的最后守卫者,他在慕尼黑大学的"理论物理摇篮",却摇出了海森堡这位新量子 ...
- 打怪升级之小白的大数据之旅(四十六)<HDFS各模块的原理>
打怪升级之小白的大数据之旅(四十六) HDFS各模块的原理 上次回顾 上一章,我们学习了HDFS的基本知识以及一些常用的操作,本章,我们对HDFS各模块的原理进行讲解,了解清楚这些,可以更好的辅助我们 ...
- HDFS数据负载均衡原理
HDFS负载均衡 Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,例如:当集群内新增.删除节点,或者某个节点机器内硬盘存储达到饱和值.当数据不平衡时,Map任务可能会分配到 ...
最新文章
- Vue 过渡组件,可实现组件或者页面的动画过渡或者css过渡
- linux svn安装和配置
- loj #143. 质数判定
- function $(id) {}表示什么函数
- ISO 5 Lecture for Micro-Macro Interactions
- 区块链创业的成功范式,人工智能不得不学
- 最少预算覆盖最多应用,高性价比小企业服务器服务器榜单
- MySQL sql99语法介绍
- ajax传输文件大小有没有限制_巧改文件扩展名,1秒解除微信传输文件大小限制!...
- 在Ubuntu下rtorrent编译安装笔记
- 如何在cmd命令提示符里打开Python
- 成功激活windows server 2008 sp2!
- html 怎么设置时间函数,JavaScript日期函数 - 计时器、innerHTML
- c语言遗传算法实例ppt,遗传算法的C语言程序案例.doc
- 使用Underscore.js的template将Backbone.js的js代码和html代码分离
- 如何删除Word中的边框线
- ArcGIS教程:启用数据驱动页面
- Numpy图解(三)--高维数组
- index.php.bak 颓废_CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现
- 菌群最新资讯热评 | 菌群与癌症免疫疗法,菌群与消毒剂
热门文章
- [地图代数]处理DEM中的高程异常值——ArcGIS栅格计算的应用
- 使用JAVA调用MATLAB算法程序方式——使用复杂算例进行完整说明,包括参数传递
- 安装ANSYS19.0的正确方法(附下载)
- (原创)十大危险cmd命令代码总结
- 单片机仿真软件Proteus8.0的安装及使用
- 系统分析师考试经验分享
- 永久使用卡巴斯基的方法
- 沟通CTBS助华盛集团实现财务集中管理
- PSP,CPS1街机模拟器终于出来了(CAPCOM CPS1 Emulators for the PSP),完美!
- 传奇SF专用DBC2000数据库系统安装教程