Hadoop概述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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包含聚类、分类、推荐过滤、频繁⼦项挖掘算法的实现。