Haddop:HDFS
2019-08-20 本文已影响0人
惊不意外
HDFS体系结构
HDFS允许用户以文件的形式存储数据。从内部来看,文件被分成若干个数据块,而且这若干个数据块存放在一组DataNode上。NameNode执行文件系统的命名空间操作,比如打开关闭、重命名文件或目录等,它也负责数据块到具体DataNode的映射。DataNode负责处理文件系统客户端的文件读写请求,并在NameNode的统一调度下进行数据块的创建、删除和复制工作。 HDFS体系结构HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的DataNode管理存储的数据。
HDFS存储
数据块(Block)
- HDFS分布式文件系统中的文件在进行存储时,会被分成一个个数据块,块的默认大小为64M,它是文件存储处理的逻辑单元。
- HDFS作为一个分布式文件系统,设计用来处理大文件的,使用抽象的块,可以存储任意大的文件而不受网络中单节点磁盘的限制,同时数据块作为操作的单元可以简化存储子系统,初次之外,块更有利于分布式文件系统中复制容错的实现。
- 在HDFS中,为了处理节点故障,默认将文件副本数设定为3份,分别存储在集群的不同节点上。当一个快损坏时,系统会通过NameNode获取源数据系统,在另一个机器上读取一个副本并进行存储。
- 副本冗余量落通过文件进行配置,在某些应用中可以设置较高的副本以提高集群的吞吐量。
HDFS中的文件读取
- 客户端联系NameNode,得到所有数据块信息,以及数据块对应的所有数据服务器的位置信息
- 尝试从某个数据块对应的一组数据服务器中选出一个,进行连接
- 数据被一个包一个包发送回客户端,等到整个数据块的数据都被读取完了,就会断开此链接,尝试连接下一个数据块对应的数据服务器,整个流程,依次如此反复,直到所有想读的都读取完了为止
HDFS中的文件写入
- 客户端通过DistributedFileSystem创建一个文件
- NameNode验证新的文件不存在文件系统中,并且保证请求客户端拥有创建文件的权限
- 客户端写入数据时,FSDataOutputStream将文件分割成包,然后放入一个内部队列,我们成为“数据队列”。DataStreamer会将这些小的文件包放入数据流中,并从Namenode中获取合适的Datanode来存放副本,并将文件包推送至各个DataNode中。
- DFSOutputStream保存一个包的内部队列,等待DataNode的返回信息,只有所有DataNode都返回写入成功时,从队列中删除
HDFS总结
Hadoop适合做什么
存储并管理PB级数据
处理非结构化数据
注重数据处理的吞吐量(latency不敏感)
应用模式为:write-once-read-many存取模式
Hadoop不适合做什么
存储小文件 (不建议使用)
大量的随机读 (不建议使用)
需要对文件的修改 (不支持)