Hadoop

一、介绍

hadoop是一个分布式系统基础架构,核心是HDFS(Hadoop Distributed File System,分布式文件系统)和MapReduce,HDFS提供存储,MapReduce提供计算。

1. HDFS介绍

HDFS架构包含NameNode,DataNode,Client三部分:

  • NameNode用于存储、生成文件系统的元数据;
  • DataNode用于存储实际的数据,将自己管理的数据块上报给NameNode ;
  • Client:支持业务访问HDFS,从NameNode ,DataNode获取数据返回给业务,和业务一起运行。

架构原则:元数据与数据分离;主/从架构;移动计算比移动数据更划算

优点:

  • 高容错性(数据自动保存多个副本;副本丢失后,自动恢复)
  • 适合批处理;适合大数据处理
  • 流式文件访问(一次性写入,多次读取,数据批量读取而不是随机读写)
  • 可构建在廉价机器上

缺点:不满足低延迟数据访问、小文件存取、并发写入、文件随机修改

2. NameDode

整个文件系统的管理节点,维护HDFS文件系统中最重要的两个关系:

  • 每个文件对应的数据块(block)列表
  • 某一块数据块保存在哪些数据节点(datanode)的信息
第一个关系即目录树、元数据和数据块的索引信息会持久化到物理存储中,实现是保存在命名空间的镜像fsimage和编辑日志edits中;

第二个关系是在NameNode启动后,每个Datanode对本地磁盘进行扫描,将本Datanode上保存的block信息汇报给Namenode,Namenode在接收到每个Datanode的块信息汇报后,将接收到的块信息,以及其所在的Datanode信息等保存在内存中。HDFS就是通过这种块信息汇报的方式来完成block -> Datanodeslist的对应表构建

NameNode元数据存储:

  • 元数据需要存放在内存中,还必须在磁盘中有备份,就是fsImage,存放在namenode节点对应的磁盘中。
  • 引入edits.log文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到edits.log中。一旦namenode节点断电,可以通过fsImage和edits.log的合并,合成元数据。
  • 引入一个新的节点secondaryNamenode,专门用于fsImage和edits.log的合并。

Hadoop

Hadoop

3. DataDode:

文件由数据块组成,典型的块大小是64MB;数据块尽量散步到各个节点

二、读数据

客户端要访问HDFS中的一个文件,首先从namenode获得组成这个文件的数据块位置列表,根据列表知道存储数据块的datanode,访问datanode获取数据。(Namenode并不参与数据实际传输)

Hadoop

三、写数据

客户端请求namenode创建新文件,依次将目标数据块写入各个datanode,建立多个副本,报告给namenode

Hadoop