HDFS概述

1.HDFS架构

1.Client:客户端

  • 将文件切分成一个个的Block,进行存储
  • 与NameNode进行交互,获取文件的位置信息
  • 与DataNode进行交互,读取或追加数据
  • 通过命令来管理HDFS,如开启或关闭集群start-dfs.sh、stop-dfs.sh
  • 通过命令访问HDFS

2.NameNode:HDFS的管理者(命令发布者)

  • 管理HDFS的命名空间
  • 管理数据块(Block)的映射信息
  • 配置副本策略
  • 处理客户端的读写请求

3.DataNode:HDFS的执行者(命令执行者)

  • 存储实际的数据块
  • 执行数据块的读/写操作

4.SecondaryNameNode:辅助NameNode

f

  • 辅助NameNode分担其工作量
  • 定期合并清洗整理fsimage和edits发送给NameNode
  • 紧急情况下,帮助NameNode恢复数据,但是不能代替NamaNode工作

5.HDFS的Block块大小问题

Hadoop1中默认块大小为64M,Hadoop2以后版本默认大小调整为128M,生产环境中一般为256M或512M

Block块过小,文件的数量增大,NameNode的压力会变大,文件查找时间也会变长

Block块过大,读取文件的时间会变长

2.HDFS基本操作命令

HDFS的所有操作命令均以hdfs dfs 具体命令构成(另外两种语法hadoop dfs 命令、hadoop fs 命令)

1.-help

#查看该命令帮助文档
具体命令 -help
hdfs dfs -help

2.-ls

#显示某路径下的目录信息
hdfs dfs ls 路径(相对路径或绝对路径)
hdfs dfs ls /etc

3.-mkdir

#在该路径下面创建一个文件夹
hdfs dfs -mkdir 路径
hdfs dfs -mkdir /root

4.-moveFromLocal

#从本地剪切到HDFS
hdfs dfs -moveFromLocal 本地路径 HDFS路径
hdfs dfs -moveFromLocal /root/a.txt /

5.列举

诸如此类的命令还有很多,用法大同小异,笔者这里就不逐个列举了,只写明指令的作用。

#追加一个文件到已存在文件的末尾
hdfs dfs -appendToFile 本地文件路径 目标文件路径
#显示文件内容
hdfs dfs -cat 文件路径(具体到文件名称)
#显示文件末端10行
hdfs dfs -tail 文件路径(具体到文件名称)
#修改使用者权限
hdfs dfs -chgrp +r 文件
hdfs dfs -chown +r 文件
hdfs dfs -chmod +r 文件
#从本地拷贝文件到HDFS中
hdfs dfs -copyFromLocal 本地路径 目标路径
#从HDFS拷贝到本地
hdfs dfs -copyToLocal 文件 本地路径
#从HDFS的一个路径拷贝到另一个路径
hdfs dfs -cp 路径 路径
#在HDFS中移动文件
hdfs dfs -mv 路径 路径
#从HDFS下载文件
hdfs dfs -get HDFS路径 本地路径
#多个文件打包下载
hdfs dfs -getmerge HDFS路径 本地路径
#上传文件
hdfs dfs -put 本地路径 目标路径
#设置HDFS文件副本数量
hdfs dfs -setrep 文件 数量

3.HDFS文件的读写流程

1.HDFS文件的写入流程

HDFS概述_第1张图片

2.HDFS文件的读取流程

HDFS概述_第2张图片

4.NameNode和SecondaryNameNode的工作机制

1.NameNode的工作机制

  • 第一次启动NameNode格式化后,创建fsimage和edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。

  • 客户端对元数据进行增删改的请求

  • NameNode在内存中对数据进行增删改

2.SecondaryNameNode的工作机制

  • Secondary NameNode询问NmaeNode是否需要checkpoint。直接带回NameNode是否检查结果。

  • Secondary NameNode请求执行checkpoint。

  • NameNode滚动正在写的edits日志

  • 将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode

  • Secondary NameNode加载编辑日志和镜像文件到内存,并合并。

  • 生成新的镜像文件fsimage.chkpoint

  • 拷贝fsimage.chkpoint到NmaeNode

  • NmaeNode将fsimage.chkpoint重新命名成fsimage

简单的总结就是,NameNode负责对数据文档的上传、追加、下载等做好记录,Secondary NameNode负责周期性的去拷贝NameNode中的元数据,并对数据进行清洗、整理、合并之后在发送给NameNode,协助NameNode工作

3.集群的安全模式

  • Namenode启动时,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件和一个空的编辑日志。此时,NmaeNode开始监听DataNode请求。但是此刻,NmaeNode运行在安全模式,即NmaeNode的文件系统对于客户端来说是只读的。
  • 系统中的数据块的位置并不是由NmaeNode维护的,而是以块列表的形式存储在DataNode中。在系统的正常操作期间,NmaeNode会在内存中保留所有块位置的映射信息。在安全模式下,各个DataNode会向NmaeNode发送最新的块列表信息,NmaeNode了解到足够多的块位置信息之后,即可高效运行文件系统。
  • 如果满足“最小复本条件”,NmaeNode会在30秒钟之后就退出安全模式。所谓的最小复本条件指的是在整个文件系统中99.9%的块满足最小复本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NmaeNode不会进入安全模式。

集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。

相关语法:

hdfs dfsadmin -safemode get	    (功能描述:查看安全模式状态)
hdfs dfsadmin -safemode enter  	(功能描述:进入安全模式状态)
hdfs dfsadmin -safemode leave	(功能描述:离开安全模式状态)
hdfs dfsadmin -safemode wait	(功能描述:等待安全模式退出)

5.DataNode工作机制

1.DataNode的工作机制

HDFS概述_第3张图片

  • 一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
  • DataNode启动后向NmaeNode注册,通过后,周期性(1小时)的向NmaeNode上报所有的块信息。
  • 心跳是每3秒一次,心跳返回结果带有NmaeNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
  • 集群运行中可以安全加入和退出一些机器。

2.数据完整性校验

  1. 当DataNode读取Block的时候,它会计算checksum。
  2. 如果计算后的checksum,与Block创建时值不一样,说明Block已经损坏。
  3. 这时客户端读取其他DataNode上备份的Block。
  4. DataNode会在其文件创建后周期验证checksum。
  5. 校验采用crc算法校验

3.文件快照

快照相当于对目录做一个备份。并不会立即复制所有文件,而是当文件发生写入或修改变化时才会产生新的文件。

#基本语法
hdfs dfsadmin -allowSnapshot 路径   (功能描述:开启指定目录的快照功能)
hdfs dfsadmin -disallowSnapshot 路径 (功能描述:禁用指定目录的快照功能,默认是禁用)
hdfs dfs -createSnapshot 路径        (功能描述:对目录创建快照)
hdfs dfs -createSnapshot 路径 名称   (功能描述:指定名称创建快照)
hdfs dfs -renameSnapshot 路径 旧名称 新名称 (功能描述:重命名快照)
hdfs lsSnapshottableDir         (功能描述:列出当前用户所有可快照目录)
hdfs snapshotDiff 路径1 路径2 (功能描述:比较两个快照目录的不同之处)
hdfs dfs -deleteSnapshot <path> <snapshotName>  (功能描述:删除快照)

你可能感兴趣的:(大数据,hadoop,big,data,hdfs)