HDFS 原理小测

简介:

零、目录

  1. 数据存储
  2. 缓存管理
  3. 快照管理
  4. 副本放置策略
  5. 内部认证
  6. 磁盘目录服务
  7. WebHdfsFileSystem
  8. OAuth2认证机制
  9. 其他细节

一、 数据存储

1. 内存存储(3个主类)

【默认 LAZY_PERSIST 策略】

(1)RamDiskReplicationLurTracker 类

:负责维护多个关系的数据块信息

  1. discardReplica 清理多余副本
  2. touch 更新副本块
  3. getNextCandidateForEviction 根据模式移除文件块,默认 LRU

(2)LazyWriter 类

:发动机,不断从队列中取出待持久的数据块,提交到异步持久化服务中

(3)RamDiskAsynclazyPersistService 类

:异步持久化服务,一个服务对应一个线程池,一个线程池最多一个线程

2. 异步存储(过程)

  1. DataNode 心跳汇报自身数据存储目录的 StorageType
  2. NameNode 汇总,更新各节点的存储类型记录
  3. 根据已设定的存储策略,向 NameNode 请求寻找存储类型相同的 DataNode
  4. 将目标 DataNode 作为候选节点

二、 缓存管理

1. 生命周期(4状态)

CACHING

:正在缓冲
DataNode 获取到心跳返回的缓存命令(NameNode的回复)

CACHING_CANCELLED

:正在进行的缓冲正在被取消

  1. 执行 append 写操作时
  2. 把块处理为无效块时
  3. NameNode 发送 uncache 命令时

CACHED

:已被缓冲

UNCACHING

:正在被取消
上面两类由操作主类 CacheReplicatioinMonitor 管理,
类功能:扫描整个 HDFS 文件系统,根据情况调度块进行缓存。

3. 相关配置

dif.datanode.max.locked.memory

默认值为 0(单位:字节),表示关闭内存缓存功能。

4. 中心缓存

  1. CacheManger 缓存管理器
  2. CacheReplicationMonitor 缓存副本监控器【pendingCache, pengdUncache 方法】

缓存适用场景

  1. jar 等公共资源文件
  2. 短期临时的热点数据文件

缓存块

  1. CacheDirective 基本单位
  2. CachePool 缓存池

缓存管理

· CacheAdmin CLI 命令

【CacheManger 类维护了三大映射】

1. CacheDirective id => CacheDirective

TreeMap<Long, CacheDirective>

2. 缓存路径 => CacheDirective 列表

TreeMap<String, List<CacheDirective>>

3. 缓存池名称 => CachePool

TreeMap<String, CachePool>

· CacheReplicationMonitor 工作机制
  1. 获取缓存文件所拥有的的块组信息
  2. CachePool 的缓存大小检测
  3. 遍历块,并根据块构造缓存块
  4. 更新缓存块列表,新增旧改

三、 快照管理

【只做差异记录】

1. 结构单元

  1. 快照目录
  2. 快照文件

2. SnapshotManager 主类

  1. createSnapshot
  2. deleteSnapshot
  3. getSnapshottableDirs
  4. renamesnapshot
  5. setAllowNestedSnapshots
  6. diff

3. 主要用途

  1. 丢失数据的恢复
  2. 元数据的差异比较

四、 副本放置策略

【关注 BlockPlacementPolicy 类】

策略内容

  1. 请求方是其中一个 DataNode,则直接放在本地,否则随机选择另一集群内 DataNode
  2. 第二副本放在不同于第一副本所在的机架
  3. 第三副本存在于第二副本所在的机架,但是属于不同节点
  4. 更多的副本随机放置在另外的节点

多机架集群

需开启机架感知功能(hdfs-site.xml > property > name & value):

net.topology.srcipt.file.name
/path/to/rackAware.py

存储目标

【BlockPlacementPolicyDefault -> isGoodTarget 方法】

  1. 必须是请求的存储类型
  2. 不能是 READ_ONLY
  3. 可用
  4. 未下线
  5. 不是消息落后的节点(常更新的节点)
  6. 有足够剩余空间
  7. 考虑节点 IO 负载繁忙程度
  8. 小于同机架内最大的副本数

五、 内部认证

1. BlockToken

dfs.block.access.token.enable

2. Sasl

【SaslClinet 与 SaslServer 握手】

  1. 加密 key 不为空,则进行加密握手
  2. Sasl 相关配置不为空,进行普通握手
  3. 未开启安全配置模式,不握手
  4. 特权端口号,不握手
  5. 简单认证模式,不握手
  6. 其他情况,不握手

DoSaslHandshake

  1. 客户端发送初始请求
  2. 服务端收到请求,生成询问,发送给客户端
  3. 客户端收到询问,处理询问,生成回复给服务端
  4. 服务端收到询问回复,验证通过后,返回响应回复
  5. 双方确认完毕,握手结束

六、 磁盘目录服务

1. DiskChecker 坏盘检测

......(待更新)

2. DirectoryScanner 目录扫描

......(待更新)

3. VolumeScanner 块检查

......(待更新)

七、 WebHdfsFileSystem

1. API:按方法类型、处理目标分类

(1)GET

目录文件信息相关
  1. OPEN
  2. GET_FILE_STATUS
  3. LIST_STATUS
  4. GET_CONTENT_SUMMARY
  5. GET_FILE_CHECKSUM
  6. GET_HOME_DIRECTORY
  7. GET_BLOCK_LOCATIONS
属性、ACL访问相关
  1. GET_DELEGATION_TOKEN
  2. GET_XATTRS
  3. LIST_XATTRS
  4. GET_ACL_STATUS
  5. CHECK_ACCESS

(2)PUT

文件目录设置相关
  1. CREATE
  2. MKDIRS
  3. CREATE_SYMLINK
  4. RENAME
  5. SET_REPLICATION
  6. SET_OWNER
  7. SET_PERMISSION
  8. SET_TIMES
ACL 访问属性相关
  1. RENEW_DELEGATION_TOKEN
  2. CANCEL_DELEGATION_TOKEN
  3. MODIFY_ACL_ENTRIES
  4. REMOVE_ACL_ENTRIES
  5. REMOVE_DEFAULT_ACL
  6. SET_ACL
  7. SET_XATTR
  8. REMOVE_XATTR
快照
  1. CREATE_SNAPSHOT
  2. RENAME_SNAPSHOT

(3)POST

  1. APPEND
  2. CONCAT
  3. TRUNCATE

(4)DELETE

  1. DELETE
  2. DELETE_SNAPSHOT

2. 执行器调用过程

  1. 初始化 http 请求连接
  2. 连接 Server 端
  3. 获取执行回复内容
  4. 执行失败重试操作

3. 测试命令格式

curl -i -X GET "<HOST>:<PORT>/webhdfs/v1/<PATH>?user.name=<USER>op=LIST_STATUS"

官方文档链接

八、 OAuth2 认证机制

三个角色

  1. 服务端:用户使用服务端提供的各种资源
  2. 用户:服务端资源的真实拥有者
  3. 客户端:要访问服务端资源的第三方应用

认证步骤

  1. 用户登录客户端向服务端请求一个 临时令牌
  2. 服务端通过客户端验证后,返回其临时令牌
  3. 客户端获取临时令牌后,引导 用户到服务端提供的 授权页面
  4. 用户输入账号、密码后,表明用户授权次客户端访问所请求的资源
  5. 授权过程完成后,客户端根据临时令牌从服务端 获取访问令牌
  6. 客户端获取访问令牌后向服务端访问 受保护的资源

九、 其他细节

六种块 - block

  1. HOT
  2. COLD
  3. WARM
  4. ALL_SSD
  5. ONE_SSD
  6. LAZY_PERSIST

流量处理

  1. 内部限流
  2. Balancer 数据平衡
  3. DiskBalancer 磁盘间数据平衡

(1)内部限流

  1. Balancer
  2. Fsimage
  3. VolumeScanner
DataTransferThrottler
  1. 线程安全
  2. 通过单位时间段内限制指定字节数的方式来控制平均传输速度
  3. 如果规定时间内的贷款限定字节数超过限制,则进入等待,等待下一个带宽传输周期的到来

(2)数据平衡

  1. Balancer 找目标
  2. Dispatcher 分发对象

(3)节点间数据平衡

关注 DiskBalaner 类

结束语:每次更新会补全一部分内容,欢迎提出意见。

目录
相关文章
|
6月前
|
存储 分布式计算 安全
bigdata-07-Hdfs原理到实战
bigdata-07-Hdfs原理到实战
94 0
|
6月前
|
存储 分布式计算 Hadoop
Hadoop【基础知识 01】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)
【4月更文挑战第3天】Hadoop【基础知识 01】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)
229 3
|
6月前
|
存储 分布式计算 Hadoop
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
467 0
|
1月前
|
分布式计算 Hadoop 网络安全
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
37 1
|
1月前
|
存储 机器学习/深度学习 缓存
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
45 1
|
6月前
|
存储 分布式计算 监控
Hadoop【基础知识 01+02】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
308 2
|
6月前
|
存储 运维 分布式计算
面经:HDFS分布式文件系统原理与故障排查
【4月更文挑战第10天】本文深入剖析了HDFS的底层原理和面试重点,包括HDFS的架构(NameNode、DataNode、Secondary NameNode)、文件读写流程、高级特性(快照、Erasure Coding、Federation、High Availability)以及故障排查方法。通过HDFS Shell命令示例,加强理解,并对比了HDFS与其他分布式文件系统的优缺点。掌握这些知识将有助于求职者在面试中脱颖而出,应对HDFS相关技术考察。
460 3
|
存储 大数据
大数据数据存储的分布式文件系统的HDFS的核心机制理解的数据读/写原理
在 Hdfs 中,数据的读写原理是基于块的分布式存储。
72 0
|
6月前
|
存储 分布式计算 Hadoop
什么是HDFS?请解释其架构和工作原理。
什么是HDFS?请解释其架构和工作原理。
122 0
|
存储 分布式计算 Hadoop
HDFS基本原理及操作
通过实验了解HDFS的基本原理,掌握HDFS Shell常用命令。

相关实验场景

更多