本文主要介绍Hadoop的数据管理,主要包括Hadoop的分布式文件系统HDFS、分布式数据库HBase和数据仓库工具Hive。
1 HDFS的数据管理
HDFS是分布式计算的存储基石,Hadoop分布式文件系统和其他分布式文件系统有很多类似的特性:
- 对于整个集群有单一的命名空间;
- 具有数据一致性,都适合一次写入多次读取的模型,客户端在文件没有被成功创建之前是无法看到文件存在的;
- 文件会被分割成多个文件块,每个文件块被分配存储到数据节点上,而且会根据配置由复制文件块来保证数据的安全性。
HDFS通过三个重要的角色来进行文件系统的管理:NameNode、DataNode和Client。NameNode可以看做是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的 Metadata存储在内存中,这些信息主要包括文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode中的信息等。DataNode是文件存储的基本单元,它将文件块(Block)存储在本地文件系统中,保存了所有Block的Metadata,同时周期性地将所有存在的Block信息发送给NameNode。Client就是需要获取分布式文件系统文件的应用程序。接下来通过三个具体的操作来说明HDFS对数据的管理。
(1)文件写入
1)Client向NameNode发起文件写入的请求。2)NameNode根据文件大小和文件块配置情况,返回给Client所管理的DataNode的信息。
3)Client将文件划分为多个Block,根据DataNode的地址信息,按顺序将其写入到每一个DataNode块中。
(2)文件读取
1)Client向NameNode发起文件读取的请求。
2)NameNode返回文件存储的DataNode信息。
3)Client读取文件信息。
(3)文件块(Block)复制
1)NameNode发现部分文件的Block不符合最小复制数这一要求或部分DataNode失效。
2)通知DataNode相互复制Block。
3)DataNode开始直接相互复制。
作为分布式文件系统,HDFS在数据管理方面还有值得借鉴的几个功能:
- 文件块(Block)的放置:一个Block会有三份备份,一份放在NameNode指定的DataNode上,另一份放在与指定DataNode不在同一台机器上的DataNode上,最后一份放在与指定DataNode同一Rack的DataNode上。备份的目的是为了数据安全,采用这种配置方式主要是考虑同一Rack失败的情况,以及不同Rack之间进行数据复制会带来的性能问题。
- 心跳检测