Hadoop概述

一、Hadoop概述

   Hadoop实现了一个分布式文件系统,简称HDFS。Hadoop在数据提取、变形和加载(ETL)方面有着天然的优势。Hadoop的HDFS实现了文件的大批量存储,Hadoop的MapReduce功能实现了将单个任务打碎,将碎片任务(Map)发送到多个节点上,之后再以单个数据集的形式加载(Reduce)到数据仓库里。Hadoop的ETL可批量操作数据,使处理结果直接走向存储。

  Hadoop有以下特点:

1、高可靠性。因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,能够确保针对失败的节点重新分布处理。

2、高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可方便的扩展到数以千计的节点中。

3、高效性。它以并行的方式工作,能够在节点之间动态移动数据,并保证各个节点动态平衡,因此处理速度非常快。

4、高容错性。Hadoop能够自动保存数据的多个副本,能够自动将失败的任务重新分配。

5、可伸缩性。Hadoop能够处理PB级数据。

6、低成本。Hadoop是开源的,项目软件成本大大降低。

Hadoop的组成:

1、最底部的是HDFS(Hadoop Distribute File System),它存储Hadoop集群中所有存储节点上的文件,是数据存储的主要载体。它由Namenode和DataNode组成。

2、HDFS的上一层是MapReduce引擎,该引擎由JobTrackers和TaskTrackers组成。它通过MapReduce过程实现了对数据的处理。

3、Yarn实现了任务分配和集群资源管理的任务。它由ResourceManager、nodeManager和ApplicationMaster组成。

Hadoop由以上三个部分组成,下面我们就这三个组成部分详细介绍:

1、HDFS
Hadoop HDFS 的架构是基于一组特定的节点构建的,
(1)名称节点(NameNode仅一个)负责管理文件系统名称空间和控制外部客户机的访问。NameNode决定是否将文件映射到DataNode上的复制块上。对于常见的三个复制块,第一个复制块存储在同一台机架的不同节点上,最后一个复制块存储在不通机架的某个节点上。
(2)数据节点(DataNode大量)响应来自HDFS客户机的读写请求,还响应NameNode的创建、删除和复制块的命令。名称节点依赖来自每个数据节点的定期心跳消息,名称节点可以根据这个报告验证块映射和其他文件系统元数据。
(3)第二名称节点(Secondary NameNode)为名称节点提供一个CheckPoint,他只是名称节点的一个助手节点,第二名称节点会定时到NameNode去获取名称节点的edits,并及时更新到自己fsimage上,这样,如果NameNode宕机,我们也可以使用Secondary NameNode的信息来恢复NameNode,从而防止丢失信息,减少重启时间。
HDFS的工作原理:
(1)客户端将要上传的文件按128M的大小分块。
(2)客户端向名称节点发送写数据请求。
(3)名称节点记录各个DataNode信息,并返回可用的DataNode列表。
(4)客户端直接向DataNode发送分割后的文件块,发送过程以流式写入。
(5)写入完成后,DataNode向NameNode发送消息,跟新元数据。
注意:
(1)写入1T文件,需要3T的存储,3T的网络流量。
(2)在执行读或写的过程中,NameNode和DataNode通过HeartBeat保持通信,确定DataNode活着,如果发现DataNode死掉了,就将DataNode上的数据放到其他节点。
(3)宕掉一个节点没关系,还有其他节点可以备份,甚至宕掉一个机架也没关系,其他机架上也有备份。
2、MapREduce

MapReduce用于大规模数据集(大于1T)的并行运算,Map(映射阶段)使用函数把键值对映射成新的键值对,Reduce(规约阶段)把键值对中键相同的值整合,同时应用函数映射成新的键值对。

一般的MapReduce程序会经过以下几个过程:

(1)输入(Input)。数据被分块放在HDFS中。

(2)输入分片(Splitting)。MapReduce会根据输入文件计算输入分片(split),一般来说,一个文件块(DHFS中的数据块的大小是128M,不足128M会被当做一个分片,超过128M会被切分成多个文件块)会对应一个分片。

(3)Map阶段。这个阶段的处理逻辑其实就是执行程序员编写好Map函数,因为一个分片对应一个Map任务,并且对应一个文件块,所以这里就是数据本地化的操作。

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

(5)Reduce阶段。这里也是用于编写程序的地方,针对分组后的键值对进行处理。

(6)输出(Final Result)。Reduce的输出直接写到HDFS上。输出文件也是分块存储的。

3、Yarn

Yarn资源管理框架包括以下几个部分:

(1)ResourceManager(资源管理器)是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由调度器(Scheduler)和应用程序管理器(ApplicationManager,AM)组成。Scheduler基于资源的调度情况将所需资源给Application,并不负责监控Application的状态,也不处理失败的task。ApplicationMaster负责处理客户端提交的Job以及协商第一个Container以供ApplicationMaster运行,并且在ApplicationMaster失败的时候会重新启动ApplicationMaster。

(2)ApplicationMaster是一个框架特殊的库,每个Application有一个ApplicationMaster,主要负责管理和监控部署在Yarn集群上的各种应用。

(3)NodeManager(节点管理器)主要负责启动ResourceManager分配给ApplicationMaster的Container,并监视Container的资源占用及运行情况。若超过了该Container所声明的资源量,则会kill掉该Container所代表的进程。

二、搭载在Hadoop上的框架

1、HBASE

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

2、Hive

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

3、Pig

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

4、Sqoop

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

5、Flume

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

6、Oozie

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

7、Chukwa

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

8、ZooKeeper

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

9、Avro

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

10、Mahout

Mahout是Apache Soft Foundation(ASF)旗下的一个开源项目,提供一些可扩展的机器学习领域的经典算法的实现,Mahout包含聚类、分类、推荐过滤、频繁子项挖掘算法的实现。

原文地址:https://www.cnblogs.com/xiao02fang/p/12488180.html