HDFS 向应用程序提供一些接口,将它们移到更靠近数据所在的位置,下一小节将详细介绍这一点。
进入 HDFS 的应用程序接口您可以以多种不同的方法访问 HDFS。HDFS 提供了一个原生 Java™ 应用程序编程接口(API)和一个针对这个 Java API 的原生 C 语言封装器。另外,您可以使用一个 web 浏览器来浏览 HDFS 文件。
中描述的应用程序也可用于 HDFS 的接口。
表 1. 可以与 HDFS 接口的应用程序应用程序说明FileSystem (FS) shell一个命令行接口,类似于常见的 Linux® 和 UNIX® shells(bash、csh,等等),支持与 HDFS 数据进行交互。DFSAdmin可用于管理一个 HDFS 集群的命令集。fsckHadoop 命令/应用程序的一个子命令。可以使用 fsck 命令来检查文件的不一致(比如缺失块),但不能使用 fsck 命令更正这些不一致。 Name node 和 Data node 这些节点拥有内置 web 服务器,允许管理员检查集群的当前状态。
HDFS 拥有一个功能强大的杰出特性集,这要归功于它的简单但强大的架构。
HDFS 架构HDFS 由一些互联的节点集群组成,文件和目录驻留在那些节点上。一个 HDFS 集群包含一个节点,称为 NameNode,该节点管理文件系统名称空间并规范客户端对文件的访问。另外, Data node (DataNodes)将数据作为块存储在文件中。
Name node 和 Data node 在 HDFS 中,一个给定的 Name node 管理一些文件系统名称空间操作,比如打开、关闭以及重命名文件和目录。 Name node 还将数据块映射到 Data node,处理来自 HDFS 客户端的读写请求。 Data node 还根据 Name node 的指令创建、删除和复制数据块。
展示了 HDFS 的高级架构。
图 1. HDFS 架构如图 1 所示,一个集群包含一个 Name node 。这种设计有利于形成一个简化模型来管理每个名称空间并仲裁数据分布。
Name node 和 Data node 之间的关系 Name node 和 Data node 是一些软件组件,旨在以一种解耦合方式跨多个异构操作系统在普通的 PC 机上运行。HDFS 是使用 Java 编程语言构建的;因此,任何支持 Java 编程语言的机器都能运行 HDFS。一个典型的安装集群拥有一台专用机器,用于运行一个 Name node ,可能还有一个 Data node。集群中的其他每台机器都运行一个 Data node。
通信协议所有 HDFS 通信协议都构建于 TCP/IP 协议之上。HDFS 客户端连接到 Name node 上打开的一个 Transmission Control Protocol (TCP) 端口,然后使用一个基于 Remote Procedure Call (RPC) 的专有协议与 Name node 通信。 Data node 使用一个基于块的专有协议与 Name node 通信。
Data node 持续循环,询问 Name node 的指令。 Name node 不能直接连接到 Data node ,它只是从 Data node 调用的函数返回值。每个 Data node 都维护一个开放的服务器套接字,以便客户端代码或其他 Data node 能够读写数据。 Name node 知道这个服务器的主机或端口,将信息提供给有关客户端或其他 Data node 。请参见 侧边栏,了解关于 Data node、Name node 和客户端之间通信的更多信息。
Name node 维护和管理对文件系统名称空间的更改。