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)的信息
第二个关系是在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的合并。
3. DataDode:
文件由数据块组成,典型的块大小是64MB;数据块尽量散步到各个节点
二、读数据
客户端要访问HDFS中的一个文件,首先从namenode获得组成这个文件的数据块位置列表,根据列表知道存储数据块的datanode,访问datanode获取数据。(Namenode并不参与数据实际传输)
三、写数据
客户端请求namenode创建新文件,依次将目标数据块写入各个datanode,建立多个副本,报告给namenode