一.HDFS介绍

HDFS全称Hadoop Distribute File System,是一个基于Java的分布式文件系统。 HDFS是Hadoop的核心设计之一,是为了解决海量数据的存储问题。在Hadoop集群中,将HDFS作为底层存储系统来存储分布式环境中的数据。

目前使用版本hadoop2.7.1,官网地址:http://hadoop.apache.org/docs/r2.7.1/

二.HDFS高可靠措施

1.冗余备份

数据存储在这些HDFS中的节点上,为了防止因为某个节点宕机而导致数据丢失,HDFS对数据进行冗余备份,至于具体冗余多少个副本,在dfs.replication中配置。

2.跨机架副本存放

仅仅对数据进行冗余备份还不够,假设所有的备份都在一个节点上,那么该节点宕机后,数据一样会丢失,因此HDFS要有一个好的副本存放策略,该策略还在开发中。目前使用的是,以dfs.replication=3为例,在同一机架的两个节点上各备份一个副本,然后在另一个机架的某个节点上再放一个副本。前者防止该机架的某个节点宕机,后者防止某个机架宕机。

3.心跳检测

DataNode节点定时向NameNode节点发送心跳包,以确保DataNode没有宕机。如果宕机,会采取相应措施,比如数据副本的备份。

4.数据完整性检测

NameNode在创建HDFS文件时,会计算每个数据的校验和并储存起来。当客户端从DataNode获取数据时,他会将获取的数据的校验和与之前储存的校验和进行对比。

5.安全模式

HDFS启动时,会进入安全模式,此时不允许写操作。这时,NameNode会收到所有DataNode节点的数据块报告,在确认安全之后,系统自动退出安全模式。

6.核心文件备份

HDFS的核心文件是映像文件和事务日志,如果这些文件损坏,将会导致HDFS不可用。系统支持对这两个文件的备份,以确保NameNode宕机后的恢复。

7.空间回收

从HDFS中删除的文件会首先被放入到/trash中,/trash文件夹中的内容是被删除文件最后的副本,该文件夹会被定时清空。该文件夹中不存在的文件就彻底不存在了。

三.HDFS使用场景分析

HDFS不适合应用的场景

1.超大文件

超大文件在这里指几百MB、几百GB甚至几百TB大小的文件。

2.流式数据访问

HDFS的设计思想是一次写入、多次读取模式。一个数据集通常由数据源生成或复制,接着在此基础上进行各种分析。每个分析至少都会涉及数据集中的大部分数据,甚至全部。因此,读取整个数据集的时间比读取第一条记录的延时更为重要。

3.商用硬件

Hadoop不需要运行在昂贵并且高可靠性的硬件上。它被设计运行在商用硬件(普通硬件)的集群上,节点故障率比较高。HDFS在面对着这种故障时,被设计为能够继续运行而让用户察觉不到明显的中断。

HDFS不适合应用的场景

1.低延迟数据访问

需要低延时访问数据在毫秒范围内的应用不适合HDFS。HDFS是为达到高数据吞吐量而优化的,这有可能会以延迟为代价。

2.大量的小文件

3.多用户写入,任意修改文件

HDFS中的文件只有一次写入者,而且写操作总是在文件的末尾。它不支持多个写入者,或者在文件的任意位置修改。