本文主要是介绍HDFS介绍(零) HDFS分布式文件系统简介(转),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
转自:https://blog.csdn.net/lb812913059/article/details/79712524
HDFS(Hadoop Distributed File System)Hadoop 分布式文件系统
基于流数据模式访问
就是可以字节序列化的数据,java.io.Serializable接口
分布式文件系统处理的数据必须是流数据,可以写IO操作的数据
以128MB的数据块存储文件
其中每一个存储节点上都有一个DataNode进程,由NameNode来进行协调。
10T的一个文件数据存储到多台服务器上,每个服务器担任一部分存储任务,这些多台服务器通过一个文件系统组织起来对外界提供统一的服务,那么客户端访问这个10T的文件的时候,就感觉后台是一个服务器在提供服务,那么我们把这个机制就叫做分布式,把运行在多台服务器上的这个文件系统就叫做分布式文件系统。
1 HDFS名词简介
block:
基本存储单位,128M,默认备份3份
块的大小(hadoop2.0 128M):决定了资源,文件系统读写数据的吞吐量,应用程序寻址的速度(小有利于存储的完全利用,但是会增加寻址时间,减少吞吐量。大则相反)
大数据的块之所以设置的如此之大,是为了提高数据的吞吐量和降低数据寻址的时间
每一个block块对应一个Map的任务(线程)?????????????????????????????
NameNode:
维护HDFS文件系统,存储文件数据的元信息。处理来自客户端的对HDFS的各种操作的交互反馈
镜像文件(Namespace image)和操作日志文件(edit log)
这些信息在系统启动时从数据节点重建.被Cache在RAM中
这两个文件也会被持久化存储在本地硬盘。
SecondaryNameNode:
周期性将元数据节点的命名空间镜像文件和修改日志进行合并,并实现fsimage的备份
日志与镜像的定期合并的作用:
如果Namenode节点故障,namenode下次启动的时候,会把fsimage加载到内存中
如果没有合并机制:edits log是每一次操作的记录,namenode要对每一次操作进行重写
导致操作很耗时(namenode容错机制)
DataNode:
文件系统的工作节点,根据客户端或是namenode的调度存储和检索数据
并且定期向namenode发送他们所存储的块(block)的列表。(每个小时report、3秒心跳(心跳reponse可返回命令(所有心跳皆如此)))
DataNode启动时会向NameNode报告当前存储的数据块信息,后续也会定时报告修改信息
DataNode之间会进行通信,复制数据块,保证数据的冗余性(备份,一个容错机制)
NodeManager :
对它所在的节点上的资源的管理(cpu、内存、磁盘的利用情况)
定期向resourcemanager进行汇报该节点上的资源利用信息
监督Container(容器)的生命周期????????????????????Container是啥
监控每个Container的资源使用(内存、CPU等)情况
追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)。??????
ResouceManager:
负责集群中所有资源的统一管理和分配
接收来自各个节点(NodeManager)的资源汇报信息
并把这些(资源)信息按照一定的策略分配给各个应用程序(实际上是ApplicationManager)。???????ApplicationManager
2 HDFS优点
1)适合大数据处理
能够处理百万规模以上的文件数量( GB、TB、PB级数据),能够处理10K节点的规模
2)处理非结构化的数据
可处理结构化、半结构化、非结构化的数据(语音、视频、图片),80% 的数据都是非结构化的数据
3)流式访问数据
一次写入,多次读取。文件一旦写入不能修改,只能追加。它能保证数据的一致性。
4)运行于廉价的商用机器集群上
它通过多副本机制,提高可靠性。一旦出现故障也不会影响正常的业务处理,可以通过其它副本来恢复。
3 HDFS缺点
1)不适合处理低延迟的数据访问
HDFS是为了处理大型数据集分析任务的,主要是为了达到高的数据吞吐量而设计的
HBase适合做低延迟的数据访问BigTable???????????????????????
2)无法高效的存储大量小文件
当文件以block块的形式进行存储时,block块位置会存储在namenode节点的内存中(metadata元数据会存在内存中,元数据中有每个block的位置)
不论存储大文件还是小文件,每个文件对应的单条block的块信息大小是一致的(metadata元数据大小一致)
而NameNode的内存总是有限的。小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目标。(也会浪费name的内存)
(这里的小文件是指小于HDFS系统的Block大小的文件,默认是64M)????????不是128M(还是256M来着,需要检验一下)么
3)不支持并发写入和任意的修改
一个文件同时只能有一个写,不允许多个线程同时写。????????什么可以同时写???
仅支持数据 append(追加),不支持文件的随机修改。以追加的形式达到修改的目的
4 HDFS特性
1)高容错,可扩展性及可配置性强
数据自动保存多个副本。它通过增加数据冗余来提高容错性。某一个副本丢失以后,它可以自动恢复
可扩展:可以不断的添加新的datanode
2)跨平台
Java语言开发的,HDFS支持多个平台Windows
3)shell命令接口
hadoop fs -put 上传,把本地Linux文件系统的文件,上传到HDFS文件系统中
hadoop fs -ls hdfs://master:9000/ 查看HDFS文件系统根目录(/)下的文件
......
4)机架感知功能
副本的存放,第一个存到rack1,第二个就会选择不同于rack1的其他的rack上面存储 /etc/hosts
5)负载均衡
理想状态下,集群中每个服务器上面存储数据都是均匀的。但在实际当中,经常会出现数据偏移
start-balancer.sh -t 10%
6)Web界面
http://master:18088 yarn http://master:50070 hdfs
能够查看hdfs文件系统中的文件信息
5 HDFS设计目标
1)监测和快速恢复硬件故障
监测:立刻会监测到坏的块--->上报到主节点RM
单独启动一个进程:hadoop-daemon.sh start namenode/datanode/resourcemanager/nodemanager
2)流式数据访问
重视的是吞吐量,而不是数据处理的速度。实现批处理
3)大规模数据集
支持大文件存储,一个单一的HDFS实例能支撑数以千万计的文件
4)简化一致性访问模式
一次写入(只可以使用apend的方式修改文件),多次读取
5)移植性强
移动计算的代价,要比移动数据的代价低
6 HDFS数据存储
HDFS采用Master/Slave主从架构来存储数据,这种架构主要由四个部分组成。分别为HDFS Client、NameNode、DataNode和Secondary NameNode
Client:客户端
1、文件切分。文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储。
2、与 NameNode 交互,获取文件的位置信息。
3、与 DataNode 交互,读取或者写入数据。
4、Client 提供一些命令来访问和管理HDFS等操作。
NameNode:master管理者
1、管理 HDFS 的名称空间。数据块(Block)映射信息(内存)。配置副本策略(决定副本存放)
2、处理客户端读写请求。
fsimage与edits是NameNode的两个重要文件。
1)fsimage:元数据镜像文件(存储文件系统的目录树,比如说有哪些目录,每个目录有哪些文件...)
2)edits:元数据操作日志(存储针对目录树的修改操作,比如你删除了某个文件或者增加了某个文件)
DataNode:Slave节点,NameNode 下达命令,DataNode 执行实际的操作
1、存储文件。(本地存放实际的块映射(启动时report给namenode,以后每个小时report一次))
2、执行数据块的读/写操作。
SecondaryNameNode:辅助元数据
并非NameNode 的热备(热备从广义上讲,就是服务器高可用应用的另一种说法)。
当NameNode 挂掉的时候,它并不能替换 NameNode 并提供服务。
1、辅助 NameNode,执行fsimage和edits的定期合并
2、在紧急情况下,可辅助恢复 NameNode。
7 HDFS功能概述
HDFS具有两个功能:命名空间管理(Namespace management)和块/存储管理服务(block/storage management)。
1.命名空间管理????????????????????????????????没看懂
HDFS的命名空间包含目录、文件和块的信息。
指命名空间支持对HDFS中的目录、文件和块做创建、修改、删除、列表文件和目录等基本操作。
2.块/存储管理
在块/存储管理服务中包含两部分工作:块管理和物理存储。这是一个更通用的存储服务。其他的应用可以直接建立在Block Storage上,如HBase,Foreign Namespaces等。
块管理:
A) 处理DataNode向NameNode注册的请求,处理datanode的成员关系。
B) 处理来自DataNode周期性的心跳报告,维护块的位置信息。
C) 处理与块相关的操作:块的创建、删除、修改及获取块信息。
D) 管理副本放置(replica placement)和块的复制及多余块的删除。
物理存储:
Data Node把块存储到本地文件系统中,对本地文件系统的读写。
这篇关于HDFS介绍(零) HDFS分布式文件系统简介(转)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!