欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

大数据概述

程序员文章站 2022-05-01 12:27:21
...

大数据定义

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

数据量过大的问题:扩展

垂直扩展

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

大数据概述

横向扩展

文字详情:增加多台服务器达到集群,可以无限增加,简单廉价的服务器或者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官网


仅供参考