- Common:辅助工具
- HDFS:数据存储
- MapReduce:计算
- Yarn:资源调度,解耦
HDFS概述
分布式文件系统,负责存储文件。
NameNode:存储文件的元数据,比如文件的名称,创建日期,目录结构、文件所有者、权限等,类似我们数据库中数据表结构的概念。
不是直接把元数据加载到内存里,把生成元数据的小步骤edits(编辑日志)写到磁盘里,
namenode启动时先加载编辑日志edits和镜像文件fsimage,而不是直接把元数据上传到内存。edits存储的是文件上传生成元数据的小步骤,fsimage存储已经生成好的文件的元数据。
DataNode:这里是真正实现文件存储的
Secondary NameNode(2NN):第二内存节点,不是namenode的热备,用于监控HDFS状态的辅助后台程序。每间隔一段时间获取HDFS元数据快照。
定期帮namenode编辑日志edits执行一遍,合并旧的fsimage。生成新的fsimage上传到namenode删掉旧的fsimage。
- edits和fsimage没有存储块的位置信息(该块由哪些datanode保存),namenode从哪里获取快的位置信息呢?
datanode启动后主动向namenode注册,每周期上报所有块的信息。心跳每3秒一次,心跳返回结果带有namenode给该datanode的命令。超过10分钟没有收到datanode的心跳,则认为该节点不可用。
Yarn概述
资源管理平台,我们的Hadoop集群执行任务,此时它需要拥有对应的CPU、内存等等。而这些东西我们成为资源,针对这些资源的分配我们成为资源调度。
ResourceManager:整个集群资源调度的老大,相当于领导。(院长)
NodeManager:某个节点上的资源调度的老大(主任)
ApplicationMaster:负责数据的切分,为应用申请资源,监控任务的完成情况和容错。
Container:容器,类似于虚拟机。
MapReduce概述
MapReduce定义:
MapReduce的计算过程分为两个阶段:并行处理输入数据(Map),对数据结果进行汇总(Reduce)。
Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架。
Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。
优点:
- MapReduce易于编程
- 良好的扩展性(计算资源不够时,增加机器,无需修改代码)
- 高容错性(一台机器挂了,把任务转移到另个节点重新运行)
- 适合PB级别以上海量数据的离线数据。
缺点:
不擅长做实时计算、流式计算、DAG有向图计算。
-
MapReduce无法像MySQL一样,在毫秒或者秒级内返回结果。
-
流式计算:不擅长处理变化的数据。
-
DAG有向图计算:多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。频繁读取hdfs,频繁写入数据,浪费时间。