大数据架构小结
Author:Jessie Yang
引言
本周对大数据整体架构进行学习和梳理。本文对 HDFS、MapReduce 和 Yarn 进行简单的总结。
HDFS
HDFS:Hadoop Distributed File System(hadoop 分布式文件系统)
HDFS 设计目标:以流式数据访问模式存储超大文件。
利用分布式服务集群,将各服务器看成一个文件系统进行使用。不适合:大量小文件的应用场景。
1. Namenode:又称为名称节点,是负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构,即 FsImage 和 EditLog。 你可以把它理解成大管家,它不负责存储具体的数据。
FsImage 用于维护文件系统树以及文件树中所有的文件和文件夹的元数据;
操作日志文件 EditLog 中记录了所有针对文件的创建、删除、重命名等操作
注意,这个两个都是文件,也会加载解析到内存中。
为了防止 Namenode 挂掉,sendaryNamenode 的节点用来做备份,它会定期的和 namenode 就行通信来完成整个的备份操作。
2. DataNode:数据节点,用来具体的存储文件,维护了 blockId 与 datanode 本地文件的映射。 需要不断的与 namenode 节点通信,来告知其自己的信息,方便 nameode 来管控整个系统。这里的块会默认是 128M ,每个块都会默认储存三份。
数据存储的细节
HDFS 写文件的过程。读文件类似。
MapReduce
本质
将 hashmap 做不了 10 万亿级别大数据,MapReduce 利用分布式集群去做,于是实现了 map、reduce 的过程 N 个进程同时做计算。
运行原理
1. JobClient:运行于 client node,负责将 MapReduce 程序打成 Jar 包存储到 HDFS,并把 Jar 包的路径提交到 Jobtracker,由 Jobtracker 进行任务的分配和监控。
2. JobTracker:运行于 name node,负责接收 JobClient 提交的 Job,调度 Job 的每一个子 task 运行于 TaskTracker 上,并监控它们,如果发现有失败的 task 就重新运行它。
3. TaskTracker:运行于 data node,负责主动与 JobTracker 通信,接收作业,并直接执行每一个任务。
4. HDFS:用来与其它实体间共享作业文件。
Map 任务处理
l 读取 HDFS 中的文件。每一行解析成一个<k,v>。每一个键值对调用一次 map 函数
l 重写 map(),对第一步产生的<k,v>进行处理,转换为新的<k,v>输出
l 对输出的 key、value 进行分区
l 对不同分区的数据,按照 key 进行排序、分组。相同 key 的 value 放到一个集合中
l (可选) 对分组后的数据进行归约。
Reduce 任务处理
l 多个 map 任务的输出,按照不同的分区,通过网络复制到不同的 reduce 节点上
l 对多个 map 的输出进行合并、排序。
l 重写 reduce 函数实现自己的逻辑,对输入的 key、value 处理,转换成新的 key、value 输出
l 把 reduce 的输出保存到文件中
Yarn
Yarn 的架构
Yarn 包含两部分:
l 资源管理器(Resource Manager)和节点管理器(Node Manger)这两个主要进程。
ResourceManager 进程负责整个集群的资源调度管理,独立部署在服务器上;
l NodeManger 进程负责服务器上的资源和任务管理,跟随 HDFS 的 DataNode 进程一起出现。
Yarn 的调度的过程(以 MapReduce 为例)
l 我们向 Yarn 提交应用程序,包括 MapReduce ApplictionMaster、MapReduce 程序及 Appliction 启动命令。
l ResourceManager 进程和 NodeManager 进程通信,根据集群资源,为用户程序分配第一个容器(节点管理器管理一堆容器,计算任务在容器中计算),将 MapReduce ApplictionMaster 分发到这个容器上,在容器里面启动 MapReduce ApplictionMaster。
l MapReduce ApplictionMaster 启动后立即向 ResourceManager 进程注册,并为自己的应用程序申请容器资源。
l MapReduce ApplictionMaster 申请到需要的容器后,和相应的 NodeManager 进行通讯,将 MapReduce 程序分发到 NodeManager 进程所在服务器,并在容器中进行运行,运行的 Map 或 Reduce 任务。
l Map 或者 Reduce 任务在运行期和 MapReduce ApplictionMaster 通信,汇报运行状态。当运行结束,MapReduce ApplictionMaster 向 ResourceManager 进程注销并释放容器资源。
利用 Yarn 的资源调度,可以将 MapReduce 及 Spark 等框架服务启动运行,互不干扰。
Hive
可以将结构化的数据文件映射为一张数据库表,并提供类 SQL 查询功能,简化直接编写 MapReduce 的过程。
操作符师 Hive 的最小处理单元;每个操作符处理代表 HDFS 操作或 MR 任务;编译器把 Hive SQL 转化成一组操作符。
Hive 架构
Hive 的体系结构可以分为以下几部分
(1)用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是 CLI,Cli 启动的时候,会同时启动一个 Hive 副本。Client 是 Hive 的客户端,用户连接至 Hive Server。在启动 Client 模式的时候,需要指出 Hive Server 所在节点,并且在该节点启动 Hive Server。
(2)Hive 将元数据存储在数据库中,如 mysql、derby。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
(3)解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
(4)Hive 的数据存储在 HDFS 中,大部分的查询、计算由 MapReduce 完成(包含*的查询,比如 select * from tbl 不会生成 MapRedcue 任务)。
版权声明: 本文为 InfoQ 作者【架构5班杨娟Jessie】的原创文章。
原文链接:【http://xie.infoq.cn/article/253722eb7f4ca1d0b4f0a241d】。文章转载请联系作者。
评论