Hadoop入门

Hadoop概述

Hadoop:提供分布式的存储(一个文件被拆分成很多个块,并且以副本的方式存储在各个节点中)和计算,是一个分布式的系统基础架构:用户可以在不了解分布式底层细节的情况下进行使用。

主要模块包括:

  • 分布式文件系统:HDFS实现将文件分布式存储在很多的服务器上
  • 分布式计算框架:MapReduce实现在很多机器上分布式并行计算
  • 分布式资源调度框架:YARN实现集群资源管理以及作业的调度

HDFS

工作机制:

将文件切分成指定大小(128M)的数据块并以多副本(默认3副本)的存储在多个机器上。

架构

HDFS为 Master/Slave 架构,主要分为 NameNode(Master)和DataNode(Slave) 。

  • NameNode:
    • 一个HDFS集群只有一个
    • manages and executes file system namespace
    • regulate access to files by clients
    • determines the mapping of blocks to DataNodes
  • DataNode:
    • 一个集群多个DataNode
    • HDFS exposes a file system namespace and allows user data to be stored in files.A file is split into one or more blocks and these blocks are stored in a set of DataNodes.
HDSF_AR.jpg

副本机制-图解

HDFS_REP.jpg

HDFS写数据流程图

1.初始化FileSystem,客户端调用create()来创建文件

2.FileSystem用RPC调用元数据节点,在文件系统的命名空间中创建一个新的文件,元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。

3.FileSystem返回DFSOutputStream,客户端用于写数据,客户端开始写入数据。

4.DFSOutputStream将数据分成块,写入data queue。data queue由Data Streamer读取,并通知元数据节点分配数据节点,用来存储数据块(每块默认复制3块)。分配的数据节点放在一个pipeline里。Data Streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。

5.DFSOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据已经写入成功。

6.当客户端结束写入数据,则调用stream的close函数。此操作将所有的数据块写入pipeline中的数据节点,并等待ack queue返回成功。最后通知元数据节点写入完毕。

7.如果数据节点在写入的过程中失败,关闭pipeline,将ack queue中的数据块放入data queue的开始,当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示,则错误节点重启后能够察觉其数据块是过时的,会被删除。失败的数据节点从pipeline中移除,另外的数据块则写入pipeline中的另外两个数据节点。元数据节点则被通知此数据块是复制块数不足,将来会再创建第三份备份。

HDFS_WRITE.png

HDFS读数据流程图

1.初始化FileSystem,然后客户端(client)用FileSystem的open()函数打开文件

2.FileSystem用RPC调用元数据节点,得到文件的数据块信息,对于每一个数据块,元数据节点返回保存数据块的数据节点的地址。

3.FileSystem返回FSDataInputStream给客户端,用来读取数据,客户端调用stream的read()函数开始读取数据。

4.DFSInputStream连接保存此文件第一个数据块的最近的数据节点,data从数据节点读到客户端(client)

5.当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。

6.当客户端读取完毕数据的时候,调用FSDataInputStream的close函数。

7.在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接包含此数据块的下一个数据节点。

8.失败的数据节点将被记录,以后不再连接。

HDFS_READ.jpg

MapReduce

Hadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.

编程模型-图解

MAPREDUCE_PROCCESS.jpg

如上图所示,MapReduce核心包括

  • Split
  • InputFormat
  • OutputFormat
  • Combiner(Map处理后先自身进行归并处理)
  • Partitioner

YARN-Yet Another Resource Negotiator

是一个通用的资源管理系统,为上层应用提供统一的资源管理和调度。

架构图

YARN_AR.jpg
  • Master:ResourceManager (RM)
    • 集群中同一时间对外提供服务的只有一个
    • 处理来自客户端的请求:提交或终止任务
    • 启动和监控 ApplicationMaster
    • 监控NodeManager 分配资源
  • ApplicationMaster (AM)
    • 每个程序对应一个AM
    • AM向RM申请资源用于在 NodeManager 上启动对应的TASK
    • 为每个TASK 向RM 申请资源(container)
    • 与NodeManager 通信 监控TASK
  • Slave: NodeManager (NM)
    • 集群中有多个
    • 应用程序运行的节点
    • 向ResourceManager发送心跳信息、任务的执行情况
    • 接收来自ResourceManager的请求来启动任务
    • 处理来自ApplicationMaster的命令
  • Container: 任务运行的抽象容器
    • 包括CPU,Memory..
    • TASK运行载体
    • 其实类似于Docker中的 Container

执行流程

YARN_PROCCESS.jpg
  1. 客户端提交作业任务
  2. 与NN通信 分配container
  3. 在container上运行 AM
  4. AM注册到RM
  5. 获取到分配的可执行资源NN
  6. 在NN上启动container 并且执行TASK

你可能感兴趣的:(Hadoop入门)