HDFS

  • HDFS
  • 局限性
  • 目录节点
  • 数据节点
  • HDFS 命名空间
  • HDFS 存储策略
  • 副本数据
  • 数据存取策略
  • 数据存放
  • 数据读取
  • 数据复制
  • HDFS通讯协议
  • HDFS可靠性设计
  • 分布式文件系统的设计需求
  • HDFS基本特征


HDFS

局限性

  • 不适合低延迟数据的访问
  • 无法高校存储大量的小文件
  • 不支持多用户写入以及任意修改文件

  • HDFS分布式文件系统中的文件被分成快进行存储,“块”是文件处理的逻辑单元
  • 默认块是64MB,比文件系统的快大得多
  • 使用抽象块的好处:
    可以存储任意大的文件,而不会受网络中任意单个节点磁盘大小限制;
    使用抽象块作为操作单元,可以简化存储系统;
    块有利于复制容错的实现

目录节点

目录节点 NameNode 是集群中的主节点,负责管理整个HDFS的命名空间和元数据,是客户端访问HDFS系统的入口,目录节点保存文件系统的三种元数据

  • 命名空间:整个系统的目录结构
  • 数据块与文件名的映射表
  • 每个数据块副本的位置信息,每个数据块都默认有3个副本。“副本因子”,保存多少分副本,也在目录节点中

数据节点

数据节点一般就是集群中的一台机器,复杂数据的存储和读取

  • 写入的时候,由目录节点分配数据块的保存,客户端直接写入到对应的数据节点
  • 读取时,客户端从目录节点获得数据块的映射关系,直接到对应的数据接待你读取数据
  • 数据节点要根据目录节点的命令创建、删除数据块和进行副本复制

基于hadoop的电信数据分析系统 基于hdfs的数据分析_大数据


基于hadoop的电信数据分析系统 基于hdfs的数据分析_hadoop_02


HDFS 是不能直接访问各个datanode 的Linux文件系统的

HDFS 命名空间

  • Hadoop 文件命名遵循了传统的 “目录/子目录/文件”格式,通过命令行或者API创建目录,创建、删除文件等
  • 命名空间由目录节点管理,对命名空间的变动都会被HDFS记录下来

HDFS 存储策略

副本数据

  • 文件分成固定大小的块,每个数据块都冗余存储
  • 数据节点定期发送心跳信号和数据列表给目录节点,心跳信号使目录节点直到该数据节点还是有效的。而数据块列表包括了该数据节点上面所有数据块的编号

基于hadoop的电信数据分析系统 基于hdfs的数据分析_数据_03

数据存取策略

数据存放
  • hadoop采用以机柜为基础的数据存放策略,提高数据可靠性和充分利用网络带宽
  • 默认副本因子是3,一块数据有3个地方存放,两份在同一个rack id的不同机器上,一份放在不同rack id的机器上。也就是说 2/3数据在同一个机柜的不同机器上,1/3在另一个机柜
  • 计科一进行数据恢复,又能提高读写性能
数据读取
  • 读取数据时,如果又块数据和客户端的机柜id一样,优先选择该数据节点,客户端直接和数据节点建立连接,读取数据
  • 如果没有,可以随机选择数据节点
数据复制
  • 采用流水线复制策略

当客户端要在HDFS上写一个文件:

  • 首先将这个文件写在本地
  • 对文件进行分块,64M一块
  • 每个数据块都对HDFS目录节点发起写请求
  • 目录节点选择一个数据节点列表(副本位置),返回给客户端
  • 客户端把数据写入第一台数据节点,并把列表传给数据节点
  • 当数据节点收到4KB数据时,写入本地,并发起连接到下一个数据节点,把4K传过去,形成一条流水线
  • 最后当文件写完的时候,数据复制也同时完成

HDFS通讯协议

  • HDFS通讯协议在TCP/IP基础上开发
  • 客户端使用Client协议和目录节点通讯
  • 目录节点和数据节点使用Datanode协议
  • 客户端和数据节点的交互通过远程过程调用(RPC,Remote Rocedure Call)

HDFS可靠性设计

  • HDFS要在应产出措施保证目标可靠

基于hadoop的电信数据分析系统 基于hdfs的数据分析_基于hadoop的电信数据分析系统_04

基于hadoop的电信数据分析系统 基于hdfs的数据分析_hdfs_05


基于hadoop的电信数据分析系统 基于hdfs的数据分析_hadoop_06


基于hadoop的电信数据分析系统 基于hdfs的数据分析_数据_07

分布式文件系统的设计需求

  • 透明性
  • 并发控制
  1. 客户端对文件的读写不应该影响其他客户端对通过一个文件的读写
  2. HDFS机制非常简单,任何时间都只允许一个写的客户端,问肩颈创建并写入之后不再改变,一次写多次读。
  • 文件复制功能:HDFS 默认有3个副本
  • 硬件和操作系统的异构性:HDFS由JAVA实现,可以在不同操作系统和计算机上实现相同的客户端和服务成序
  • 容错能力:心跳检测,检测文件快的完整性,集群负载均衡,为何多个Fslmage 和 Editlog 的拷贝
  • 安全性问题:HDFS安全性弱,只有文件续可控制

HDFS基本特征

  • 顺序式文件访问:HDFS对数虚度写作了忧患,执行大量数据的顺序读出,对于随机访问的负载较高
  • 简单的一致性模型(一次写入多次读)支持在文件尾部添加新的数据
  • 数据库存储模式: 基于块的文件存储,多副本数据块形式存储