一.定义及描述

分布式计算(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());}

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 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 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的计算架构着重研究。

【学习笔记1】分布式计算技术及框架相关推荐

  1. 爬虫学习笔记(十)—— Scrapy框架(五):下载中间件、用户/IP代理池、settings文件

    一.下载中间件 下载中间件是一个用来hooks进Scrapy的request/response处理过程的框架. 它是一个轻量级的底层系统,用来全局修改scrapy的request和response. ...

  2. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    Hadoop学习笔记-13.分布式集群中节点的动态添加与下架 开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如 ...

  3. Unity3D 学习笔记4 —— UGUI+uLua游戏框架

    Unity3D 学习笔记4 -- UGUI+uLua游戏框架 使用到的资料下载地址以及基础知识 框架讲解 拓展热更过程 在这里我们使用的是uLua/cstolua技术空间所以提供的UGUI+uLua的 ...

  4. Spring Boot 框架学习笔记(五)( SpringSecurity安全框架 )

    Spring Boot 框架学习笔记(五) SpringSecurity安全框架 概述 作用 开发示例: 1. 新建项目 2. 引入依赖 3. 编写`SecurityConfig`类,实现认证,授权, ...

  5. motan学习笔记 一 微博轻量级RPC框架Motan

    前言 motan学习笔记 一 微博轻量级RPC框架Motan motan学习笔记 二 motan架构分析 motan学习笔记 三 motan Demo 分析 motan学习笔记 四 motan Dem ...

  6. ⑤ESP8266 开发学习笔记_By_GYC 【ESP8266 IDF框架 使用C++编程】

    ⑤ESP8266 开发学习笔记_By_GYC [ESP8266 IDF框架 使用C++编程] 目录 ⑤ESP8266 开发学习笔记_By_GYC [ESP8266 IDF框架 使用C++编程] 一.简 ...

  7. nrf52832 学习笔记(二)SDK框架分析

    nrf52832 学习笔记(二)SDK框架分析 个人对SDK框架的一些理解,如有错误欢迎斧正. flash 分区 在不包含DFU的情况下,nrf52832 flash划分为: MBR 0x000000 ...

  8. 【图神经网络】图神经网络(GNN)学习笔记:GNN的通用框架

    图神经网络GNN学习笔记:GNN的通用框架 1. MPNN 2. NLNN 3. GN 参考资料 所谓通用框架,是对多种变体GNN网络结构的一般化总结,也是GNN编程的通用范式,这里介绍3类通用框架: ...

  9. tornado学习笔记day01-高并发性能web框架

    tornado的安装 这里我使用的是虚拟环境中的pip安装,配合清华大学镜像源安装的 pip install tornado -i https://pypi.tuna.tsinghua.edu.cn/ ...

最新文章

  1. 遇事不责怪别人,换位思考能成全更好的自己
  2. svn命令行 批量添加(add)所有新增文件
  3. 祝师傅新婚快乐 :-)
  4. 蓝队视角下的企业安全运营
  5. CopyOnWriteArrayList的addIfAbsent()方法
  6. 使用CSS3属性aspect-ratio做横屏检测优化用户体验,附demo完整代码
  7. C++多态面试题汇总
  8. “开源”vs“商业”,差别到底有多大?这篇测试一目了然
  9. 牛客网暑期ACM多校训练营(第十场)D Rikka with Prefix Sum (组合数学)
  10. 秉承初心,砥砺奋进!华为云助力锦江都城开启云服务时代
  11. C++:mutable关键字
  12. Nice,涨薪近40%
  13. ARP检测的技术手段和作用详述
  14. window下Oracle 11G安装文档
  15. 什么是jquery $ jQuery对象和DOM对象 和一些选择器
  16. 需求定律的3大挑战——《可以量化的经济学》
  17. Atitit 项目管理之沟通管理概论问题管理 艾提拉著 跨语言沟通 群组沟通 书面沟通 目录 1. 沟通方式 2 1.1. 书面沟通 vs 当面沟通 2 1.2. 群组沟通(公开沟通) vs
  18. ​机器如何“猜你喜欢”?深度学习模型在1688的应用实践...
  19. docker:虚拟化和docker容器概念
  20. win10支持8t 硬盘_最快最简单!Win10 正式版硬盘安装方法详解

热门文章

  1. Pivotal的数字转型经:授之于鱼不如授之于渔
  2. 企业外贸站数码科技外贸公司网站源码英文外贸企业站
  3. HDU(2212) DFS
  4. 3D视觉基础(基本原理及3D传感器基本参数)
  5. 编写一个脚本,输入自己的生日时间(YYYYMMDD),计算还有多少天多少个小时是自己的生日。
  6. Python入门自学进阶——11-协程
  7. 上传ftp工具,细数5款很好用的上传ftp工具
  8. java ssssss_javassssss
  9. 基于Java的酒店管理系统毕业论文
  10. 鸿蒙王者荣耀评测,王者荣耀评测_妹纸玩家上手必坑英雄盘点 李白韩信榜首有名|攻略...