分布式计算框架

分布式计算框架

大数据 = 编程技巧 + 数据结构和算法 + 分析能力 + 数据库技能 + 数学 + 机器学习 + NLP + OS + 密码学 + 并行编程

Hadoop批处理框架

根据MapReduce,于是我们有了Hadoop;根据GFS,于是我们有了HDFS;根据BigTable,于是我们有了HBase。而在这三篇论文里都提及Google的一个lock service—Chubby,哦,于是我们有了Zookeeper。

在这里插入图片描述

数据处理流程
HDFS <0,hello you> <10,hello me>
Map <hello,1> <you,1> <hello,1> <me,1>
Shuffle <hello,{1,1}> <you,{1}> <me,{1}>
Reduce <hello,2> <you,1> <me,1>
HDFS <hello,2> <you,1> <me,1>

四大组件

HDFS分布式文件系统

HDFS是一个分布式文件系统 ,支持大规模数据存储。

主从架构(Master/Slava)

节点名用途负责
主节点NameNode作为整个集群中的主服务器,存储文件文件被分成block存储在磁盘上为保证数据安全,文件会有多个副本接收用户操作请求
维护文件系统的目录结构
管理文件与block之间关系,block与datanode之间关系
从节点DataNode作为数据的存储者与维护者,同时与NameNode保持心跳联系。接收用户操作请求维护文件系统的目录结构管理文件与block之间关系,block与datanode之间关系。存储文件
文件被分成block存储在磁盘上
为保证数据安全,文件会有多个副本

在这里插入图片描述

MapReduce批处理计算

分布式程序运算框架。任务的分解与结果的汇总
优点:大规模批处理计算。
缺点:中间结果写入磁盘,不适合迭代运算。

MapReduce并行框架(离线处理)
两个处理阶段:
Map阶段:键值对数据–>相同键的键值集合
Reduce阶段:相同键的键值集合–>相同键的键值对数据

在这里插入图片描述

在这里插入图片描述

组成:

JobTracker:主节点

TaskTracker:从节点

YARN资源调度系统

Common底层支撑组件

主要提供基础工具包和 RPC 框架等

HBase

https://www.cnblogs.com/JamesXiao/p/6202372.html

https://www.cnblogs.com/nexiyi/p/hbase_shell.html

https://www.cnblogs.com/steven-note/p/7209398.html

1)特点

分布式面向列的数据库 
横向扩展性好
随机读写
容错能力
伸缩性好
稀疏性

2)组成

在这里插入图片描述


HMaster服务器群:负责Region的分配及数据库的创建和删除等操作。 

HRegioServer服务器群:负责数据的读写服务 。

ZooKeeper:作为HDFS的一部分 ,负责维护服务器集群的状态(某台服务器是否在线,服务器之间数据的同步操作及master的选举等)。  

在这里插入图片描述

Client访问HBase上的数据并不需要HMaster参与,寻址访问ZooKeeper和HRegionServer,数据读写访问HRegionServer,

  HMaster仅仅维护Table和Region的元数据信息,Table的元数据信息保存在ZooKeeper上,负载很低。HRegionServer存取一个子表时,会创建一个HRegion对象,然后对表的每个列簇创建一个Store对象,每个Store都会有一个MemStore和0或多个StoreFile与之对应,每个StoreFile都会对应一个HFile,HFile就是实际的存储文件。因此,一个HRegion有多少列簇就有多少个Store。

在这里插入图片描述

Table在行的方向上分割为多个HRegion,每个HRegion分散在不同的RegionServer中 ,但同一个HRegion是不会拆分到多个HRegionServer上的。HRegion按大小分割,每个表一般只有一个HRegion,随着数据不断插入表,HRegion不断增大,当HRegion的某个列簇达到一个阀值(默认256M)时就会分成两个新的HRegion。这个过程由HRegionServer管理,而HRegion的分配由HMaster管理。	

在这里插入图片描述

    每个HRegion由多个Store构成,每个Store由一个MemStore和0或多个的StoreFile组成,每个Store保存一个列簇

 MemStore 是放在内存里的,保存修改的数据即keyValues。当MemStore的大小达到一个阀值(默认64MB)时,MemStore会被Flush到文件,即生成一个快照。

	MemStore内存中的数据写到文件后就是StoreFile ,StoreFile底层是以HFile的格式保存。

3)模型

Region数据模型

在这里插入图片描述

定位数据:行键 ;

	    行键+时间戳 ;

	    行键+列族列 ;

Region物理存储模型

在这里插入图片描述

在这里插入图片描述

Pig

Hive

在这里插入图片描述

在这里插入图片描述

Spark迭代式计算框架

在这里插入图片描述

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。
内存计算引擎,提升计算速度,计算性能远优于Hadoop。

Spark主要功能

实时计算

批处理计算

即席查询

机器学习

图计算

Spark之所以在机器学习方面具有得天独厚的优势,有以下几点原因:

(1)机器学习算法一般都有很多个步骤迭代计算的过程,机器学习的计算需要在多次迭代后获得足够小的误差或者足够收敛才会停止,迭代时如果使用Hadoop的MapReduce计算框架,每次计算都要读/写磁盘以及任务的启动等工作,这回导致非常大的I/O和CPU消耗。而Spark基于内存的计算模型天生就擅长迭代计算,多个步骤计算直接在内存中完成,只有在必要时才会操作磁盘和网络,所以说Spark正是机器学习的理想的平台。

(2)从通信的角度讲,如果使用Hadoop的MapReduce计算框架,JobTracker和TaskTracker之间由于是通过heartbeat的方式来进行的通信和传递数据,会导致非常慢的执行速度,而Spark具有出色而高效的Akka和Netty通信系统,通信效率极高。

https://www.cnblogs.com/liuliliuli2017/p/6809094.html

Spark计算引擎

在这里插入图片描述

1)特点
内存计算引擎,对 Hadoop 的补充;拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
实时计算
批处理计算
即席查询
机器学习
图计算

  1. 运行速度快 => Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。
  2. 适用场景广泛 => 大数据分析统计,实时数据处理,图计算及机器学习
  3. 易用性 => 编写简单,支持80种以上的高级算子,支持多种语言,数据源丰富,可部署在多种集群中
  4. 容错性高。Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即充许基于数据衍生过程)对它们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错,而CheckPoint有两种方式:CheckPoint Data,和Logging The Updates,用户可以控制采用哪种方式来实现容错。

2)运行流程

spark基础运行架构如下所示:

spark结合yarn集群背后的运行流程如下所示:

Spark架构采用了分布式计算中的Master-Slave模型。Master是对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点。

  • Master作为整个集群的控制器,负责整个集群的正常运行;
  • Worker相当于计算节点,接收主节点命令与进行状态汇报;
  • Executor负责任务的执行;
  • Client作为用户的客户端负责提交应用;
  • Driver负责控制一个应用的执行。

Spark集群部署后,需要在主节点和从节点分别启动Master进程和Worker进程,对整个集群进行控制。在一个Spark应用的执行过程中,Driver和Worker是两个重要角色。Driver 程序是应用逻辑执行的起点,负责作业的调度,即Task任务的分发,而多个Worker用来管理计算节点和创建Executor并行处理任务。在执行阶段,Driver会将Task和Task所依赖的file和jar序列化后传递给对应的Worker机器,同时Executor对相应数据分区的任务进行处理。

  1. Excecutor /Task 每个程序自有,不同程序互相隔离,task多线程并行
  2. 集群对Spark透明,Spark只要能获取相关节点和进程
  3. Driver 与Executor保持通信,协作处理

三种集群模式:

1.Standalone 独立集群

2.Mesos, apache mesos

3.Yarn, hadoop yarn

基本概念:

  • Application =>Spark的应用程序,包含一个Driver program和若干Executor
  • SparkContext => Spark应用程序的入口,负责调度各个运算资源,协调各个Worker Node上的Executor
  • Driver Program => 运行Application的main()函数并且创建SparkContext
  • Executor => 是为Application运行在Worker node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上。每个Application都会申请各自的Executor来处理任务
  • Cluster Manager =>在集群上获取资源的外部服务 (例如:Standalone、Mesos、Yarn)
  • Worker Node => 集群中任何可以运行Application代码的节点,运行一个或多个Executor进程
  • Task => 运行在Executor上的工作单元
  • Job => SparkContext提交的具体Action操作,常和Action对应
  • Stage => 每个Job会被拆分很多组task,每组任务被称为Stage,也称TaskSet
  • RDD => 是Resilient distributed datasets的简称,中文为弹性分布式数据集;是Spark最核心的模块和类
  • DAGScheduler => 根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler
  • TaskScheduler => 将Taskset提交给Worker node集群运行并返回结果
  • Transformations => 是Spark API的一种类型,Transformation返回值还是一个RDD,所有的Transformation采用的都是懒策略,如果只是将Transformation提交是不会执行计算的
  • Action => 是Spark API的一种类型,Action返回值不是一个RDD,而是一个scala集合;计算只有在Action被提交的时候计算才被触发。

3)核心

一:RDD

在这里插入图片描述

二:Transformations / Actions

三:Jobs / Stage

四:Shuffle

五:Cache

4)用途

广告、报表、推荐系统 
  1. 复杂的批量处理(Batch Data Processing),偏重点在于处理海量数据的能力,至于处理速度可忍受,通常的时间可能是在数十分钟到数小时;
  2. 基于历史数据的交互式查询(Interactive Query),通常的时间在数十秒到数十分钟之间
  3. 基于实时数据流的数据处理(Streaming Data Processing),通常在数百毫秒到数秒之间

5)Spark算子
操作类型 函数名 作用
map() 参数是函数,函数应用于RDD每一个元素,返回值是新的RDD
flatMap() 应用于RDD每一个元素,将元素数据进行拆分,变成迭代器,返回值是新的RDD
filter() 参数是函数,函数会过滤掉不符合条件的元素,返回值是新的RDD
转化操作 distinct() 没有参数,将RDD里的元素进行去重操作
transformation union() 参数是RDD,生成包含两个RDD所有元素的新RDD
intersection() 参数是RDD,求出两个RDD的共同元素
subtract() 参数是RDD,将原RDD里和参数RDD里相同的元素去掉
cartesian() 参数是RDD,求两个RDD的笛卡儿积

				collect()		返回RDD所有元素
				count()			RDD里元素个数
				countByValue()	各元素在RDD中出现次数
行动操作		  reduce()		并行整合所有RDD数据,例如求和操作
action			fold(0)(func)	和reduce功能一样,不过fold带有初始值
				aggregate(0)	和reduce功能一样,但是返回的RDD数据类型和原RDD不一样
				foreach(func)	对RDD每个元素都是使用特定函数

Spark Streaming高吞吐量实时处理流式计算框架

1)特点
多数据源输入
高吞吐量
支持更多的算子
自定义处理周期
计算结果可直接写入HDFS
2)运行原理
数据源 架构 输出
kafka
HDFS/S3 HDFS
Flume Spark Streaming Database
Kinesis Dashboards
Twitter

spark程序是使用一个spark应用实例一次性对一批历史数据进行处理,spark streaming是将持续不断输入的数据流转换成多个batch分片,使用一批spark应用实例进行处理。下图为Spark Streaming运行原理。

在这里插入图片描述

Spark 算子

操作类型函数名作用
转化操作transformationmap()参数是函数,函数应用于RDD每一个元素,返回值是新的RDD
flatMap()参数是函数,函数应用于RDD每一个元素,将元素数据进行拆分,变成迭代器,返回值是新的RDD
filter()参数是函数,函数会过滤掉不符合条件的元素,返回值是新的RDD
distinct()没有参数,将RDD里的元素进行去重操作
union()参数是RDD,生成包含两个RDD所有元素的新RDD
intersection()参数是RDD,求出两个RDD的共同元素
subtract()参数是RDD,将原RDD里和参数RDD里相同的元素去掉
cartesian()参数是RDD,求两个RDD的笛卡儿积
行动操作actioncollect()返回RDD所有元素
count()RDD里元素个数
countByValue()各元素在RDD中出现次数
reduce()并行整合所有RDD数据,例如求和操作
fold(0)(func)和reduce功能一样,不过fold带有初始值
aggregate(0)和reduce功能一样,但是返回的RDD数据类型和原RDD不一样
foreach(func)对RDD每个元素都是使用特定函数

Spark MLlib机器学习

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Data types
Basic statistics (基本统计) 
summary statistics 概括统计
correlations 相关性
stratified sampling 分层取样
hypothesis testing 假设检验
random data generation 随机数生成
Classification and regression (分类一般针对离散型数据而言的,回归是针对连续型数据的。本质上是一样的) 
linear models (SVMs, logistic regression, linear regression)线性模型(支持向量机,逻辑回归,线性回归)
naive Bayes 贝叶斯算法
decision trees 决策树
ensembles of trees (Random Forests and Gradient-Boosted Trees) 
多种树(随机森林和梯度增强树)
Collaborative filtering 协同过滤 
alternating least squares (ALS) (交替最小二乘法(ALS) )
Clustering 聚类 
k-means k均值算法
Dimensionality reduction (降维) 
singular value decomposition (SVD) 奇异值分解
principal component analysis (PCA) 主成分分析
Feature extraction and transformation 特征提取和转化
Optimization (developer) 优化部分 
stochastic gradient descent 随机梯度下降
limited-memory BFGS (L-BFGS) 短时记忆的BFGS (拟牛顿法中的一种,解决非线性问题)

SparkSQL

1)语句组成(与关系型数据库sql语句类似)
Projection Data Source Filter
select a1,a2,a3 from table1 where condition

Storm实时处理流式计算框架

Hadoop:吞吐量大、自动容错。但是延迟大,响应缓慢,运维复杂,不擅长实时计算,因为它天然就是为批处理 而生的 。

Storm:实时计算,无数据丢失 。

一:两大组件

Nimbus:负责在集群里面发送代码,分配工作给机器,并且监控状态。全局只有一个。

Supervisor:监听分配给它那台机器的工作,根据需要启动/关闭工作进程Worker。每一个要运行Storm的机器上都要部署一个,并且,按照机器的配置设定上面分配的槽位数。

Zookeeper:Storm重点依赖的外部资源。Nimbus和Supervisor甚至实际运行的Worker都是把心跳保存在Zookeeper上的。Nimbus也是根据Zookeerper上的心跳和任务运行状况,进行调度和任务分配的。

二:原理

Storm提交运行的程序称为Topology。Topology处理的最小的消息单位是一个Tuple,也就是一个任意对象的数组。Topology由Spout和Bolt构成。Spout是发出Tuple的结点。Bolt可以随意订阅某个Spout或者Bolt发出的Tuple。Spout和Bolt都统称为component。下图是一个Topology设计的逻辑图的例子。

下图是Topology的提交流程图。

下图是Storm的数据交互图。可以看出两个模块Nimbus和Supervisor之间没有直接交互。状态都是保存在Zookeeper上。Worker之间通过ZeroMQ传送数据。

三:应用

实时分析,在线机器学习,持续计算、分布式远程调用等领域

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值