摘要:HDFS是Hadoop的核心模块之一,围绕HDFS是什么、HDFS的设计思想和HDFS的体系结构三方面来介绍。
关键词:Hadoop HDFS 分布式存储系统
HDFS是Hadoop的核心模块之一,HDFS是什么?它是Hadoop分布式文件系统(Hadoop Distributed File System),摘录Apache 组织关于HDFS的介绍“The Hadoop Distributed File System (HDFS) is a distributed file system designed to run on commodity hardware. It has many similarities with existing distributed file systems. However, the differences from other distributed file systems are significant. HDFS is highly fault-tolerant and is designed to be deployed on low-cost hardware. HDFS provides high throughput access to application data and is suitable for applications that have large data sets. HDFS relaxes a few POSIX requirements to enable streaming access to file system data. HDFS was originally built as infrastructure for the Apache Nutch web search engine project. ”
Hadoop的设计思想受到Google公司的GFS设计思想的启示,基于一种开源的理念实现的分布式分布式文件系统。HDFS的设计基础与目标如下。
1)硬件错误(Hardware Failure)是常态,因而需要数据冗余技术。
2)流失数据访问(Streaming Data Access),即数据批量读取而非随机读写,Hadoop擅长做数据分析而不是事务处理。
3)大规模数据集(Large Data Sets)。
4)简单一致性模型(Simple Coherency Model),即为了降低系统复杂度,对文件采用一次性写多次读的逻辑设计,也就是文件一经写入,关闭,就再不要修改。
5)“Moving Computation is Cheaper than Moving Data”,通俗理解,程序采用“数据就近”原则分配节点执行。
6)Portability Across Heterogeneous Hardware and Software Platforms,即有着很强的可扩展性。
图1 HDFS体系结构
HDFS体系结构如图1所示,它采用主从结构,Namenode属于主段,Datanode属于从端。
Namenode
1)管理文件系统的命名空间。
2)记录 每个文件数据快在各个Datanode上的位置和副本信息。
3)协调客户端对文件的访问。
4)记录命名空间内的改动或者空间本省属性的改动。
5)Namenode 使用事务日志记录HDFS元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等。
从社会学来看,Namenode是HDFS里面的管理者,发挥者管理、协调、操控的作用。
Datanode
1)负责所在物理节点的存储管理。
2)一次写入,多次读取(不修改)。
3)文件由数据库组成,一般情况下,数据块的大小为64MB。
4)数据尽量散步到各个节点。
从社会学的角度来看,Datanode是HDFS的工作者,发挥按着Namenode的命令干活,并且把干活的进展和问题反馈到Namenode的作用。
客户端如何访问HDFS中一个文件呢?具体流程如下。
1)首先从Namenode获得组成这个文件的数据块位置列表。
2)接下来根据位置列表知道存储数据块的Datanode。
3)最后访问Datanode获取数据。
注意:Namenode并不参与数据实际传输。
数据存储系统,数据存储的可靠性至关重要。HDFS是如何保证其可靠性呢?它主要采用如下机理。
1)冗余副本策略,即所有数据都有副本,副本的数目可以在hdfs-site.xml中设置相应的复制因子。
2)机架策略,即HDFS的“机架感知”,一般在本机架存放一个副本,在其它机架再存放别的副本,这样可以防止机架失效时丢失数据,也可以提供带宽利用率。
3)心跳机制,即Namenode周期性从Datanode接受心跳信号和快报告,没有按时发送心跳的Datanode会被标记为宕机,不会再给任何I/O请求,若是Datanode失效造成副本数量下降,并且低于预先设置的阈值,Namenode会检测出这些数据块,并在合适的时机进行重新复制。
4)安全模式,Namenode启动时会先经过一个“安全模式”阶段。
5)校验和,客户端获取数据通过检查校验和,发现数据块是否损坏,从而确定是否要读取副本。
6)回收站,删除文件,会先到回收站/trash,其里面文件可以快速回复。
7)元数据保护,映像文件和事务日志是Namenode的核心数据,可以配置为拥有多个副本。
8)快照,支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态。
附录:HDFS 文件操作
对HDFS文件操作有两种方式,一是命令行方式,二是HDFS API方式。
HDFS常用命令归总
1)列出HDFS下的文件
hadoop fs -ls
2)上传本地文件到HDFS
hadoop fs -put dir1 dir2
说明:dir1,本地文件系统文件目录;dir2,HDFS文件系统文件目录
3)下载HDFS文件到本地
hadoop fs -get dir1 dir2
说明:dir1,本地文件系统文件目录;dir2,HDFS文件系统文件目录
4)创建HDFS文件
hadoop fs -mkdir dir
5)删除HDFS下的文档
hadoop fs -rmr dir
6)查看HDFS下某个文件的内容
hadoop fs -cat 文件路径
7)查阅帮助
获取所用Hadoop版本关于HDFS完整的命令列表,可执行
hadoop fs
或者
使用help来显示某个命令的用法与简短描述。
例如 要了解ls,可执行
hadoop fs -help ls
Source:
1 http://www.wangluqing.com/2014/02/hadoop-hdfs/
2 http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html
3 炼数成金《Hadoop数据分析平台》第三课分布式文件系统HDFS