HDFS分布式文件存储系统详解
HDFS简介
一、HDFS:Hadoop Distributed File System
1. 一个分布式文件系统
2. 基于流数据模式访问和处理超大文件的需求而开发的
3. 适合应用在大规模数据集上
1.处理超大文件
能用来存储管理PB级的数据 1PB = 1024TB
2.处理非结构化数据、半结构化数据、结构化数据
流式的访问数据
一次写入、多次读取
3.运行于廉价的商用机器集群上
可运行在低廉的商用硬件集群上
故障时能继续运行且不让用户察觉到明显的中断
局限性/缺点:
对于低延时的访问需求,HBase是更好的选择
小文件会给Hadoop的扩展性和性能带来严重问题
利用SequenceFile、MapFile等方式归档小文件
3.不支持多用户对一个文件同时写入及任意修改文件
只有一个写入者,只能执行追加操作
不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改
HDFS特性
一、高容错,可扩展性及可配置性强
二、跨平台
三、shell命令接口
四、机架感知功能
五、负载均衡
六、Web界面
HDFS目标
1.检测和快速恢复硬件故障
故障的检测和快速自动恢复是HDFS的一个核心目标
2.流式数据访问
设计成适合进行批量处理
重视数据吞吐量,而不是数据访问的反应速度
3.大规模数据集
支持大文件存储
一个单一的HDFS实例能支撑数以千万计的文件
4.简化一致性模型
对文件实行一次性写入,多次读取的访问模式
5.移动计算代价比移动数据代价低
一个应用请求的计算,离它操作的数据越近就越高效,这在数据达到海量级别的时候更是如此
6.可移植性
HDFS在设计时就考虑到平台的可移植性,这种特性方便了HDFS作为大规模数据应用平台的推广
7.通信协议
所有的通信协议都是在TCP/IP协议之上的
HDFS核心设计
数据块(Block)
数据块是HDFS上最基本的存储单位
HDFS块默认大小为128M (2.0为128M,1.0为64M)
小于一个块大小的文件不会占据整个块的空间
hadoop fsck /sogou.500w.utf8 -files -locations -blocks
对块进行抽象会带来的好处
一个文件的大小可以大于网络中任意一个磁盘的容量
使用块抽象而不是文件可以简化存储子系统
块非常适合用于数据备份进而提供数据容错能力和可用性
数据块复制
HDFS为了做到可靠性(reliability)创建了多份数据块(计算节点中(compute data blocks)的复制(replicas),并将它们放置在服务器群的nodes),MapReduce就可以在它们所在的节点上处理这些数据了。
HDFS将每个文件存储成块(Block)序列
每个文件的Block大小和复制(Replication)因子都是可配置的 hdfs-site.xml
数据副本的存放策略
数据分块存储和副本的存放,是保证可靠性和高性能的关键
将每个文件的数据进行分块存储
每一个数据块又保存有多个副本
这些数据块副本分布在不同的机器节点上
在多数情况下,HDFS默认的副本系数是3
Hadoop默认对3个副本的存放策略
第一块:在本机器的HDFS目录下存储一个Block
第二块:不同Rack(机架)的某个DataNode上存储一个Block
第三块:在该机器的同一个Rack下的某台机器上存储最后一个Block
更能多副本:随机节点
如图所示:
设置集群Block的备份数
方法一:配置文件hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
方法二:通过命令修改备份数
bin/hadoop fs -setrep -R 1 /
注意:方法二可以改变整个HDFS里面的备份数,不需要重启HDFS系统,
而方法一需要重启HDFS系统才能生效。
安全模式(SafeMode)
安全模式是Hadoop集群的一种保护模式
NameNode在启动时会自动进入安全模式,也可以手动进入。
当系统处于安全模式时,会检查数据块的完整性。
用命令来操作安全模式
hadoop dfsadmin -safemode leave //强制NameNode退出安全模式
hadoop dfsadmin -safemode enter //进入安全模式
hadoop dfsadmin -safemode get //查看安全模式状态
hadoop dfsadmin -safemode wait //等待,一直到安全模式结束
负载均衡
机器与机器之间磁盘利用率不平衡是HDFS集群非常容易出现的情况
尤其是在DataNode节点出现故障或在现有的集群上增添新的DataNode的时候
分析数据块分布和重新均衡DataNode上的数据分布的工具
$HADOOP_HOME/bin/start-balancer.sh -t 10%
负载均衡
负载均衡程序作为一个与独立的进程NameNode进程分开执行
心跳机制
机架感知
大型Hadoop集群是以机架的形式来组织的
同一个机架上不同节点间的网络状况比不同机架之间的更为理想
默认情况下,Hadoop的机架感知是没有被启用的
启用机架感知功能,在NameNode所在机器的core-site.xml中配置一个选项:
<property>
<name>topology.script.file.name</name>
<value>/path/to/script</value> <!—value的值是一个脚本-->
</property>
HDFS体系结构
Master/Slave架构
文件切分成块(默认大小128M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认3)
NameNode是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的DataNode等等
DataNode在本地文件系统存储文件块数据,以及块数据的校验
主要组件的功能
NameNode |
DataNode |
存储元数据 |
存储文件内容 |
元数据保存在内存中 |
文件内容保存在磁盘 |
保存文件,block ,datanode之间的映射关系 |
维护了block id到datanode本地文件的映射关系 |
NameNode
Namenode是一个中心服务器,单一节点,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问
文件操作,NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,数据流不经过NameNode,只会询问它跟那个DataNode联系
副本存放在那些DataNode上由NameNode来控制,根据全局情况做出块放置决定,读取文件时NameNode尽量让用户先读取最近的副本,降低带宽消耗和读取时延
NameNode全权管理数据块的复制,它周期性地从集群中的每个DataNode接收心跳信号和块状态报告(BlockReport)。接收到心跳信号意味着该DataNode节点工作正常。块状态报告包含了一个该DataNode上所有数据块的列表。
DataNode
一个数据块在DataNode上以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳
DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息
心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令,如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟NameNode没有收到某个DataNode 的心跳信息,则NameNode认为该DataNode节点已死亡不可用。
SecondaryNameNode
辅助的NameNode
周期性将EditsLog文件合并
工作原理,如图所示
工作流程
secondarynamenode通知namenode切换edits文件
secondarynamenode从namenode获得fsimage和edits(通过http)
secondarynamenode将fsimage载入内存,然后开始合并edits
secondarynamenode将新的fsimage发回给namenode
namenode用新的fsimage替换旧的fsimage
什么时候checkpiont
fs.checkpoint.period 指定两次checkpoint的最大时间间隔,默认3600秒。
fs.checkpoint.size 规定edits文件的最大值,一旦超过这个值则强制checkpoint,不管是否到达最大时间间隔。默认大小是64M
数据损坏处理
当DN读取block的时候,它会计算checksum;
如果计算后的checksum,与block创建时值不一样,说明该block已经损坏。
client读取其它DN上的block;NN标记该块已经损坏,然后复制block达到预期设置的文件备份数;
DN在其文件创建后三周验证其checksum。
HDFS文件权限
与Linux文件权限类似
r: read; w:write; x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容
如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner是zhangsan
HDFS的权限目的:阻止好人做错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁
Root 用户只能查看,不能写入
hadoop dfs -chmod 777 /
HDFS分布式文件存储系统详解相关推荐
- HDFS分布式文件存储系统
1. Hadoop是什么 1.1 Hadoop架构 Hadoop由三个模块组成:分布式文件存储HDFS.分布式计算MapReduce.资源调度引擎Yarn 1.2 分布式是什么 分布式:利用一批通过网 ...
- Linux 文件管理-文件系统-XFS文件存储系统详解
本文转载自:https://blog.csdn.net/scaleqiao/article/details/52098546 感谢博主的辛勤付出 0 文件系统 引用维基百科对文件系统的定义:" ...
- day36~37_HDFS分布式文件存储系统
HDFS分布式文件存储系统 一.HDFS概述 (一)HDFS产生背景 随着数据量越来越大,在一个文件系统下无法存储海量数据,普通硬件支持的操作系统即使扩展磁盘也会遇到瓶颈,迫切需要水平横向扩展来解决数 ...
- 分布式文件系统HDFS实践及原理详解part3
HDFS原理 说明:3.5开头目录是因为和上篇文章内容同属一章,所以开头使用了3.5 3.5 HDFS核心设计 3.5.1 心跳机制 1. Hadoop 是 Master/Slave 结构,Maste ...
- 一图看懂hadoop分布式文件存储系统HDFS工作原理
一图看懂hadoop分布式文件存储系统HDFS工作原理 转载于:https://www.cnblogs.com/AlexQY/p/9856477.html
- hdfs读写流程_必须掌握的分布式文件存储系统—HDFS
必须掌握的分布式文件存储系统-HDFSmp.weixin.qq.com HDFS(Hadoop Distributed File System)分布式文件存储系统,主要为各类分布式计算框架如Spar ...
- HDFS—Hadoop底层分布式文件存储系统
声明:本文档所有内容均在本人的学习和理解上整理,仅供参考,欢迎讨论.不具有权威性,甚至不具有精确性,也会在以后的学习中对不合理之处进行修改. 在上一篇"浅谈Hadoop inFusionIn ...
- fastdfs安装_用asp.net core结合fastdfs打造分布式文件存储系统
今天主要是对开发过程,以及对FastDFS这个通用的分布式文件存储服务的单机及集群安装部署过程做个总结.希望对想要自建分布式文件系统的朋友有所帮助. 什么是FastDFS 这里先简单介绍下分布式文件存 ...
- 用asp.net core结合fastdfs打造分布式文件存储系统
最近被安排开发文件存储微服务,要求是能够通过配置来无缝切换我们公司内部研发的文件存储系统,FastDFS,MongDb GridFS,阿里云OSS,腾讯云OSS等.根据任务紧急度暂时先完成了通过配置来 ...
最新文章
- Spring Cloud Alibaba 新版本发布:众多期待内容整合打包加入!
- 跨域策略文件crossdomain.xml的配置方法
- python杨辉三角_干货|杨辉三角与二项式定理
- 瞬发大量并发连接 造成MySQL连接不响应的分析
- 现金流为王!中小企业如何“疫”境求生?
- AtCoder - 4172 Modulo Summation 贪心
- key_t IPC键和ftok函数详解和剖析
- P4:神经网络与反向传播
- 端到端测试 VS 单元测试
- 不同角色给rules重新赋值校验规则
- 通过脚本生成Zabbix Screen报错Incorrect value for field vsize
- JAVA 8 :从永久区(PermGen)到元空间(Metaspace)
- cad无法修复图形文件_CAD应用技巧:DWG图形的“瘦身”
- java byte数组与16进制间的相互转换
- 思岚激光雷达rplidar从ROS 1到ROS 2的移植
- CTO能力知识地图正式发布
- 卡方检验还是费歇尔精确检验?
- Error:Apostrophe not preceded by \ (
- 微信从原版到现在所有界面图片_微信进入界面的图片有什么含义
- (转)C#中两个问号和一个问号 ??