关于 Hadoop 概念和组成的基本介绍,以及大数据生态体系的介绍
Hadoop 概述
Hadoop 是什么?
Hadoop 是一个由 Apache 基金会开源的一个分布式系统基础架构
主要解决海量数据的存储和计算
广义上来说,Hadoop 通常是指一个更广泛的概念,即 Hadoop 生态圈
Hadoop 三大发行版本
Hadoop三大发行版本:Apache、Cloudera、Hortonworks
- Apache:最原始 Hadoop 版本,可以理解为基础版
- Cloudera:对应产品 CDH,基于稳定版 Hadoop 构建,比 Apache Hadoop 在兼容性,安全性,稳定性上有所增强,应用广泛
- Hortonworks:文档完善,对应产品 CDP,也是基于基础版 Hadoop 加了些新特性
Hortonworks现在已经被Cloudera公司收购,推出新的品牌CDP
Hadoop 优势
高可靠性
底层维护多个数据副本,即使某个计算元素或存储出现故障,数据也不会丢失
高扩展性
在集群间分配任务数据,可方便的扩展上千节点
高效性
在 MapReduce 思想下,Hadoop 是并行工作的,加快任务处理速度
高容错性
能够自动将失败的任务重新分配
Hadoop 组成
Hadoop 各个版本的区别
所谓资源调度:就是如何处理内存,cpu 的分配问题,比如说这个计算任务分给你多少内存,几个核这样
HDFS 组成概述
HDFS:Hadoop Distributed File System 分布式文件系统
组成:
- NameNode:存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的 DataNode;简而言之就是可以理解为目录、索引
- DataNode:在本地文件系统存储文件块数据,以及块数据校验和;就是具体存数据的
- Secondary NameNode:每隔一段时间对 NameNode 进行备份
YARN 组成概述
组成:
ResourceManager(RM):整个集群资源(cpu、内存)的老大;通常在独立的机器上以后台进程的形式运行。**
ResourceManager
负责给用户提交的所有应用程序分配资源**,它根据应用程序优先级、队列容量、ACLs、数据位置等信息,做出决策,然后以共享的、安全的、多租户的方式制定分配策略,调度集群资源。NodeManager(NM):单个服务器资源(cpu、内存)的老大;主要负责该节点内所有容器的生命周期的管理,监视资源和跟踪节点健康
- 启动时向
ResourceManager
注册并定时发送心跳消息,等待ResourceManager
的指令 - 维护
Container
的生命周期,监控Container
的资源使用情况 - 管理任务运行时的相关依赖,根据
ApplicationMaster
的需要,在启动Container
之前将需要的程序及其依赖拷贝到本地
- 启动时向
ApplicationMaster(AM):单个任务运行的老大;在用户提交一个应用程序时,YARN 会启动一个轻量级的进程
ApplicationMaster
。ApplicationMaster
负责协调来自ResourceManager
的资源,并通过NodeManager
监视容器内资源的使用情况,同时还负责任务的监控与容错- 根据应用的运行状态来决定动态计算资源需求
- 向
ResourceManager
申请资源,监控申请的资源的使用情况 - 跟踪任务状态和进度,报告资源的使用情况和应用的进度信息
- 负责任务的容错
Container:容器,相当于一台独立的服务器,里面封装了任务运行所需的资源,如内存、cpu、磁盘和网络等等,这个容器里面可以跑 ApplicationMaster、Map、Reduce 任意程序
当 AM 向 RM 申请资源时,RM 为 AM 返回的资源就是用 container 表示的
MapReduce 概述
MapReduce 是一个分布式计算框架,我们可以通过编写 MapReduce 程序到 Hadoop 集群上执行,并行处理大规模数据集
- input 读取文本文件
- splitting:文件按行拆分,此时 k1 行号,v1 对应内容
- mapping:每行按照空格拆分,k2 是具体单词,v2 是单词频次
- shuffling:由于mapping 操作,可能是在不同机器上并行处理的,所以需要通过 shuffling 将相同 key 值的数据分发到同一个节点上去合并,这样才能统计出最终的结果,此时得到 K2 为 每一个单词, List(V2) 为可迭代集合, V2 就是 Mapping 中的 V2
- Reducing : 这里的案例是统计单词出现的总次数,所以 Reducing 对 List(V2) 进行归约求和 操作,最终输出
MapReduce 编程模型中 splitting 和 shuffing 操作都是由框架实现的,需要我们自己编程实现的 只有 mapping 和 reducing ,这也就是 MapReduce 这个称呼的来源
三者关系
大数据生态体系
说明:
- Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
- Flume:Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;
- Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统;
- Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算
- Flink:Flink是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多
- Oozie:Oozie是一个管理Hadoop作业(job)的工作流程调度管理系统
- Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库
- Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析
- ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等
一个推荐系统架构图
行为日志收集推入 kafka,然后通过 spark 或 flink 实时计算,最后结果入传统数据库或生成结果文件供推荐服务系统使用