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 类

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

目录
相关文章
|
27天前
|
存储 分布式计算 安全
bigdata-07-Hdfs原理到实战
bigdata-07-Hdfs原理到实战
38 0
|
4月前
|
存储 分布式计算 Hadoop
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
119 0
|
9月前
|
存储 大数据
大数据数据存储的分布式文件系统的HDFS的核心机制理解的数据读/写原理
在 Hdfs 中,数据的读写原理是基于块的分布式存储。
52 0
|
8月前
|
JSON 缓存 关系型数据库
5、DataX(DataX简介、DataX架构原理、DataX部署、使用、同步MySQL数据到HDFS、同步HDFS数据到MySQL)(二)
5、DataX(DataX简介、DataX架构原理、DataX部署、使用、同步MySQL数据到HDFS、同步HDFS数据到MySQL)(二)
|
8月前
|
存储 SQL JSON
5、DataX(DataX简介、DataX架构原理、DataX部署、使用、同步MySQL数据到HDFS、同步HDFS数据到MySQL)(一)
5、DataX(DataX简介、DataX架构原理、DataX部署、使用、同步MySQL数据到HDFS、同步HDFS数据到MySQL)(一)
|
9月前
|
存储 分布式计算 负载均衡
Hadoop生态系统中的数据存储技术:HDFS的原理与应用
Hadoop生态系统中的数据存储技术:HDFS的原理与应用
|
9月前
|
存储 大数据
大数据数据存储的分布式文件系统的HDFS的核心机制理解的数据复制和原理
在 Hdfs 中,数据的复制和原理是基于块的分布式存储。
43 1
|
11月前
|
运维
图说HDFS基本原理
图说HDFS基本原理
69 0
|
存储 分布式计算 安全
HDFS分布式文件系统架构原理详解
HDFS(Hadoop Distributed File System)是Hadoop核心组成之一,是分布式计算中数据存储管理的基础,被设计成适合运行在通用硬件上的分布式文件系统。HDFS架构中有两类节点,一类是NameNode,又叫“元数据节点”,另一类是DataNode,又叫“数据节点”,分别执行Master和Worker的具体任务。HDFS是一个(Master/Slave)体系结构,“一次写入,多次读取”。HDFS的设计思想:分而治之—将大文件、大批量文件分布式存放在大量独立的机器上。
HDFS分布式文件系统架构原理详解
|
存储 运维 分布式计算
HDFS 原理与应用|青训营笔记
HDFS的使用场景,尤其是在大数据场景中的常规应用,同时也了解HDFS在其它场景的一些应用,加深对存储系统应用场景的理解。并且剖析了HDFS的整体架构,易于理解。
55 0
HDFS 原理与应用|青训营笔记

相关实验场景

更多