HDFS简介
HDFS简介
HDFS(Hadoop Distribute FileSystem)是一个适合运行在通用硬件之上,具备高度容错特性,支持高吞吐量数据访问的分布式文件系统,非常适合大规模数据集应用。
HDFS适用于如下场景:
- 处理海量数据(TB或PB级别以上)
- 需要很高的吞吐量
- 需要高可靠性
- 需要很好的可扩展能力
HDFS开发接口简介
HDFS支持使用Java语言进行程序开发,具体的API接口内容请参考Java API。
常用概念
DataNode
将文件切分成大小相同的块(称为“数据块”),存储在不同的DataNode上,并且周期性地向NameNode报告该DataNode的数据存放情况。
NameNode
用于管理文件系统的命名空间、目录结构、元数据信息以及提供备份机制等,分为:
- Active NameNode:主NameNode,管理文件系统的命名空间、维护文件系统的目录结构树以及元数据信息;记录写入的每个“数据块”与其归属文件的对应关系。
Standby NameNode:备NameNode,与主NameNode中的数据保持同步;随时准备在主NameNode出现异常时接管其服务。
Journalnode
高可用性(High availability,HA)集群下,用于同步主备NameNode之间的元数据信息。
ZKFC
ZKFC是需要和NameNode一一对应的服务,即每个NameNode都需要部署ZKFC。它负责监控NameNode的状态,并及时把状态写入Zookeeper。ZKFC有选择哪个NameNode作为主NameNode的权利。
Colocation
同分布(Colocation)功能是将存在关联关系的数据或可能要进行关联操作的数据存储在相同的存储节点上。HDFS文件同分布的特性是,将那些需进行关联操作的文件存放在相同的数据节点上,在进行关联操作计算时,避免了到别的数据节点上获取数据的动作,大大降低了网络带宽的占用。
SmallFS
SmallFS新增了小文件后台合并特性,能够自动发现系统中的小文件(通过文件大小阈值判断是否是小文件),在系统空闲时进行合并,并把元数据外置到第三方KV系统来降低NameNode压力,同时提供新的FileSystem接口,让用户能够透明地访问这些小文件。
新的FileSystem接口提供了丰富的文件操作功能,操作方式与HDFS完全相同,差别在于有些接口不支持或者部分支持。Federation
Federation下通常有多个NameService。这些NameService可以采用高可用性(High availability,HA)模式进行配置。简单来说,HA模式用于解决NameNode单点故障问题,通过热备的方式为主NameNode提供一个备用者。当主节点崩溃时,备用的NameNode节点可以快速实现接管,或在进行维护时,管理员可以顺利地启动故障接管。
Client
HDFS Client主要包括五种方式:JAVA API、C API、Shell、HTTP REST API、WEB UI五种方式。
JAVA API提供HDFS文件系统的应用接口,本开发指南主要介绍如何使用Java API进行HDFS文件系统的应用开发。
- C API提供HDFS文件系统的应用接口,使用C语言开发的用户可参考C接口的描述进行应用开发。
- Shell提供shell命令完成HDFS文件系统的基本操作。
- HTTP REST API提供除Shell、Java API和C API以外的其他接口,可通过此接口监控HDFS状态等信息。
- WEB UI提供Web可视化组件管理界面。
keytab文件
存放用户信息的密钥文件。