Hadoop概述

关于 Hadoop 概念和组成的基本介绍,以及大数据生态体系的介绍

Hadoop 概述

Hadoop 是什么?

  1. Hadoop 是一个由 Apache 基金会开源的一个分布式系统基础架构

  2. 主要解决海量数据的存储和计算

  3. 广义上来说,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、内存)的老大;主要负责该节点内所有容器的生命周期的管理,监视资源和跟踪节点健康

    1. 启动时向 ResourceManager 注册并定时发送心跳消息,等待 ResourceManager 的指令
    2. 维护 Container 的生命周期,监控 Container 的资源使用情况
    3. 管理任务运行时的相关依赖,根据 ApplicationMaster 的需要,在启动 Container 之前将需要的程序及其依赖拷贝到本地
  • ApplicationMaster(AM):单个任务运行的老大;在用户提交一个应用程序时,YARN 会启动一个轻量级的进程 ApplicationMasterApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器内资源的使用情况,同时还负责任务的监控与容错

    1. 根据应用的运行状态来决定动态计算资源需求
    2. ResourceManager 申请资源,监控申请的资源的使用情况
    3. 跟踪任务状态和进度,报告资源的使用情况和应用的进度信息
    4. 负责任务的容错
  • Container:容器,相当于一台独立的服务器,里面封装了任务运行所需的资源,如内存、cpu、磁盘和网络等等,这个容器里面可以跑 ApplicationMaster、Map、Reduce 任意程序

    当 AM 向 RM 申请资源时,RM 为 AM 返回的资源就是用 container 表示的

MapReduce 概述

MapReduce 是一个分布式计算框架,我们可以通过编写 MapReduce 程序到 Hadoop 集群上执行,并行处理大规模数据集

  1. input 读取文本文件
  2. splitting:文件按行拆分,此时 k1 行号,v1 对应内容
  3. mapping:每行按照空格拆分,k2 是具体单词,v2 是单词频次
  4. shuffling:由于mapping 操作,可能是在不同机器上并行处理的,所以需要通过 shuffling 将相同 key 值的数据分发到同一个节点上去合并,这样才能统计出最终的结果,此时得到 K2 为 每一个单词, List(V2) 为可迭代集合, V2 就是 Mapping 中的 V2
  5. Reducing : 这里的案例是统计单词出现的总次数,所以 Reducing 对 List(V2) 进行归约求和 操作,最终输出

MapReduce 编程模型中 splitting 和 shuffing 操作都是由框架实现的,需要我们自己编程实现的 只有 mapping 和 reducing ,这也就是 MapReduce 这个称呼的来源

三者关系

大数据生态体系

说明:

  1. Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
  2. Flume:Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;
  3. Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统;
  4. Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算
  5. Flink:Flink是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多
  6. Oozie:Oozie是一个管理Hadoop作业(job)的工作流程调度管理系统
  7. Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库
  8. Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析
  9. ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等

一个推荐系统架构图

行为日志收集推入 kafka,然后通过 spark 或 flink 实时计算,最后结果入传统数据库或生成结果文件供推荐服务系统使用