大数据存储方案的特点包括超大规模、横向可扩展性;容错、副本复制;高吞吐量;业务相关的响应速度。
HDFS的设计目标是自动快速检测应对硬件错误;硬件故障是常态,而非偶然;连续数据访问(数据批处理),而不是OLTP中的随机数据访问;数据块(Block)存储设计;转移计算比移动数据本身更划算;简单的数据一致性模型;一次写入,多次读取的数据访问模型;异构平台可移植。
HDFS集群由分布在多个机架上的大量DataNode(数据节点)组成,不同机架之间的节点通过交换机通信,HDFS通过机架感知策略,使NameNode(名称节点)能够确定每个DataNode所属的机架ID,使用副本存放策略来改进数据的可靠性、可用性和网络带宽的利用率。数据块是HDFS最基本的存储单元,默认为128MB,用户可以自行设置大小。
元数据指HDFS文件系统中文件和目录的属性信息。HDFS实现时,采用了镜像文件(Fsimage)+日志文件(EditLog)的备份机制。文件的镜像文件中包括修改时间、访问时间、数据块大小、组成文件的数据块的存储位置信息。而目录的镜像文件中包括修改时间、访问控制权限等信息。日志文件记录的是HDFS的更新操作。HDFS存储的大部分都是用户数据,以数据块的形式存放在DataNode上。
HDFS的读数据过程和写数据过程如图3-2和图3-3所示。
·图3-2 读数据过程
·图3-3 写数据过程
HDFS命令行工具支持一些常用命令,用于在分布式文件系统中操作文件和目录。
· hadoop fs -mkdir /tmp/input:在HDFS上新建文件夹。
· hadoop fs -put input1.txt /tmp/input:把本地文件input1.txt传到/tmp/input目录下。
· hadoop fs -get input1.txt /tmp/input/input1.txt:把HDFS文件放到本地。
· hadoop fs -ls /tmp/output:列出HDFS的某目录。
· hadoop fs -cat /tmp/ouput/output1.txt:查看HDFS上的文件。
· hadoop fs -rmr /home/less/hadoop/tmp/output:删除HDFS上的目录。
HDFS命令行工具还支持一些管理命令,用于对分布式文件系统进行管理维护。
· hadoop dfsadmin -report:查看HDFS状态,比如有哪些DataNode、每个DataNode的情况。
· hadoop dfsadmin -safemode leave:离开安全模式。
· hadoop dfsadmin -safemode enter:进入安全模式。