HDFS是什么?
- 易于扩展的分布式文件系统
- 运行在大量普通廉价机器上提供容错机制
- 为大量用户提供性能不错的存取服务
设计目标:
- 自动快速检测应对硬件错误
- 流式访问数据,以流的方式访问数据,设计用于数据的批量处理
缺点:不适合存储大量小文件;不适合低延迟的数据访问;不支持多用户写入及任意修改文件 - 移动计算不移动数据(大数据基本原则,空间换时间)
- 简单一致性模型
- 异构平台可移植性
安装配置
追加连接
hdfs://(协议头)host(主机名):port(端口号)/
- 1
查看${HADOOP_HOME}/bin
和${HADOOP_HOME}/sbin
#学会help(很多地方都可以查看帮助文档)
hdfs dfsadmin -help
- 1
- 2
HDFS的基本组件
- namenode:管理整个文件系统的元数据
namenode工作职责:管理元数据、维护目录结构、响应客户端请求 - datanode:复制管理用户的文件数据块
datanode的工作职责:管理用户提交的数据 心跳机制 块报告 - secondarynamenode:namenode的助理,帮助加载元数据,紧急情况下(例如namenode宕机),可以帮助恢复数据
HDFS读写流程图解
一、 写数据流程
节点服务器传输数据方式:网络传输,以package包的形式(第8步,上传数据的时候会把package先放到缓存队列,如果此时package出错的话,会默认重传 4次)
这里的话,追加一下一些问题(分布式系统之间可能故障,而且网络的不可靠性都是设计人员需要考虑的问题):socket(长连接),http(短连接),还有其他的方式,比如管道、FIFO、消息队列(kafka。。。)
为什么使用长链接?
最简单分布式系统是一直存在的,很少是短时间的访问,维持心跳机制
什么是心跳机制?
namenode启动的时候,会有一个加载元数据(数据的数据,类似于表的索引)和块报告(datanode会定时(可以再配置文件中设置,所以一定要时间同步)对块信息进行统计)的过程,namenode通过心跳机制维护整个集群的可用性。如果块报告上传失败,namenode不会更新元数据,在块报告的时候就会将其删除掉。
安全模式
什么时候进入安全模式?
刚刚启动(namenode加载元数据的时候(先加载元数据镜像到内存中,在将edits日志的操作在内存中执行一遍,namenode进入安全模式,进行块报告,阈值安全的话30秒退出安全模式))
阈值低于0.999f(默认)
datanode存活数量小于0
怎么解除安全模式?
1. 格式化集群(需要删除namenode.dir的配置路径)
基本不会采用这种方式
2. 强制离开安全模式
hdfs dfsadmin -safemode leave
3 .
# 检测集群文件、节点、块是否出现问题
hdfs fsck /
#删除损坏块的block
hdfs fsck / -delete
4. 调低阈值(在配置文件 safemode)
二、 读数据流程
磁盘故障
多个副本策略
namenode故障宕机
简单方案:secondarynamenode取出fsimage文件copy到namenode的元数据存储目录下
完美解决:在namenode上挂多块磁盘,配置fs.namenode.name.dir(用,分割磁盘 )
CheckPoint
触发条件:
- 事务达到1000000条(默认)
- 1小时(默认)
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/hadoop/data/name</value>
</property>
<!--日志文件edits的检测目录-->
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>/hadoop/data/edits</value>
</property>
<!--时间一小时-->
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
</property>
<!--事物达到1000000-->
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
</property>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
注:namenode存储元数据,secondarynamenode执行checkpoint的时候去namenode下载edits和fsimage
注意的问题
客户端和服务器端解释
- 客户端的配置文件决定副本数量,而不是服务器
- 文件存储以块的形式存储在服务器上(客户端决定文件切分,块大小)