HDFS—入门简介

原文作者:Zh_Y_G

原文地址:HDFS入门简介

目录

HDFS是什么?

设计目标:

安装配置

HDFS读写流程图解

CheckPoint


HDFS是什么?

  1. 易于扩展的分布式文件系统
  2. 运行在大量普通廉价机器上提供容错机制
  3. 为大量用户提供性能不错的存取服务

设计目标:

  1. 自动快速检测应对硬件错误
  2. 流式访问数据,以流的方式访问数据,设计用于数据的批量处理
  3. 缺点:不适合存储大量小文件;不适合低延迟的数据访问;不支持多用户写入及任意修改文件
  4. 移动计算不移动数据(大数据基本原则,空间换时间)
  5. 简单一致性模型
  6. 异构平台可移植性

安装配置

hdfs://(协议头)host(主机名):port(端口号)/

查看${HADOOP_HOME}/bin${HADOOP_HOME}/sbin
在这里插入图片描述

#学会help(很多地方都可以查看帮助文档)
hdfs dfsadmin -help

HDFS的基本组件

  1. namenode:管理整个文件系统的元数据,负责管理元数据、维护目录结构、响应客户端请求
  2. datanode:复制管理用户的文件数据块,负责管理用户提交的数据 心跳机制 块报告
  3. secondarynamenode:namenode的助理,帮助加载元数据,紧急情况下(例如namenode宕机),可以帮助恢复数据
    在这里插入图片描述

HDFS读写流程图解

1. 写数据流程
在这里插入图片描述
 

节点服务器传输数据方式:网络传输,以package包的形式(第8步,上传数据的时候会把package先放到缓存队列,如果此时package出错的话,会默认重传 4次)
这里的话,追加一些问题(分布式系统之间可能故障,而且网络的不可靠性都是设计人员需要考虑的问题):socket(长连接),http(短连接),还有其他的方式,比如管道、FIFO、消息队列

1)为什么使用长链接?

最简单分布式系统是一直存在的,很少是短时间的访问,维持心跳机制

2)什么是心跳机制?

namenode启动的时候,会有一个加载元数据(数据的数据,类似于表的索引)和块报告(datanode会定时(可以再配置文件中设置,所以一定要时间同步)对块信息进行统计)的过程,namenode通过心跳机制维护整个集群的可用性。如果块报告上传失败,namenode不会更新元数据,在块报告的时候就会将其删除掉。

3)安全模式

什么时候进入安全模式?刚刚启动(namenode加载元数据的时候(先加载元数据镜像到内存中,在将edits日志的操作在内存中执行一遍,namenode进入安全模式,进行块报告,阈值安全的话30秒退出安全模式))阈值低于0.999f(默认)datanode存活数量小于0

4)怎么解除安全模式?

  1. 格式化集群(需要删除namenode.dir的配置路径)基本不会采用这种方式
  2. 强制离开安全模式:hdfs dfsadmin -safemode leave
  3. # 检测集群文件、节点、块是否出现问题hdfs fsck /
  4. #删除损坏块的blockhdfs fsck / -delete
  5. 调低阈值(在配置文件 safemode)

2. 读数据流程
在这里插入图片描述
 

磁盘故障

多个副本策略

namenode故障宕机

简单方案:secondarynamenode取出fsimage文件copy到namenode的元数据存储目录下

完美解决:在namenode上挂多块磁盘,配置fs.namenode.name.dir(用,分割磁盘 )

CheckPoint

触发条件:

  1. 事务达到1000000条(默认)
  2. 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>

在这里插入图片描述
注:namenode存储元数据,secondarynamenode执行checkpoint的时候去namenode下载edits和fsimage
注意的问题客户端和服务器端解释

  1. 客户端的配置文件决定副本数量,而不是服务器
  2. 文件存储以块的形式存储在服务器上(客户端决定文件切分,块大小)

猜你喜欢

转载自blog.csdn.net/sanmi8276/article/details/113063240