一文详解大规模数据计算处理原理及操作重点

  • 时间:
  • 浏览:2
  • 来源:uu快3倍率_uu快3网游_单双计划

MapReduce作业启动和运行机制

计算过程如下图示例:

RAID3

一般情况报告下,一台服务器上不让出現一起损坏两块磁盘的情况报告,在只损坏一块磁盘的情况报告下,不可能 能利用其它磁盘的数据恢复损坏磁盘的数据,就能在保证可靠性和性能的一起,大幅提升磁盘利用率。

page_view表和user表示例

自动将SQL生成MapReduce代码的工具——Hive

这是两根非常常见的SQL统计分析句子,统计不同年龄的用户访问不同网页的兴趣偏好,对于产品运营和设计很有价值。具体数据输入和执行结果如下图示例:

事实上,DataNode会通过心跳和NameNode保持通信,不可能 DataNode超时未发送心跳,NameNode就会认为你你是什么DataNode不可能 失效,立即查找你你是什么DataNode上存储的block有有哪些,以及有有哪些block还存储在有哪些服务器上,很久 通知有有哪些服务器再复制一份block到其它服务器上,保证HDFS存储的block备份数符合用户设置的数目,即使再有服务器宕机,可是会丢失数据。

那我两根很有实用价值的SQL就那我被很简单的MapReduce计算过程处置好了。在数据仓库中,SQL是最常用的分析工具,越来越有越来越并能自动将SQL生成MapReduce代码的工具呢?你你是什么工具可是Hadoop大数据仓库Hive。

不可能 用户提交的是查询分析数据的DQL句子,Driver就会将该句子提交给自己的编译器Compiler进行语法分析、语法解析、语法优化等一系列操作,最后生成有另另十个 MapReduce执行计划。很久 根据该执行计划生成有另另十个 MapReduce的作业,提交给Hadoop MapReduce计算框架处置。

对于有另另十个 较简单的SQL命令,比如:

map函数的计算过程可是,将这行文本中的单词提取出来,针对每个单词输出有另另十个 那我的对。

MapReduce是一种非常简单又非常强大的编程模型。



RAID0

数据在从内存缓冲区写入磁盘时,根据磁盘数量将数据分成N份,有有哪些数据一起并发写入N块磁盘,使得数据整体写入传输速率是一块磁盘的N倍,读取的很久 也一样,很久 RAID0具有极快的数据读写传输速率。很久 RAID0不做数据备份,N块磁盘中假如有一天有一块损坏,数据完整性性就被破坏,所有磁盘的数据完整性都是损坏。

map函数的输入主可是有另另十个 对,在你你是什么例子里,value是要统计的所有文本中的一行数据,key在这里不重要,朋友忽略。

MapReduce数据合并与连接机制

Hadoop提供了对存储在HDFS上的大规模数据进行并行计算的框架,可是MapReduce。

RAID技术有硬件实现,比如专用的RAID卡不可能 主板直接支持,也都需要通过软件实现,在操作系统层面将多块磁盘组成RAID,在逻辑视作有另另十个 访问目录。RAID技术在传统关系数据库及文件系统中应用比较广泛,是改善计算机存储底部形态的重要手段。

原文发布时间为:2018-08-06

本文来自云栖社区公司合作 最好的土办法伙伴“ DBAplus社群”,了解相关信息都需要关注“ DBAplus社群”。

RAID6

朋友先看下MapReduce是怎么启动处置有另另十个 大数据计算应用作业的:

Hive內部预置了什么都函数,Hive的执行计划可是根据SQL句子生成有有哪些函数的DAG(有向无环图),很久 封装到MapReduce的map和reduce函数中。你你是什么例子中,map函数调用了有另另十个 Hive内置函数TableScanOpoerator、FilterOperator、FileOutputOperator,就完成了map计算,很久 不让reduce函数。

3、工具——Hive

简单在于其编程模型只中含map和reduce有另另十个 过程,map的主要输入是一对值,经过map计算后输出一对值;很久 将相同key合并,形成;再将你你是什么输入reduce,经过计算输出零个或多个对。

常用RAID技术原理图

RAID技术可是在单台服务器的多块磁盘上组成阵列,大数据需要更大规模的存储空间和访问传输速率。将RAID技术原理应用到分布式服务器集群上,就形成了Hadoop分布式文件系统HDFS的架构思想。

Hadoop处置大规模数据分布式计算的方案是MapReduce。MapReduce既是有另另十个 编程模型,又是有另另十个 计算框架。也可是说,开发人员需要基于MapReduce编程模型进行编程开发,很久 将线程通过MapReduce计算框架分派到Hadoop集群中运行。朋友先看一下作为编程模型的MapReduce。

应用线程将用户作业jar包存储在HDFS中,将来有有哪些jar包会分派给Hadoop集群中的服务器执行MapReduce计算;

应用线程提交job作业给JobTracker;

JobTacker根据作业调度策略创建JobInProcess树,每个作业完整性都是有有另另十个 自己的JobInProcess树;

JobInProcess根据输入数据分片数目(通常情况报告可是数据块的数目)和设置的reduce数目创建相应数量的TaskInProcess;

TaskTracker线程和JobTracker线程进行定时通信;

不可能 TaskTracker有空闲的计算资源(空闲CPU核),JobTracker就会给它分配任务。分配任务的很久 会根据TaskTracker的服务器名字匹配在同一台机器上的数据块计算任务给它,使启动的计算任务正好处置本机上的数据,以实现朋友一始于英文就提到的“移动计算比移动数据更划算”;

TaskRunner收到任务后根据任务类型(map还是reduce),任务参数(作业jar包路径,输入数据文件路径,要处置的数据在文件中的起始位置和偏移量,数据块多个备份的DataNode主机名等)启动相应的map不可能 reduce线程;

map不可能 reduce线程启动后,检查本地否有有要执行任务的jar包文件,不可能 越来越,就去HDFS上下载,很久 加载map不可能 reduce代码始于英文执行;

不可能 是map线程,从HDFS读取数据(通常要读取的数据块正好存储在本机);不可能 是reduce线程,将结果数据写出到HDFS。

MapReduce计算过程

1、HDFS架构原理

很久 不可能 想统计全世界互联网所有网页(数万亿计)的词频数(这正是google那我的搜索引擎典型需求),你不让可能 写有另另十个 线程把全世界的网页都读入内存,这很久 就需要用MapReduce编程来处置。

WordCount的MapReduce线程如下:

很久 在数据修改较多的场景中,任何磁盘修改数据完整性都是导致 第N块磁盘重写校验数据,频繁写入的后果是第N块磁盘比其它磁盘容易损坏,需要频繁更换,什么都RAID3很少在实践中使用。

与其写线程去读取分布在越来越多DataNode上的数据,不如将线程分派到DataNode上去访问其上的block数据。很久 怎么对线程进行分派?分派出去的线程又怎么访问HDFS上的数据?计算的结果怎么处置,不可能 结果需要合并,该怎么合并?

2、HDFS应用

MapReduce计算框架会将有有哪些分派起来,将相同的word装到一起,形成>那我的数据,很久 将其输入给reduce函数。

HDFS架构

怎么为每个数据块分配有另另十个 map计算任务,代码是怎么发送数据块所在服务器的,发送过去是怎么启动的,启动很久 又怎么知道自己需要计算的数据在文件有哪些位置(数据块id是有哪些)?

处在不同服务器的map输出的 ,怎么把相同的key聚合在一起发送给reduce任务?

Hive架构

大数据技术主要针对的是大规模数据的计算处置间题,越来越要想处置的你你是什么间题,首很难处置的可是大规模数据的存储间题。大规模数据存储要处置的核心间题有有另另十个 方面:

一、RAID技术

DataNode负责文件数据的存储和读写操作,HDFS将文件数据分割成若干块(block),每个DataNode存储一每项block,那我文件就分布存储在整个HDFS服务器集群中。应用线程客户端(Client)都需要并行对有有哪些数据块进行访问,从而使得HDFS都需要在服务器集群规模上实现数据并行访问,极大地提高访问传输速率。实践中HDFS集群的DataNode服务器会有什么都台,一般在几百台到几千台那我的规模,每台服务器配有数块磁盘,整个集群的存储容量相当于在几PB到数百PB。

RAID(独立磁盘冗余阵列)技术主可是为了改善磁盘的存储容量、读写传输速率,增强磁盘的可用性和容错能力。目前服务器级别的计算机都支持插入多块磁盘(8块不可能 更多),通过使用RAID技术,实现数据在多块磁盘上的并发读写和数据备份。

数据存储容量的间题,既然大数据要处置的是数以PB计的数据计算间题,而一般的服务器磁盘容量通常1-2TB,越来越怎么存储越来越大规模的数据?

数据读写传输速率的间题,一般磁盘的连续读写传输速率为几十MB,以那我的传输速率,几十PB的数据恐怕要读写到天荒地老……

数据可靠性的间题,磁盘相当于是计算机设备中最易损坏的硬件了,在网站一块磁盘使用寿命相当于是一年,不可能 磁盘损坏了,数据为什么办?

大数据应用线程:启动用户MapReduce线程的主入口,主要指定Map和Reduce类、输入输出文件路径等,并提交作业给Hadoop集群。

JobTracker线程:根据要处置的输入数据量启动相应数量的map和reduce线程任务,并管理整个作业生命周期的任务调度和监控。JobTracker线程在整个Hadoop集群全局唯一。

TaskTracker线程:负责启动和管理map线程以及reduce线程。不可能 需要每个数据块完整性都是对应的map函数,TaskTracker线程通常和HDFS的DataNode线程启动在同有另另十个 服务器,也可是说,Hadoop集群中绝大多数服务器一起运行DataNode线程和TaskTacker线程。

NameNode负责整个分布式文件系统的元数据(MetaData)管理,也可是文件路径名,数据block的ID以及存储位置等信息,承担着操作系统中文件分配表(FAT)的角色。HDFS为了保证数据的高可用,会将有另另十个 block复制为多份(缺省情况报告为3份),并将三份相同的block存储在不同的服务器上。那我当有磁盘损坏不可能 某个DataNode服务器宕机导致 其存储的block必须访问的很久 ,Client会查找其备份的block进行访问。

其核心是有另另十个 map函数,有另另十个 reduce函数。

RAID1

数据在写入磁盘时,将一份数据一起写入两块磁盘,那我任何一块磁盘损坏完整性都是会导致 数据丢失,插入一块新磁盘就都需要通过复制数据的最好的土办法自动修复,具有极高的可靠性。

HDFS写文件操作

MapReduce框架缺省的Partitioner用key的哈希值对reduce任务数量取模,相同的key完整性都是落在相同的reduce任务id上,实现上,那我的Partitioner代码只需要一行,如下所示:



RAID5和RAID3很这类,很久 校验数据完整性都是写入第N块磁盘,可是螺旋式地写入所有磁盘中。那我校验数据的修改也被平均到所有磁盘上,处置RAID3频繁写坏一块磁盘的情况报告。

三、MapReduce

很久 MapReduce一起又是非常强大的,不管是关系代数运算(SQL计算),还是矩阵运算(图计算),大数据领域几乎所有的计算需求都都需要通过MapReduce编程来实现。



SELECT * FROM status_updates WHERE status LIKE ‘michael jackson’;



MapReduce shuffle过程

二、HDFS架构思想

和RAID在多个磁盘上进行文件存储及并行读写一样思路,HDFS在有另另十个 大规模分布式服务器集群上,对数据进行并行读写及冗余存储。不可能 HDFS都需要部署在有另另十个 比较大的服务器集群上,集群中所有服务器的磁盘都都需要供HDFS使用,什么都整个HDFS的存储空间都需要达到PB级容量。HDFS架构如图:

RAID5

事实上,几乎所有的大数据计算场景都需要处置数据关联的间题,简单如WordCount假如有一天对key进行合并就都需要了,复杂化如数据库的join操作,需要对一种类型(不可能 更多类型)的数据根据key进行连接。

不可能 数据需要很高的可靠性,在出現一起损坏两块磁盘的情况报告下(不可能 运维管理水平比较落后,坏了一块磁盘很久 迟迟越来越更换,导致 又坏了一块磁盘),仍然需要修复数据,这很久 都需要使用RAID6。

HDFS中关键组件有有另另十个 ,有另另十个 是NameNode,有另另十个 是DataNode。

其对应的Hive执行计划如下图:

同样,你你是什么SQL命令也都需要转化为MapReduce计算,如下图:

既然MapReduce计算模型都需要处置绝大多数的数据分析与数据挖掘任务,越来越对于如下朋友常见的两根SQL分析句子,MapReduce怎么编程实现?



前面提到MapReduce编程模型将大数据计算过程切分为map和reduce有另另十个 阶段,在map阶段为每个数据块分配有另另十个 map计算任务,很久 将所有map输出的key进行合并,相同的key及其对应的value发送给同有另另十个 reduce任务去处置。

在实践中,工程师无须需要经常编写MapReduce线程,不可能 网站最主要的大数据处置可是SQL分析,在Facebook,据说90%以上的MapReduce任务完整性都是Hive产生的。Hive在大数据应用中的作用非常重要。

在WordCount例子中,要统计相同单词在所有输入数据中出現的次数,而有另另十个 map必须处置一每项数据,有另另十个 热门单词几乎会出現在所有的map中,有有哪些单词需要要合并到一起进行统计并能得到正确的结果。

首先,看下map函数的输入key和value,key不重要,忽略掉,value可是左边表中每一行的数据,<1, 25>那我。map函数的输出可是以输入的value作为key,value统一设为1,<<1, 25>, 1>那我。

block多份复制存储如下图所示:

有另另十个 map函数都需要针对一每项数据进行运算,那我就都需要将有另另十个 大数据切分成什么都块(这也正是HDFS所做的),MapReduce计算框架为每个块分配有另另十个 map函数去计算,从而实现大数据的分布式计算。

通过以上过程,MapReduce都需要将大数据作业计算任务分布在整个Hadoop集群中运行,每个map计算任务要处置的数据通常都能从本地磁盘上读取到,而用户要做的仅仅是编写有另另十个 map函数和有另另十个 reduce函数就都需要了,根本不让关心这有另另十个 函数是怎么被分布启动到集群上的,数据块又是怎么分配给计算任务的。你你是什么切都由MapReduce计算框架完成。

你你是什么过程有有另另十个 关键间题需要处置:

Hive执行计划示例

对于文件/users/sameerp/data/part-0,其复制备份数设置为2,存储的block ID为1,3,block1的有另另十个 备份存储在DataNode0和DataNode2有另另十个 服务器上,block3的有另另十个 备份存储DataNode4和DataNode6有另另十个 服务器上,上述任何一台服务器宕机后,每个block都相当于还有有另另十个 备份处在,不让影响对文件/users/sameerp/data/part-0的访问。

Hadoop分布式文件系统都需要像一般的文件系统那样进行访问:使用命令行不可能 编程语言API进行文件读写操作。朋友以HDFS写文件为例看HDFS处置过程,如下图:

在相同磁盘数目(N)的情况报告下,各种RAID技术的比较如下表所示:

MapReduce计算过程中两处MapReduce框架处置

这里的reduce的输入参数values可是由什么都个1组成的集合,而key可是具体的单词word。

Hive并能直接处置用户输入的SQL句子(Hive的SQL语法和数据库标准SQL略有不同),调用MapReduce计算框架完成数据分析操作。具体架构如下图:

HDFS的block复制备份策略

每个map任务的计算结果完整性都是写入到本地文件系统,等map任务快要计算完成的很久 ,MapReduce计算框架会启动shuffle过程,在map端调用有另另十个 Partitioner接口,对map产生的每个进行reduce分区选用,很久 通过http通信发送给对应的reduce线程。那我不管map处在哪个服务器节点,相同的key完整性都是被发送给相同的reduce线程。reduce端对收到的进行排序和合并,相同的key装到一起,组成有另另十个 传递给reduce执行。

group by的MapReduce计算过程示例

在大数据技术出現很久 ,朋友就需要面对有有哪些关于存储的间题,对应的处置方案可是RAID技术。

几种RAID技术比较

左边是要分析的数据表,右边是分析结果。实际上把左边表相同的行累计求和,就得到右边的表了,看起来跟WordCount的计算很一样。真是也是那我,朋友看下这条SQL句子的MapReduce的计算过程,map和reduce函数的输入输出以及函数处置过程分别是有哪些样。

join的MapReduce计算过程和前面的group by稍有不同,不可能 join涉及两张表,来自有另另十个 文件(夹),什么都需要在map输出的很久 进行标记,比如来自第一张表的输出value就记录为<1, X>,这里的1表示数据来自第一张表。那我经过shuffle很久 ,相同的key被输入到同有另另十个 reduce函数,就都需要根据表的标记对value数据求笛卡尔积,输出就join的结果。

如下图所示:

shuffle是大数据计算过程中处在奇迹的地方,不管是MapReduce还是Spark,只可是大数据批处置计算,完整性都是有shuffle过程,让数据关联起来,数据的内在关系和价值才会呈现出来。不理解shuffle,就会在map和reduce编程中产生困惑,我可是知道该怎么正确设计map的输出和reduce的输入。shuffle也是整个MapReduce过程中最难最消耗性能的地方,在MapReduce早期代码中,一半代码完整性都是关于shuffle处置的。

相比RAID3,更多被使用的方案是RAID5。

用户通过Hive的Client(Hive的命令行工具,JDBC等)向Hive提交SQL命令。不可能 是创建数据表的DDL句子,Hive就会通过执行引擎Driver将数据表的信息记录在Metastore组件中,你你是什么组件通常用有另另十个 关系数据库实现,记录表名、字段名、字段类型、关联HDFS文件路径等有有哪些数据库的meta信息(元信息)。



RAID6和RAID5这类,很久 数据只写入N-2块磁盘,并螺旋式地在两块磁盘中写入校验信息(使用不同算法生成)。

MapReduce作业启动和运行机制

group by输入输出示例

小数据量的词频统计

在数据写入磁盘的很久 ,将数据分成N-1份,并发写入N-1块磁盘,并在第N块磁盘记录校验数据,任何一块磁盘损坏(包括校验数据磁盘),都都需要利用其它N-1块磁盘的数据修复。

除了上方有有哪些简单的聚合(group by)、过滤(where)操作,Hive还能执行连接(join on)操作。上方例子中,pv_users表的数据在实际中是无法直接得到的,不可能 pageid数据来自用户访问日志,每个用户进行一次页面浏览,就会生成两根访问记录,保处在page_view表中。而年龄age信息则记录在用户表user中。如下图:

reduce函数的计算过程可是,将你你是什么集合里的1求和,再将单词(word)和你你是什么和(sum)组成有另另十个 ()输出。每有另另十个 输出可是有另另十个 单词和它的词频统计总和。

朋友以Hadoop1为例,MapReduce运行过程涉及以下几类关键线程:

常用RAID技术有以下几种,如图所示:

应用线程Client调用HDFS API,请求创建文件,HDFS API中含在Client线程中;

HDFS API将请求参数发送给NameNode服务器,NameNode在meta信息中创建文件路径,并查找DataNode中空闲的block,很久 将空闲block的id、对应的DataNode服务器信息返回给Client。不可能 数据块需要多个备份,什么都即使Client只需要有另另十个 block的数据量,NameNode也会返回多个NameNode信息;

Client调用HDFS API,请求将数据流写出;

HDFS API连接第有另另十个 DataNode服务器,将Client数据流发送给DataNode,该DataNode一边将数据写入本地磁盘,一边发送给第十个 DataNode,同理第十个 DataNode记录数据并发送给第有另另十个 DataNode;

Client通知NameNode文件写入完成,NameNode将文件标记为正常,都需要进行读操作了。

map函数的输出经过shuffle很久 ,相同的key及其对应的value被装到一起组成有另另十个 ,作为输入交给reduce函数处置。如<<2, 25>, 1>被map函数输出两次,越来越到了reduce这里,就变成输入<<2, 25>, <1, 1>>,key是<2, 25>, value集合是<1, 1>。在reduce函数內部,value集合里所有的数字被相加,很久 输出。reduce的输出可是<<2, 25>, 2>。

2、MapReduce计算框架架构原理

MapReduce计算框架处置数据合并与连接的操作就在map输出与reduce输入之间,你你是什么过程有个专门的词汇来描述,叫做shuffle。

RAID10

结合RAID0和RAID1一种方案,将所有磁盘平均分成两份,数据一起在两份磁盘写入,相当于RAID1,很久 在每一份磁盘上方的N/2块磁盘上,利用RAID0技术并发读写,既提高可靠性又改善性能,不过RAID10的磁盘利用率较低,有一半的磁盘用来写备份数据。

朋友以WordCount线程为例。WordCount主要处置文本处置中的词频统计间题,可是统计文本中每有另另十个 单词出現的次数。不可能 可是统计一篇文章的词频,几十K到几M的数据,越来越写有另另十个 线程,将数据读入内存,建有另另十个 Hash表记录每个词出現的次数就都需要了,如下图:

join的MapReduce计算过程示例

HDFS真是提供了API,很久 在实践中,朋友很少自己编程直接去读取HDFS中的数据,导致 正如开篇提到,在大数据场景下,移动计算比移动数据更划算。

参考链接:https://zhuanlan.zhihu.com/p/344340007

这两张表完整性都是有另另十个 相同的字段userid,根据你你是什么字段都需要将两张表连接起来,生成前面的pv_users表,SQL命令如下:

假设服务器有N块磁盘:

假设有有另另十个 block的文本数据需要进行词频统计,MapReduce计算过程如下图:

1、MapReduce编程模型

这有另另十个 关键间题正好对应前面文章中“MapReduce计算过程”一图中两处“MapReduce框架处置”:

具体作业启动和计算过程如下: