HDFS特点
HDFS优点
支持处理超大文件
可运行在廉价机器上
高容错性
流式文件写入
HDFS缺点
不适合低延时数据访问场景(立即响应)
不适合小文件存取场景
不适合并发写入,文件随机修改场景
HDFS CLI (命令行)
基本格式
hdfs dfs -cmd<args>
hadoop fs -cmd<args>(已过时)
命令和Linux相似
-ls
-mkdir
-put
-rm
-help
SecondNameNode 每隔一定的时间查看NameNode ,发现有新的执行和修改记录,就备份过来,进行整合,整合成一个大的 文件, 之后 NameNode 查的时候,直接查这个大文件,可以节省查询时间 fsimage会越来越多,editor是单条修改记录,fsimage 所有动作都会记录
HDFS角色
Client :客户端
NameNode (NN):元数据节点
管理文件系统的Namespace/元数据
一个HDFS集群只有一个Active的NN
DataNode (DN):数据节点
数据存储节点,保存和检索Block
一个集群可以有多个数据节点
Secondary NameNode (SNN):从元数据节点
合并NameNode的edit logs到fsimage文件中
辅助NN将内存中元数据信息持久化
HDFS副本机制
Block :数据块
HDFS最基本的存储单元
默认块大小:128M(2.x)
副本机制
作用:避免数据丢失
副本数默认为3
存放机制:
一个在本地机架节点
一个在同一个机架不同节点
一个在不同机架的节点
2^7=128; 最佳100,理论极限150;100~150间 128为 2的7次方 为最宜
HDFS高可用(High Availability)
在 1.x 版本中
存在Namenode单点问题
在 2.x 版本中
解决:HDFS Federation方式,共享DN资源
Active Namenode
对外提供服务
Standby Namenode
Active故障时可切换为Active
HDFS读文件
Hadoop读文件过程:
1.下达命令,首先通过 DistributedFileSystem 解析命令(因为hadoop不能直接解析命令) 向 NameNode 发命令,返回所有的块信息(地址), 获得块定位(好多个) get block locations
2.客户端通过FSData InputStream (流) 读取 datenode 中的副本(默认读主块、主副本)
3.将流关闭
HDFS写文件
Hadoop写文件过程:
1.下达命令,先剁开(自动),文件被已128M为一个包拆解,通过 DistributedFileSystem 解析命令,询问NameNode有没有地方可以存放,返回可存放信息的位置的地址,
2。客户端 通过 FSData OutputStream (流) 向主节点写入,在主机架上 随机找 一个相近的节点,第二个节点也会随机找一个相近的节点,,第三个节点先完成副本的写入,返回信息到第二个节点,第二个节点收到信息后,完成副本写入,返回信息回到主节点,主节点完成文件写入,最终返回带着三个地址的块信息,通知NameNode,将信息写下来