它是分布式的,有分多服务器联合起来实现其功能。
适合一次写入,多次读出的场景,且不支持文件的修改。
是和数据分析,并不适合用来做网盘应用。
NameNode(nn):1.存储文件的元数据{1.文件信息(文件名,文件目录结构,文件属性(生成时间,副本数,文件权限)),2.每个文件的块列表和块所在的DataNode(Block映射信息)},2.处理客户端读写请求。
DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验。
Secondary NameNode(2nn):是一个辅助后台的程序,用来监控HDFS状态,每隔一段时间获取HDFS元数据的快照。
上面计算的每秒传输大小为100MB只是一个近似值,实际为128M。
机械硬盘文件顺序读写的速度为100MB/s
普通固态为500MB/s
pcie固态的速度可以达到2000MB/s
因此块的大小可以分别设为128MB,512MB,2048MB.
CPU,磁盘,网卡之间的协同效率 即 跨物理机/机架之间文件传输速率
1. 如果块设置过大,
2. 如果块设置过小,
文件块越大,寻址时间越短,但磁盘传输时间越长;
文件块越小,寻址时间越长,但磁盘传输时间越短。
HDFS 涉及两个重要进程:NameNode、DataNode。他们一般都部署单独部署在不同服务器上,运行 NameNode 的服务器是主服务器,运行 DataNode 的服务器是从服务器。主服务器只有一个,从服务器有多个。
这种一主多从的架构基本适用于所有分布式系统或框架。可重复使用的架构方案叫作架构模式,一主多从可谓是大数据领域的最主要的架构模式。主服务器只有一台,掌控全局。从服务器有很多台,负责具体的事情。这样很多台服务器可以有效组织起来,对外表现出一个统一又强大的存储计算能力。
DataNode 负责文件数据的存储和读写操作,HDFS 将文件数据分割成若干数据块(Block),每个 DataNode 存储一部分数据块,这样文件就分布存储在整个 HDFS 服务器集群中。应用程序客户端(Client)可以并行对这些数据块进行访问,从而使得 HDFS 可以在服务器集群规模上实现数据并行访问,极大地提高了访问速度。
在实践中,HDFS 集群的 DataNode 服务器会有很多台,一般在几百台到几千台这样的规模,每台服务器配有数块磁盘,整个集群的存储容量大概在几 PB 到数百 PB。
NameNode 负责整个分布式文件系统的元数据(MetaData)管理,也就是文件路径名、数据块的 ID 以及存储位置等信息,相当于操作系统中文件分配表(FAT)的角色。HDFS 为了保证数据的高可用,会将一个数据块复制为多份(默认3份),并将多份相同的数据块存储在不同的机架的服务器上。这样当有磁盘损坏,或者某个 DataNode 服务器宕机,甚至某个交换机宕机时,系统能通过其备份的数据块进行查找。
处理客户端的请求。
客户端向 HDFS 上传文件。
客户端向 HDFS 读取文件。
像 NameNode 这样主从服务器管理同一份数据的场景,如果从服务器错误地以为主服务器宕机而接管集群管理,会出现主从服务器一起对 DataNode 发送指令,进而导致集群混乱,也就是所谓的“脑裂”。这也是这类场景选举主服务器时,引入 ZooKeeper 的原因。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)