大数据存储是大数据处理与分析的基础。高效、安全地存储与读写数据是提高大数据处理效率的关键。数据可分为结构化数据和非机构化数据,传统的关系型数据库一般用于存储结构化数据,而对大数据环境下海量的非机构化数据,通常采用如HDFS分布式文件系统或者NoSQL数据库进行存储。
1)HDFS采用主从结构存储数据,NameNode结点负责集群任务调度,DataNode负责执行任务和存储数据块。NameNode管理文件系统的命名空间,维护着整个文件系统的文件目录树以及这些文件的索引目录。这些信息以命名空间镜像和编辑日志两种形式存储在本地文件系统中。从NameNode中可以回去每个文件的每个块存储在DataNode节点的位置,NameNode会在每次启动系统时动态地重建这些信息。客户端通过NameNode获取元数据信息,与DataNode进行交互以访问整个文件系统。
DataNode是文件系统的工作结点,供客户端和NameNode调用并执行具体任务,存储数据块。DataNode通过心跳机制定时向NameNode发送所存储的文件块信息,报告其工作状态。
2)数据块是磁盘进行数据读/写操作的最小单元。文件以块的形式存储在磁盘中,文件系统每次都能操作磁盘数据块大小整数倍的数据。HDFS中的文件也被划分为多个逻辑块进行存储。HDFS中的数据块的大小,影响到寻址开销。数据块越小,寻址开销越大。如果数据块设置得足够大,从磁盘传输数据的时间会明显大于定位这个数据块开始位置所需要的时间。因而,传输一个由多个数据块组成的文件的时间取决于磁盘传输速率,用户必须在数据块大小设置上做出优化选择。HDFS系统当前默认数据块大小为128MB。
HDFS作为一个分布式文件系统,使用抽象的数据块具有以下优势:
①通过集群扩展能力可以存储大于网络中任意一个磁盘容量的任意大小文件;
②使用抽象块而非整个文件作为存储单元,可简化存储子系统,固定的块大小可方便元数据和文件数据块内容的分开存储;
③便与数据备份和数据容错,提高系统可用性。HDFS默认将文件块副本数设定为三份,分别存储在集群不同的节点上。当一个块损坏时,系统会通过NameNode获取元数据信息,在其他机器上读取一个副本并自动进行备份,以保证副本的数量维持在正常水平。