当前位置:   article > 正文

【学习笔记1】分布式计算技术及框架_分布式计算框架

分布式计算框架

一.定义及描述

分布式计算(Distributed Computing),又称分散式计算,指通过分布式系统进行计算的方式。分布式系统中的每一个运算单元存在于不同的计算机/处理器上,通过调度算法进行信息传递、协作以实现一件大而繁的目标

简单来说,就是一个任务被拆分成很多个小任务,由多个计算机解决后合并。

二.分布式计算框架

1. Mapreduce(map-reduce)
一个基于集群的高性能并行计算平台,提供了一个庞大但设计精良的并行计算软件框架,能够自动对运算任务进行并行化处理,自动划分计算数据和计算任务。
Map表示对一个列表(list)的每个元素做计算,reduce表示对一个列表的每个元素做迭代运算。
首先在Map处理杂乱无章的原始数据(此时每条数据之间没有关系);然后进入Reduce阶段,数据是以key后面跟着若干个value来组织的,这若干个value都在一个key下,因此具有关联性。

Tips: 刚读到这里的时候还不太理解value和key的具体含义,查阅资料后解释如下:
Key:偏移量,我们首先计算的 字符串长度 ,然后按照字符串来进行不断分割;
value:每一行的数据。真正对其进行分割的值。

举个栗子

1,2,3,4
a,b,c,d
1,a,2,b

运算流程:
①.一行便是一个map的输入值,一般情况下map为3,也就是有3个map值。
②.之后,对三行数据进行划分,这里用到了FileInputFormat(看起来很高大上的词语罢了)进行处理。
第一个map传递的value值便是1,2,3,4
③.之后,进一步划分数据,分割字符串后传递给reduce。
④.reduce进行处理,通俗来讲,这一步其实就是进行计数,看有多少个分区,就有多少个reduce

eg:分区1:2个1
分区2:2个2
分区3:1个b ……
因此:reduce工作:数这里面装几个数据
三行数据会调用map方法3次,
第一次key为0,value为“1,2,3,4”
第二次key为9(7个字符+2个换行符)
第三次key为18(7+2+7+2) value“1,a,2,b”

  for (IntWritable val : values) 
  {
            sum += val.get();
            System.out.println("val.get():" + val.get());
        }
  • 1
  • 2
  • 3
  • 4
  • 5

2. Spark(RDD模型)
基于MapReduce算法实现的分布式计算,是专为大规模数据处理而设计的快速通用的计算引擎,一般当需要处理的数据量超过的单机负载,或需要花费大量时间时,选择spark集群。
和MapReduce技术相比,Spark有如下优势
①. 有一个全面、统一的框架用于管理不同性质(文本数据、图表数据等)数据集和数据源的大数据处理需求
②. 官方吹牛中说将Hadoop集群中的应用在内存中的运行速度提升100倍,甚至能够将应用在磁盘上的运行速度提升10倍

先提出一个新的概念RDD——抽象弹性分布式数据集(Resiliennt Distributed Datasets,RDD),这使得 Spark 的各个组件可以无缝地进行集成,能够在同一个应用程序中完成大数据处理。
官方解释: 它是一种有容错机制的特殊数据集合,可以分布在集群的结点上,以函数式操作集合的方式进行各种并行操作。
人话: 分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可以分为多个数据集片段(分区),不同分区可以保存在集群的不同节点上,从而在集群中不同节点并行计算。
几个属性
只读: 不能修改,只能通过转换操作生成新的RDD。
分布式 :可以分布在多个计算机上并行计算。
弹性 :计算过程中内存不够时他会和磁盘进行数据交换。
基于内存 :可以全部或部分缓存在内存中,在多次计算间重用。
RDD是一种更为通用的迭代并行计算框架,用户可以显示控制计算的中间结果,并将其自由用于之后的计算,因为很多个应用场景中,不同计算阶段之间会重复使用中间结果,即一个阶段的输出结果会作为下一个阶段的输入,刚才所讲的Mapreduce最大的缺点就是它的非循环式的数据流模型,使得在迭代计算时要进行大量的磁盘I/O操作。而RDD不需要用户关注底层数据的分布式特性,只需要将具体的应用逻辑表达为一系列转换就可以实现管道化(我理解为一体化操作),避免了中间结果的拥堵,降低开销。

RDD基本操作: 转化操作行动操作
转化操作 :从一个RDD产生一个新的RDD
行动操作 :进行实际运算,只有当执行行动操作时才会触发计算任务提交,从而执行相应的计算操作。

  • 构建操作
    方式:
    从内存里直接读取数据
    从文件系统(HDFS分布式文件系统/本地文件系统)中读取数据

  • 转换操作
    返回到新的RDD进行操作,注意,这里不对RDD内的数据进行计算,并且许多转换操作都是针对各个元素,也就是转换操作只会操作RDD的一个元素

  • 行动操作
    执行计算并按指定的方式输出结果,行动操作接受RDD后,输出结果(数值)

    架构:
    spark架构

  • Spark SQL: 提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。

  • Spark Streaming: 对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据

  • MLlib: 一个常用机器学习算法库,算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。

  • GraphX: 控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作

运行流程:
Spark运行流程
①. 构建Spark Application的运行环境,启动SparkContext(用于连接Spark集群、创建RDD、累加器(accumlator)、广播变量(broadcast variables))

②. SparkContext向资源管理器(可以是Standalone,Mesos,Yarn)申请运行Executor资源(资源调度器),并启动StandaloneExecutorbackend(建立Executor线程池,开始执行Task,并向SparkContext报告,直至Task完成)

③. Executor向SparkContext申请Task

④. SparkContext将应用程序分发给Executor

⑤. SparkContext构建成DAG图( DAG叫做有向无环图,Spark中的RDD通过一系列的转换算子操作和行动算子操作形成了一个DAG,DAG是一种非常重要的图论数据结构),将DAG图分解成Stage、将Taskset发送给Task Scheduler(任务调度器),最后由Task Scheduler将Task发送给Executor运行

⑥. Task在Executor上运行,运行完释放所有资源

学习参考:http://c.biancheng.net/view/3644.html
https://www.cnblogs.com/cxxjohnson/p/8909578.html

写在最后:经过学习后个人感觉,Spark是MapReduce的升级版,还有很多内容没有在本文中提及,之后的学习笔记将会着重对Spark的计算架构着重研究。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/686609
推荐阅读
  

闽ICP备14008679号