大数据概述

大数据定义

	 在(短时间)内(快速)产生的(大量)的(多种多样)的(有价值)的信息

数据量过大的问题:扩展

垂直扩展

文字详情:在原本的服务器中,增加内存条,比较昂贵
如下图:正方形为服务器圆为内存条 

在这里插入图片描述

横向扩展

文字详情:增加多台服务器达到集群,可以无限增加,简单廉价的服务器或者PC端都可以
如图:正方形为服务器,可以无限增加

在这里插入图片描述

** hadoop生态圈来源谷歌的三大论文**
主要组件:HDFS、MapReduce、YARN、Sqoop、Hbase

一、GFS — HDFS分布式文件系统(分布式的存储)

HDFS 采用了主从结构
  1. block块的形式将大文件进行相应的存储 —(大小可以随意设置)
    1.x默认64M
    2.x默认128M
  1. 文件线性切割成块(Block) : 以偏移量offset(byte)标识//等于每块block的id
  1. Block 分散存储在集群结点中
    多台服务器一起存储一个切割后的文件的各个Block
  1. 单一文件Block大小一致 文件与文件可以不一致
    文件中的一个Block为128M,则每个都为128M
    文件a与文件b的Block的大小可以不一致
  1. Block可以设置副本数,副本分散在不同的节点中
    Block可以备份,要备份在不同的服务器节点中
  1. 副本数不要超过节点数量
    备份的数量不要超过节点的数量
  1. 文件上传时可以设置Block的大小和副本数
    只有在上传的时候才能设置Block的大小和备份的数量
  1. 只支持一次写入多次读取,同一时刻只能有一个写入者
  1. 当文件按照给定的Block大小切割时,最后余出一点,此时无论多出来的Block多小,都会多出一块Block去装最后的一点
主节点(Namenode)
  1. 掌控全局 管理从节点(Datenode的信息) 管理元数据
    元数据:描述数据的数据
    源数据:数据
  1. 接收客户端(Client)的请求 读写
  1. 与从节点(Datenode)之间进行相应的通信
从结点(Datenode)
  1. 干活的— 存储数据
  1. 汇报自己的情况给主节点(Namenode)
  1. 接收客户端(Client)的安排
客户端(Client)
hdfs的读写机制:读文件和存文件

写操作:

  1. 源数据 : 一个大文件
  2. 客户端(Client)会将这个大文件进行切块 文件的大小/块的大小=Block块数
  3. 客户端(Client)向主节点(Namenode)汇报
    3.1 块(Block)的数量
    3.2 文件的大小
    3.3 文件的权限
    3.4 文件的属主
    3.5 文件的上传时间
  4. 客户端(Client)切下来的块(Block)默认128M
  5. 客户端(Client)会向主节点(Namenode)去申请资源----得到从节点(Datanode)的信息
  6. 主节点(Namenode)会返回一批负载不高的从节点(Datanode)的信息
  7. 客户端(Client)会向从节点(Datanode)里面发送Block并且做好备份
  8. 从节点(Datanode)存放Block块之后会向主节点(Namenode)汇报情况

读请求:

  1. 主节点(Namenode)会向客户端(Client)中发送一个请求,客户端(Client)结束到请求后,会向主节点(Namenode)中申请得到从节点(Datanode)的信息(Blockid)//偏移量
  2. 主节点(Namenode)向客户端(Client)中发送一些节点信息
  3. 客户端(Client)获取到节点信息后去从节点(Datanode)拿取数据 — 就近原则
备份—为了解决安全问题
备份的机制:

1.提交

  1. 集群内提交
    在提交的节点上(本节点)放置block—就近原则
  2. 集群外提交
    选择一个负载不高的节点进行存放

2.放置在与第一个备份不同机架(放置服务器的架子)的任意节点上

3.放置在与第二个备份相同的机架不同的节点上

pipeline管道 --- 各个节点接收block的备份

1.主节点(Namenode)在返回客户端(Client)一些从节点(Datanode)的信息

2.客户端(Client)会和这些从节点(Datanode)形成一个管道,并且将Block切割成一个个ackPageAge(64k)

3.从节点(Datanode)会从管道中拿取相应的数据进行存储

4.当存储完成后,从节点(Datanode)会向主节点(Namenode)进行汇报

二、MapReduce — 分布式批处理

** MapReduce运行时,首先通过Map读取HDFS中的数据,然后经过拆分,将每个文件中的每行数据分拆成键值对,最后输出作为Reduce的输入**
在这里插入图片描述
文本的数据记录:如文本的行就是以"键值对"的方式传入Map函数,然后Map函数对这些键值对进行处理(例:计算词频),然后输出到中间结果。

Map就是一个Java进程,它会读取HDFS,会把数据解析成很多的键值对,然后经过我们的Map方法处理后,转换成很多的键值对再输出。
整个Mapper的执行过程又可以分如下几步:
在这里插入图片描述

在上图中,把Mapper任务的运行过程分为六个阶段。
  1. 把输入文件按照一定的标准分片 (InputSplit),每个输入片的大小是固定的。默认情况下,输入片(InputSplit)的大小与数据块(Block)的大小是相同的。如果数据块(Block)的大小是默认值64MB,输入文件有两个,一个是32MB,一个是72MB。那么小的文件是一个输入片,大文件会分为两个数据块,那么是两个输入片,一共产生三个输入片。每一个输入片由一个Mapper进程处理,这里的三个输入片,会有三个Mapper进程处理。
  2. 对输入片中的记录按照一定的规则解析成键值对,有个默认规则是把每一行文本内容解析成键值对,这里的“键”是每一行的起始位置(单位是字节),“值”是本行的文本内容。
  3. 调用Mapper类中的map方法,在第2阶段中解析出来的每一个键值对,调用一次map方法,如果有1000个键值对,就会调用1000次map方法,每一次调用map方法会输出零个或者多个键值对。
  4. 按照一定的规则对第3阶段输出的键值对进行分区,分区是基于键进行的,比如我们的键表示省份(如北京、上海、山东等),那么就可以按照不同省份进行分区,同一个省份的键值对划分到一个区中。默认情况下只有一个区,分区的数量就是Reducer任务运行的数量,因此默认只有一个Reducer任务。
  5. 对每个分区中的键值对进行排序。首先,按照键进行排序,对于键相同的键值对,按照值进行排序。比如三个键值 对<2,2>、<1,3>、<2,1>,键和值分别是整数。那么排序后的结果 是<1,3>、<2,1>、<2,2>。如果有第6阶段,那么进入第6阶段;如果没有,直接输出到本地的linux 文件中。
  6. 对数据进行归约处理,也就是reduce处理,通常情况下的Comber过程,键相等的键值对会调用一次reduce方法,经过这一阶段,数据量会减少,归约后的数据输出到本地的linxu文件中。本阶段默认是没有的,需要用户自己增加这一阶段的代码。
Reducer任务的执行过程详解

每个Reducer任务是一个java进程。Reducer任务接收Mapper任务的输出,归约处理后写入到HDFS中,可以分为如下图所示的几个阶段。
在这里插入图片描述

  1. Reducer任务会主动从Mapper任务复制其输出的键值对,Mapper任务可能会有很多,因此Reducer会复制多个Mapper的输出。
  2. 把复制到Reducer本地数据,全部进行合并,即把分散的数据合并成一个大的数据,再对合并后的数据排序。
  3. 对排序后的键值对调用reduce方法,键相等的键值对调用一次reduce方法,每次调用会产生零个或者多个键值对,最后把这些输出的键值对写入到HDFS文件中。
键值对的编号
&nbsp; &nbsp; &nbsp;在对Mapper任务、Reducer任务的分析过程中,会看到很多阶段都出现了键值对,这里对键值对进行编号,方便理解键值对的变化情况,如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617151504131.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lvdUFyZVJpZGljdWxvdXM=,size_16,color_FFFFFF,t_70)
&nbsp; &nbsp; &nbsp;在上图中,对于Mapper任务输入的键值对,定义为key1和value1,在map方法中处理后,输出的键值对,定义为key2和value2,reduce方法接收key2和value2处理后,输出key3和value3。在下文讨论键值对时,可能把key1和value1简写 为<k1,v1>,key2和value2简写为<k2,v2>,key3和value3简写为<k3,v3>。

三、BigDate — HBase

四、yarn — 资源和任务调度

      YARN工作流程:
   运行在YARN上的应用程序主要分为两类:
短应用程序和长应用程序,其中,短应用程序是指一定时间内(可能是秒级、分钟级或小时级,尽管天级别或者更长时间的也存在,但非常少)可运行完成并正常退出的应用程序,长应用程序是指不出意外,永不终止运行的应用程序,通常是一些服务。尽管这两类应用程序作用不同,一类直接运行数据处理程序,一类用于部署服务(服务之上再运行数据处理程序),但运行在YARN上的流程是相同的。
   当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序:第一个阶段是启动ApplicationMaster;第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。如下图所示,
在这里插入图片描述

YARN的工作流程分为以下几个步骤:
  1. 用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。

  2. ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。

  3. ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。

  4. ApplicationMaster采用轮训的方式通过RPC协议向ResourceManager申请和领取资源。

  5. 一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务

  6. NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

  7. 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。

  8. 应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。

    启动命令:start-all.sh

五、Spark — 新一代计算框架

1 spark core
2 sparkSQL --- 可以使用sql语句处理
3 sparkStreaming --- 流式处理
4 mllib --- 机器学习库
5 graphx --- sqark停止维护 

sqark需要 kafka zookeeper flume hive fink storm hbase 上实现
zookeeper 为协调服务
hive 为大型数据库—使用sql语句

hadoop官网


仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值