主要的角色:

hdfs管理域名 hdfs用户_数据

客户端:负责发起或提交读写请求(如果往HDFS上存储数据或获取数据,就要告诉客户端)。

hdfs管理域名 hdfs用户_客户端_02

namenode:HDFS的核心负责全局协调,做任何事都要向这里汇报,和把控所有的请求。

hdfs管理域名 hdfs用户_客户端_03

datanode:数量不定,负责数据的 存储。

把数据写到HDFS的集群的过程

1.用户向客户端请求服务

hdfs管理域名 hdfs用户_HDFS_04

                        

hdfs管理域名 hdfs用户_数据_05

请求角色:1.hdfs shell2.JAVA API                         1.要将数据分为128M的块2.以三副本的方式存储

hdfs管理域名 hdfs用户_数据_06

作为客户端默认:1.大的文件要拆分为128M或64M

2.文件以多副本的方式存储(最少为3)


2.客户端拿到数据

hdfs管理域名 hdfs用户_HDFS_07

                            

hdfs管理域名 hdfs用户_HDFS_08

             客户端拆分为2块                                         客户端请求namenode(1个128的块和3个副本)

hdfs管理域名 hdfs用户_数据_09

                             

hdfs管理域名 hdfs用户_HDFS_10

namenode工作:                                                      namenode想客户端返回信息:

1.三个副本需要是三个datanode                                  1.含有三个datanod,并按距离排序

2.考虑资源调度


hdfs管理域名 hdfs用户_hdfs管理域名_11

hdfs管理域名 hdfs用户_HDFS_12

hdfs管理域名 hdfs用户_数据_13

客户端向datanode写数据,datanode1将相同的数据写到datanode2,datanode2完成统一的动作给datanode3

hdfs管理域名 hdfs用户_hdfs管理域名_14

写数据的方式以流水线的方式完成(通俗讲就是数据进来一点写一点,直到写完)

hdfs管理域名 hdfs用户_hdfs管理域名_15

                              

hdfs管理域名 hdfs用户_HDFS_16

数据写完后告诉namenode                                       1. namenode和客户端知道第一个块以写完

                                                                                 2.客户端以相同的步骤完成剩下的块

hdfs管理域名 hdfs用户_客户端_17

                                  

hdfs管理域名 hdfs用户_hdfs管理域名_18

完成所有写入数据后关闭数据流                                        总结:客户端:拆分文件

                                                                                                 namenode:提供块在datanode中的地址

                                                                                                 datanode:存储数据,并以流水线的方式将数据写完

从HDFS中读取数据

hdfs管理域名 hdfs用户_HDFS_19

                                        

hdfs管理域名 hdfs用户_数据_20

用户想客户端发起读取数据的请求                                            客户端向namenode发起请求:告诉它文件名

 

hdfs管理域名 hdfs用户_客户端_21

                                     

hdfs管理域名 hdfs用户_数据_22

namenode通过计算告诉客户端源数据信息                                     客户端知道信息,向块发起请求

(块在datanode中的位置,副本多少,几个块)

hdfs管理域名 hdfs用户_HDFS_23

客户端向datanode发起请求,

datanode将数据返回客户端




HDFS的优点:

数据冗余(多副本方式存储)

处理流式的数据访问(一次写入,多次读取的操作)

适合存储大文件的方式

可构建在廉价的机器上面

HDFS的缺点:

低延迟的数据访问

不适合小文件的存储(重):不管是1M还是127M,都要存储128M,然后产生源数据,若小文件很多,则给namenode带来很多压力