架构师训练营 week12 学习笔记
大数据原理概述
分布式文件系统 HDFS
HDFS 以流式数据访问模式存储超大文件,运行于商用硬件集群上。
不适合 HDFS 的场景:低延迟的数据访问、大量小文件( 超过 NameNode 的处理能力)、多用户随机写入修改文件;
文件切分成块(默认大小 64M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认 3)
NameNode 是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的 DataNode 等等;
NameNode 是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。
文件操作,NameNode 负责文件元数据的操作,DataNode 负责处理文件内容的读写请求,跟文件内容相关的数据流不经过 NameNode,只会询问它跟那个 DataNode 联系,否则 NameNode 会成为系统的瓶颈。
副本存放在那些 DataNode 上由 NameNode 来控制,根据全局情况做出块放置决定,读取文件时 NameNode 尽量让用户先读取最近的副本,降低带块消耗和读取时延
NameNode 全权管理数据块的复制,它周期性地从集群中的每个 DataNode 接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该 DataNode 节点工作正常。块状态报告包含了一个该 DataNode 上所有数据块的列表。
DataNode 在本地文件系统存储文件块数据,以及块数据的校验和可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容。
一个数据块在 DataNode 以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
DataNode 启动后向 NameNode 注册,通过后,周期性(1 小时)的向 NameNode 上报所有的块信息。
心跳是每 3 秒一次,心跳返回结果带有 NameNode 给该 DataNode 的命令如复制块数据到另一台机器,或删除某个数据块。如果超过 10 分钟没有收到某个 DataNode 的心跳,则认为该节点不可用。
集群运行中可以安全加入和退出一些机器。
大数据计算框架 MapReduce - 编程模型
移动计算比移动数据更划算;
它由称为 map 和 reduce 的两部分用户程序组成,然后利用框架在计算机集群上面根据需求运行多个程序实例来处理各个子任务,然后再对结果进行归并。
适合 MapReduce 的计算类型:TopK、K-means、Bayes、SQL;
不适合 MapReduce 的计算类型:Fibonacci;
大数据计算框架 MapReduce - 架构
JobTracker 内部实现:
作业控制
• 作业抽象成三层:作业监控层(JIP),任务控制层(TIP),任务执行层。
• 任务可能会被尝试多次执行,每个任务实例被称作 Task Attempt(TA)
• TA 成功,TIP 会标注该任务成功,所有 TIP 成功,JIP 成功
资源管理
• 根据 TaskTracker 状态信息进行任务分配
JobTracker 容错:JobTracker 失败,那么未完成 Job 失败,通过 Job 日志,Job 可部分恢复。
TaskTracker 容错
Task 容错
Record 容错
大数据集群资源管理系统 Yarn
YARN:Yet Another Resource Negotiator:一个通用的运行时框架,用户可以编写自己的计算框架,在该运行环境中运行。
Yarn 包括两个部分:
一个是资源管理器(Resource Manager),一个是节点管理器(Node Manager)。
这也是 Yarn 的两种主要进程:ResourceManager 进程负责整个集群的资源调度管理,通常部署在独立的服务器上;NodeManager 进程负责具体服务器上的资源和任务管理,在集群的每一台计算服务器上都会启动,基本上跟 HDFS 的 DataNode 进程一起出现。
资源管理器又包括两个主要组件:调度器和应用程序管理器。
调度器其实就是一个资源分配算法,根据应用程序(Client)提交的资源申请和当前服务器集群的资源状况进行资源分配。Yarn 内置了几种资源调度算法,包括 Fair Scheduler、Capacity Scheduler 等,你也可以开发自己的资源调度算法供 Yarn 调用。
Yarn 进行资源分配的单位是容器(Container),每个容器包含了一定量的内存、CPU 等计算资源,默认配置下,每个容器包含一个 CPU 核心。容器由 NodeManager 进程启动和管理,NodeManger 进程会监控本节点上容器的运行状况并向 ResourceManger 进程汇报。
应用程序管理器负责应用程序的提交、监控应用程序运行状态等。应用程序启动后需要在集群中运行一个 ApplicationMaster,ApplicationMaster 也需要运行在容器里面。每个应用程序启动后都会先启动自己的 ApplicationMaster,由 ApplicationMaster 根据应用程序的资源需求进一步向 ResourceManager 进程申请容器资源,得到容器以后就会分发自己的应用程序代码到容器上启动,进而开始分布式计算。
Yarn 的工作流程(MapReduce 为例)
1. 我们向 Yarn 提交应用程序,包括 MapReduce ApplicationMaster、我们的 MapReduce 程序,以及 MapReduce Application 启动命令。
2. ResourceManager 进程和 NodeManager 进程通信,根据集群资源,为用户程序分配第一个容器,并将 MapReduce ApplicationMaster 分发到这个容器上面,并在容
器里面启动 MapReduce ApplicationMaster。
3. MapReduce ApplicationMaster 启动后立即向 ResourceManager 进程注册,并为自己的应用程序申请容器资源。
4. MapReduce ApplicationMaster 申请到需要的容器后,立即和相应的 NodeManager 进程通信,将用户 MapReduce 程序分发到 NodeManager 进程所在服务器,并在容器中运行,运行的就是 Map 或者 Reduce 任务。
5. Map 或者 Reduce 任务在运行期和 MapReduce ApplicationMaster 通信,汇报自己的运行状态,如果运行结束,MapReduce ApplicationMaster 向 ResourceManager 进程注销并释放所有的容器资源。
大数据仓库 Hive
Hive 执行流程:
• 操作符(Operator)是 Hive 的最小处理单元
• 每个操作符处理代表 HDFS 操作或 MR 作业
• 编译器把 Hive SQL 转换成一组操作符
版权声明: 本文为 InfoQ 作者【花果山】的原创文章。
原文链接:【http://xie.infoq.cn/article/02061651d8399d304d70a1c5a】。未经作者许可,禁止转载。
评论