Hadoop学习——(1) 基础知识

本文结构如下——

第一部分,主要从整体上对Hadoop进行简单的介绍,使得对”Hadoop是什么“这个问题在脑海中有大致的答案;

第二到第四部分,分别介绍Hadoop的存储模块HDFS、计算模块MapReduce、调度模块YARN,使得对Hadoop有更好的理解;

第五部分,介绍Hadoop的生态圈中的若干产品,使得对Hadoop的现实应用有一定理解。

1. Hadoop简介

1.1 为什么需要Hadoop?

在当前的大数据时代下,海量数据充斥在网络中。通过收集、分析、挖掘这些数据,可以有针对性地提高产品的用户体验。如常见的,推荐领域的用户画像。在这个过程中,有三个要素:

  • 数据存储
  • 数据计算
  • 数据挖掘/机器学习算法

举个例子——

假设现在有用户的特征(年龄、性别等)以及对酒店的评分,我们想分析两者之间是否有某种关系。

  • 假设有20条数据,我们可以在纸上简单地计算、分析
  • 假设有2G的数据,我们就需要在一台有足够内存的计算机上存储、计算、分析
  • 假设有2T的数据呢?我们可能需要很多台计算机,并进行高难度的分布式编程,或者,使用为了解决这种情况而出现的Hadoop!

如上所述,Hadoop是为了应对大数据问题而设计的。

1.2 Hadoop是什么?

1.2.1 概念/定义

Hadoop是一个分布式系统基础架构,可以使用户在不了解分布式系统底层细节的情况下开发分布式程序,充分利用集群进行高速存储和运算。其两大核心是HDFS和MapReduce,分别解决了大数据存储大数据分析/计算的问题[1]

  • HDFS(Hadoop Distributed File System)是可扩展、容错、高性能的分布式文件系统,异步复制,一次写入多次读取,主要负责存储

  • MapReduce 为分布式计算框架,包含map(映射)和 reduce(归约)过程,负责在 HDFS 上进行计算

Hadoop擅长海量数据的处理,如

  • FaceBook使用Hive(基于Hadoop的SQL)进行日志分析
  • 淘宝使用Hive实现自定义筛选功能实现
  • 淘宝使用Pig(基于Hadoop的大规模数据分析工具)实现商品推荐
  • Yahoo使用Pig做垃圾邮件的识别与过滤
1.2.2 核心模块

Hadoop有4个核心模块,包括——

  • HDFS:Hadoop的分布式文件系统
  • MapReduce:并行和可扩展的用于处理大数据的模式
  • YARN:任务分配和集群资源管理框架
  • Hadoop Common:为 Hadoop 其他模块提供支持的基础模块
1.2.3 优点

(HDFS和MapReduce的优点合并)

  • 高容错性,存储的数据具有多个副本,当有一个副本丢失或不可用时,HDFS可以用另一个副本代替
  • 适合大数据处理,分布式的文件存储系统使得它可以处理
  • 移动计算,HDFS提供了数据位置,使得计算框架(MapReduce)将计算的数据分配到较近的计算节点甚至是本地节点,从而消除一部分网络拥堵,提高系统的吞吐量
  • 高扩展性,Hadoop 是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以干计的节点中
  • 低成本,Hadoop是开源的

2. HDFS

2.1 概念/定义

Hadoop Distributed File System,hadoop分布式文件系统,是一个具有高度容错性的分布式文件存储系统,可以运行在廉价的服务器上。具有以下优点——

  • 高容错性,存储的数据具有多个副本,当有一个副本丢失或不可用时,HDFS可以用另一个副本代替
  • 适合大数据处理,分布式的文件存储系统使得它可以处理
  • 移动计算,当计算所需数据靠近计算节点时,可消除一部分网络拥堵,提高系统的吞吐量。HDFS提供了数据位置,使得计算框架
  • 简单一致性模型,HDFS文件一旦写入就不能修改,只能添加,简化了数据一致性的问题
  • 可移植性

为了大吞吐量而设计的HDFS不适合的场合有:低延时数据访问、小文件存储、并发写入、文件修改等

2.2 HDFS基本架构

HDFS的基本架构如上图[2],主要包含四个部分——

  • client:客户端,上传文件时对文件进行切割、与NameNode交互获取文件位置、与DataNode交互读写
  • NameNode:管理HDFS的名称空间、数据块的映射信息、处理客户端的读写请求
  • DataNode:存储文件的数据块、实际执行文件的读写操作、发送心跳包表明可用
  • Secondary NameNode:不是NameNode的副本(NameNode只有一个,存在单点故障问题,Hadoop2.x的版本中做了改进),主要工作是帮助NameNode合并edits和fsimage,减少其启动时间

2.3 HDFS读

HDFS读取文件的过程如下[2]:

  1. 客户调用open函数,得到一个DistributedFileSystem实例
  2. DistributedFileSystem实例通过RPC向NameNode获取文件的第一批block的位置,同一block按照副本数返回多个locations,距离客户端近的排在前面,并封装在FSDataInputStream对象中
  3. 客户调用read函数,通过FSDataInputStream从各个DataNode中读取数据
  4. 若第一个block读完,则关闭指向第一个block所在的DataNode的连接,接着读取下一块
  5. 若第一批block读完,FSDataInputStream从NameNode获取下一批block的位置,重复直到结束

2.4 HDFS写

HDFS写入文件的过程如下[2]:

  1. 客户调用create方法,DistributedFileSystem实例通过RPC调用NameNode创建一个没有block关联的新文件,返回FSDataOutputStream对象
  2. 客户写数据到FSDataOutputStream对象,后者将数据切成一个个小packet,排队形成data queue
  3. DataStreamer处理data queue,即询问NameNode这个新block适合的DataNode中,并将这些DataNode排成一个pipeline
  4. DataStreamer把packet写到pipeline的第一个节点,第一个节点再写入第二个节点,以此类推
  5. 每个节点收到数据后,返回一个ack,若所有DataNode都返回ack,DataStreamer通知NameNode把文件标示为已完成

3. MapReduce

3.1 概念/定义

MapReduce是一个基于集群的高性能并行计算平台,是一个并行计算框架,是一种并行程序设计方法

MapReduce允许用普通服务器组成具有成百上千节点的高性能集群,同时提供了并行计算框架,能够自动对任务进行划分,并自动分配到集群的节点上(map),再收集计算结果(reduce)。将数据分布存储、数据通信、容错处理等并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,大大减少了软件开发人员的负担

MapReduce提供以下主要功能:

  • 数据划分和计算任务调度
  • 数据/代码互定位
  • 系统优化:如把具有数据相关性的数据放到同一个节点进行运算
  • 出错检测和恢复

3.2 MapReduce流程

以 Hadoop 的word count例程看MapReduce的逻辑。一般的 MapReduce 程序会经过以下几个过程:输入(Input)、输入分片(Splitting)、Map阶段、Shuffle阶段、Reduce阶段、输出(Final result)。

  • 输入,数据一般存放在HDFS上

  • 输入分片,MapReduce框架根据输入数据按照HDFS的块大小进行分片,每个分片对应一个MAP任务

    例如,HDFS 的块的大小是 128M,如果我们输入两个文件,大小分别是 27M、129M,那么 27M 的文件会作为一个输入分片(不足 128M 会被当作一个分片),而 129MB 则是两个输入分片(129-128=1,不足 128M,所以 1M 也会被当作一个输入分片),所以,一般来说,一个文件块会对应一个分片。如图 ,Splitting 对应下面的三个数据应该理解为三个分片

  • Map阶段,用程序员编写的Map函数处理对应的分片,且每个分片尽量由靠近的计算节点(如本地)计算,也就是移动计算,上图就是把每个文件分词,映射为<单词,1>的键值对

  • Shuffling阶段,Shuffle 就是将 Map 的输出进行整合,然后作为 Reduce 的输入发送给 Reduce。简单理解就是把所有 Map 的输出按照键进行排序,并把key相同的键值对整合到同一个组中

  • Reduce阶段,用程序员编写的Reduce函数整合Shuffling阶段的输出,如上图是整合操作是求和

  • 输出,Reduce的输出直接写入HDFS中,同样以分块的形式

4. YARN

4.1 概念/定义

YARN(Yet Another Resource Manager)是Hadoop2.x使用的资源管理框架,在此之前资源调度主要依靠 JobTrackerTaskTracker

Hadoop MapReduce根据使用的资源管理框架不同,可分为MR v1和YARN/MR v2版本,如图:

4.2 JobTrackerTaskTracker模式

在MR v1版本中,资源调度主要依靠 JobTrackerTaskTracker,其中JobTracker 对应NameNode,是master节点,TaskTracker 对应DataNode,是slave节点。调度过程如下:

  1. JobClient将应用和配置参数打包成jar文件存储到HDFS,并把路径提交给JobTracker
  2. JobTracker创建所有的Task(MapTask和ReduceTask),分发到各个TaskTracker中执行
  3. 执行过程中TaskTrackerJobTracker通信,使得JobTracker监控所有task,并在task失败时重新运行

这种资源调度方式有两个缺点——

  • JobTracker需要监控所有的task,负担过大
  • 只能运行MapReduce任务,当集群的 MapReduce 任务并没有那么饱满的话,集群资源就浪费了

4.3 YARN模式

4.3.1 YARN中的container
  • Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等
  • 当AM向RM申请资源时,RM为AM返回的资源便是用Container表示
  • YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源
4.3.2 YARN组件

YARN主要包括三个组件,分别为 ResourceManager(RM)ApplicationMaster(AM)NodeManager(NM)

ResourceManager

  1. 全局的资源管理器,负责整个系统的资源管理和分配。RM由调度器ScheduleApplication Manager(ASM)构成

  2. Schedule将系统中的资源(打包成Container)分配给各个正在运行的应用程序,但不需要像JobTracker一样监控或跟踪应用的执行状态

  3. ASM负责处理客户端提交的Job,协商第一个Container以供 AM运行,并且在 AM 失败的时候重新启动AM

ApplicationMaster

  1. 用户提交的每个应用程序均包含一个AM,负责与RM调度器协商以获取资源(以Container表示),并将得到的任务进一步分配给内部的节点(资源的二次分配)

  2. 监控内部所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务

NodeManager

  1. 每个节点上的资源和任务管理器

  2. 定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态

  3. 接收并处理来自AM的Container启动/停止等各种请求

相比原来的模式,YARN有以下优点——

  • JobTracker的任务分布式化了,即每个应用有单独的AM负责监控,更安全、高效
  • AM是可编程的,用户可以对不同的编程模型写自己的AppMst,让更多类型的任务能够跑在 Hadoop 集群中

5. Hadoop生态圈[1]

基于Hadoop架构,Hadoop生态圈中有很多不同的工具,简单的介绍如下[1]

(1)HBase

HBase(Hadoop Database)是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。

(2)Hive

Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。

(3)Pig

Pig 是一个基于 Hadoop 的大规模数据分析平台,它提供的 SQL-LIKE 语言叫作 Pig Latin。该语言的编译器会把类 SQL 的数据分析请求转换为一系列经过优化处理的 Map-Reduce 运算。

(4)Sqoop

Sqoop 是一款开源的工具,主要用于在 Hadoop(Hive)与传统的数据库(MySQL、post-gresql等)间进行数据的传递,可以将一个关系型数据库中的数据导入 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导入关系型数据库中,如图。

(5)Flume

Flume 是 Cloudera 提供的一个高可用、高可靠、分布式的海量日志采集、聚合和传输的系统,Flume 支持在日志系统中定制各类数据发送方,用于收集数据。同时,Flume 提供对数据进行简单处理并写到各种数据接受方(可定制)的能力。

(6)Oozie

Oozie 是基于 Hadoop 的调度器,以 XML 的形式写调度流程,可以调度 Mr、Pig、Hive、shell、jar 任务等。

主要的功能如下。

  1. Workflow:顺序执行流程节点,支持 fork(分支多个节点)、join(将多个节点合并为一个)。
  2. Coordinator:定时触发 Workflow。
  3. Bundle Job:绑定多个 Coordinator。

(7)Chukwa

Chukwa 是一个开源的、用于监控大型分布式系统的数据收集系统。它构建在 Hadoop 的 HDFS 和 MapReduce 框架上,继承了 Hadoop 的可伸缩性和鲁棒性。Chukwa 还包含了一个强大和灵活的工具集,可用于展示、监控和分析已收集的数据。

(8)ZooKeeper

ZooKeeper 是一个开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件,如图所示。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

图15-ZooKeeper架构

(9)Avro

Avro 是一个数据序列化的系统。它可以提供:丰富的数据结构类型、快速可压缩的二进制数据形式、存储持久数据的文件容器、远程过程调用 RPC。

(10)Mahout

Mahout 是 Apache Software Foundation(ASF)旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout 包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,可以有效地将 Mahout 扩展到云中。

Reference

  1. Hadoop 系列(一)基本概念

  2. 初步掌握HDFS的架构与原理

  3. Hadoop零基础学习路线指导

  4. Hadoop到底能做什么?怎么用hadoop?

  5. JobTracker和TaskTracker

猜你喜欢

转载自blog.csdn.net/qq_36153312/article/details/88921296
今日推荐