Hadoop《一》

什么是hadoop

Hadoop是一个项目,它不仅仅是一个用于存储的分布式文件系统,而是设计用来在由通用计算设备组成的大型集群上执行分布式应用的基础框架。由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。简单来说,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台。
更简单来说就是:在一些很便宜的机器上,部署多个hadoop项目,去执行分布式应用,再存储到分布式文件系统上。至于什么是分布式,用户不需要考虑,这也正是Hadoop对用户来说的一个优点。
Hadoop框架中最核心的设计就是:MapReduce和HDFS。

  • MapReduce的思想产生于谷歌的一篇论文,简单来说MapReduce就是“任务的分解与结果的汇总”。
  • HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算的存储提供了底层的支持。

为什么要选择Hadoop(优点)

系统特点:

  • 扩容能力(Scalable):能可靠的,reliably的存储和处理千兆字节,PB级的数据。
  • 成本低(Economical):可以通过很普通的机器组成服务器集群来分发和处理数据,这些服务器群总计可达数千个节点。
  • 高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行的(parallel)处理他们,这使得处理速度非常快。
  • 可靠的(Reliable):hadoop能自动的维护数据的多份复制,并且在任务失败后能自动的重新部署(redeploy)计算任务。

使用场景

最适合海量数据的分析,MapReduce是为了海量数据分析,HDFS最早是为了搜索引擎实现而开发的,后来应用于分布式计算框架中。这些还用数据在被hadoop执行的过程中被分割成多个节点,然后在由每个节点并行计算,将得出的结果归并到输出。同时第一个阶段的输出又可以作为下一个阶段计算的输入,因此可以想象一个树状结构的分布式计算图,在不同阶段都会有不同的产出,同时并行和串行结合的计算可以很好的在分手不是集群的资源下得以高效的处理。

术语

  • NameNode:HDFS采用Master/slave架构。一个HDFS集群是由一个NameNode和一定数目的DataNodes组成。NameNode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。NameNode执行文件系统的名字空间操作,比如打开,关闭,重命名文件或目录。他也负责确定数据块到具体DataNode节点的映射。
  • DataNode:集群中的DataNode一般是一个节点一个,负责管理她所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组DataNode上。DataNode负责处理文件系统客户端的读写请求。在NameNode的统一调度下进行数据块的创建,删除和复制。
  • SecondNameNode:光从字面上理解,很容易先入为主的认为:SecondaryNameNode(SNN)就是NameNode(NN)的热备进程。其实不是的,SNN是HDFS架构中的一个组成部分,但是经常由于名字被误解,其实真正的用途,是用来保存NameNode中对HDFS的metadata(元数据)的信息的备份,并减少NameNode重启的时间。
  • Jobtracker和Tasktracher:JobTracker是MapReduce框架中最主要的类之一,所有job的执行都由它来调度,而且Hadoop系统中只配置一个JobTracker应用。他们都是由一个master服务JobTracker和多个运行于多个节点的Slaver服务TaskTracker两个类提供的服务调度的。Master负责调度job的每一个子任务Task运行于slave上,并监控他们,如果发现有失败的task就重新运行它,slave则负责直接执行每一个Task。TaskTracker都需要运行在HDFS的DataNode上,而JobTracker则不需要,一般情况应该把JobTracker部署在单独的机器上。

hadoop的架构分析

Hadoop有很多元素构成。最底部是Hadoop Distributed File System(HDFS),他存储Hadoop集群中所有存储节点上的文件,与HDFS相关的服务有NameNode、SecondaryNameNode及DataNode;HDFS(对于文本)的上一层是MapReduce引擎,该引擎有JobTracker和TaskTrackers组成(所以MapReduce相关的服务有JobTracker和TaskTracker两种)。
Hadoop集群中有两种角色:master与slave,master又分为主master和次master。
其中:

  • 主master同时提供NameNode,SecondaryNameNode及JobTracker三种服务;
  • 次master只提供SecondaryNameNode服务;
  • 所有slave可以提供DateNode或TaskTracker俩种服务。
    HDFS
    对于外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建,删除,移动或者重命名等。但是HDFS的架构是基于一组特定的节点构建的,这是由自身的特点决定的。这些节点包括NameNode(仅一个),它在HDFS内部提供元数据服务;DataNode,他为HDFS提供存储块。
    下图为Hadoop集群的简化视图:
    在这里插入图片描述
    存储在HDFS中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的RAID架构大不相同。块的大小(通常为64MB)和复制的块数量在创建文件时由客户机决定。NameNode可以控制所有文件操作。HDFS内部的所有通信都基于标准的TCP/IP协议。

HDFS的三个重要角色

在这里插入图片描述

  • NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息,每一个文件对应的文件块的信息和每个文件块在DataNode的信息等。
  • DataNode是文件存储的基本单元,他将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性的将所有存在的Block信息发送给NameNode。
  • Client就是需要获取分布式文件系统文件的应用程序。

这里通过三个操作来说明他们之间的交互关系。

1.文件写入:

  • Client向NameNode发起文件写入的请求。

  • NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。

  • Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。
    2.文件读取:

  • Client向NameNode发起文件读取的请求。

  • NameNode返回文件存储的DataNode的信息。

  • Client读取文件信息。
    3.文件Block复制

  • NameNode发现部分文件的Block不符合最小复制数或者部分DataNode失效。

  • 通知DataNode相互复制Block。

  • DataNode开始直接相互复制。

HDFS设计特点

HDFS采用的设计特点,对于框架设计值得借鉴:
1.Block的放置
默认不配置。一个Block会有三份备份,一份放在NameNode指定的DataNode,另一份放在与指定DataNode非同一Rack上的DataNode,最后一份放在与指定DataNode同一Rack上的DataNode上。备份就是为了数据安全,考虑同一Rack的失败情况以及不同Rack之间数据拷贝性能问题就采用这种配置方式。
2.心跳检测
3.数据复制
4.数据校验
5.NameNode是单点
6.数据管道性的写入
7.安全模式

MapReduce算法介绍

在这里插入图片描述在这里插入图片描述MapReduce从名字上来看就大致可以看出是Map和Reduce的组合,Map就是将一个任务分解成为多个任务,Reduce就是将分解后多个任务处理的结果汇总起来,得出最后的分析结果。
在分布式系统中,机器集群可以看作硬件资源池,将并行的任务拆分,然后交由每一个空闲的机器资源去处理,能够极大的提高计算效率,同时这种资源无关性,对于计算集群的扩展无疑提供了最好的设计保证。
(廉价的机器群可以匹敌任何高性能的计算机,纵向扩展的曲线始终敌不过横向扩展的斜线)。任务分解处理后,就需要将处理后的结果再汇总起来,这就是Reduce的工作。
具体过程如下:
1.Input输入
从文件中读取原始数据
原始数据:<InputKey,InputValue>
2.Map映射
将原始数据映射成用于Reduce的数据
<InputKey,InputValue> List<<MapKey,MapValue>>
3.Reduce合并
将相同Key值的中间数据合并成最终数据
<MapKey, List> <OutputKey,OutputValue>
4.Output输出
将最终处理结果输出到文件
<OutputKey,OutputValue>结果文件
上述就是MapReduce大致处理过程,在Map前还可能会对输入的数据有Split(分割)的过程,保证任务并行效率,在Map之后还会有Shuffle(混合)的过程,对于提高Reduce的效率以及减少数据传输的压力有很大的帮助。后面会具体提及这些部分的细节。

Hadoop框架下的MapReduce

最简单的MapReduce应用程序至少包含三个部分:一个Map函数、一个Reduce函数和一个main函数。Main函数将作业控制和文件输入/输出结合起来。在这点上,Hadoop提供了大量的接口和抽象类,从而为Hadoop应用程序开发人员提供许多工具,可用于调试和性能度量等。

MapReduce本身就是用于并行处理大数据集的软件框架。MapReduce的根源是函数性编程中的Map和Reduce函数。它由两个可能包含有许多实例(许多Map和Reduce)的操作组成。Map函数接收一组数据并将其转换为一个键值对列表,输入域中的每个元素对应一个键值对。Reduce函数接收Map函数生成的列表,然后根据他们的键(为每个键生成一个键值对)缩小键值对列表。

综合MapReduce和HDfS分析Hadoop的结构

在Hadoop的系统中,会有一台Master,主要负责NameNode的工作以及JobTracker的工作。JobTracker的主要职责就是启动、跟踪和调度各个Slave的任务执行。还会有很多台Slave,每一台Slave通常具有DataNode的功能并负责TaskTracker的工作。TaskTracker根据应用要求结合本地数据执行Map任务以及Reduce任务。
注:在实际的应用环境中需要:NameNode和JobTacker要部署在不同的服务器上;

分布式的一个重要的设计点就是:Moving Computation is Cheaper than Moving Data。就是分布式处理中,移动数据的代价总是高于转移计算的代价。简单来说就是分而治之的工作,需要将数据也分而存储,本地任务处理本地数据然后归总,这样才会保证分布式计算的高效性。

对外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建,删除,移动或重命名文件等。但是HDFS的架构是基于一组特定的节点构建的,这是由它自身自身特点决定的。这些节点包括NameNode(仅一个),它在HDFS内部提供元数据服务;DataNode为HDFS提供存储块。由于仅存在一个NameNode,因此这是HDFS的一个缺点(单点失败)。

HDFS是分布式计算的存储基石,Hadoop的分布式文件系统和其他分布式文件系统有很多类似的特质。分布式文件系统具有如下几个基本的几个特点

1.对于整个集群有单一的命名空间。

2.数据一致性。适合一次写入多次读取的模型,客户端在文件没有被成功创建之前无法看到文件存在。

3.文件会被分割成多个文件块,每个文件块被分配存储到数据节点上,而且根据配置会由复制文件块来保证数据的安全性。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值