HDFS:我们至少应该学习以下内容
- Hdfs架构设计
- Hdfs优缺点
- Hdfs如何读取文件
- Hdfs如何写入文件
- Hdfs副本存放策略
- hdfs访问命令
- Hdfs数据复制
- Hdfs空间回收
- Namenode的热备
- NN&2NN关系
- DataNode工作机制
- Hdfs面试重点
介绍
HDFS(The Hadoop Distributed File System)
,是被设计成适合运行在通用硬件(commodity hardware
)上的 Hadoop
的分布式文件系统。它与其他的分布式系统有非常显著的不同,首先 HDFS
具有高容错性,并且它可以被部署到廉价的硬件上。此外,HDFS
提供对应用程序数据的高吞吐量访问,适用于具有大型数据集的应用程序。
HDFS架构图
名词解释
关键词 | 含义 |
---|---|
namenode | 名字节点,管理文件系统命名空间的主服务器。 |
datanode | 数据节点,存储文件块 |
replication | 文件块的副本,目的是确保数据存储的可靠性 |
rack | 翻译为“机架”,可以理解为两个处于不同地方的机群,每个机群内部有自己的连接方式 |
Client | 凡是通过指令或代码操作的一端都是客户端 |
Client的Read | 从HDFS下载文件到本地 |
Client的Write | 上传文件到HDFS上 |
DataNode
中存储的不是单个文件,而是文件块(Block
),在 HDFS
中,每个大文件会拆分成多个 Block
,然后将这些 Block 散布存储在不同的 DataNode
中,并且每个 Block
会有多个复制,也会存储到其他的 DataNode
中。
上图分别解释了“读”和“写”两种操作:
-
当有客户端要向
HDFS
写入文件时,图中将文件拆分的Block
写入到了两个机架的DataNode
中,一般情况下就是两个机架的两个物理主机中,可以看出文件数据没有经过NameNode
。数据写入的过程见(“七、数据复制流水线”) -
当有客户端要从
HDFS
读取文件时,会将操作命令传向NameNode
,然后NameNode
转为对应的数据块的操作,指挥相应的DataNode
将所需数据返回给客户端。
注意
还有一个节点图中没有显示,叫作 Secondary Namenode
,是辅助后台程序,主要负责与 NameNode
进行通信,定期保存 HDFS
元数据的快照及备份其他 NameNode
中的内容,日常 Standby,当 NameNode
故障时顶替 NameNode
使用。
NameNode & DataNodes
NameNode
与 DataNode
是 HDFS
系统的重要知识点。HDFS
是 master/slave
体系结构。一个 HDFS
集群是由单个 NameNode
和众多 DataNode
组成,文件会被分成一个或多个块,这些块存储在一组 DataNode
中。
因为 HDFS
是用 Java
语言搭建的,所以只要是支持 Java
语言的机器都可以运行 NameNode
和 DataNode
。并且因为 Java
的高可移植性,HDFS
也具有非常广泛的应用范围。一种典型的 HDFS
部署模式是指定一个物理主机运行 NameNode
,然后其余的机器运行 DataNode
,在实际部署情况中,一般都是一台主机部署一个 DataNode
。
群集中存在单个 NameNode
极大地简化了系统的体系结构。 NameNode
是所有 HDFS
元数据的决定者和存储库。系统的这种设计使用户数据永远不会流经 NameNode
,可理解 NameNode
为整个系统的中枢。
NameNode
NameNode(nn)
是管理文件系统命名空间的Master(主服务器),用于管理客户端对文件的访问,执行文件系统命名空间操作,如打开,关闭和重命名文件和目录。
- 管理HDFS的名称空间
- 配置副本策略
- 管理数据块(Block) 映射信息
- 处理客户端的读写请求
NameNode
做着有关块复制的所有决定,它定期从群集中的每个 DataNode
接收 Heartbeat
和 Blockreport
。收到 Heartbeat 意味着 DataNode
正常运行,Blockreport
包含 DataNode
上所有块的列表。
DataNode
DataNode
是Slave。通常是群集中每个节点一个,用于存储数据,负责提供来自文件系统客户端的读写请求。NameNode下达命令,DataNode执行实际的操作。如执行块创建,删除和复制。
- 存储实际的数据块
- 执行数据库的读/写操作