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

article/2025/10/20 7:59:55

一.定义及描述

分布式计算(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架构

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


http://chatgpt.dhexx.cn/article/bh2KJ9De.shtml

相关文章

C#之简易计算器的制作

在一些问题中有时会用到计算器,今天我们可以用C#做一个简易的计算器 用到的开发工具为Visual Studio 2019(我用的是2019,其他版本的也可以) 1.首先新建一个项目文件. 2.在Form1.cs文件(Winform框架基础文件)中添加所用到的控件. 3.添加TextBox和ComboBox以及Button控件 4.对But…

JS原生——编写简易计算器

一个非常适合新手练习的小案例!!! 使用JS的ES5语法HTMLCSS及企业级代码规范,方便后续良好的代码习惯养成!!! 先来看一下样式吧!!!(后附代码&…

Java 实现简易计算器

前言: 出此文章是因为楼主之前在面试中遇到一个笔试题,当时一时半会没想出来,所以后续研究出来了,发出来希望对大家能有所帮助~ 题目:设计一个计算器,可以接收用户输入两个数字与 - * / 的符号&#xff0c…

Matlab设计简易计算器

效果如如下: 整个工程还是挺简单的,之前一直都是用matlab做信号处理,由于要做课程设计,就学了一下matlab的GUI。下面总结几个关键的地方。 (1)控件拉到自己喜欢的位置,并将控件的Text和Tag改好…

简易计算器(有界面)

(没有括号和优先级,简易计算器)界面: package javaprogram;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import j…

Andriod设计简易计算器

1.设计任务及要求 (1)设计一款基于Android系统下的计算器,实现加减乘除算法,以及清零、撤销操作。界面设计应该就尽量简洁而美观,具有良好的交互性,程序应具有较好的稳健性; &a…

java实现简易计算器

Java简易计算器 用java语言写的一个简易计算器,实现了最基本的、-、*、/ 运算。 先来看下效果: 界面简述: 整个面板的由一个JTextFiled组件16个JButton组件构成,外加一个JPanel组件存放16个按钮,其布局为4x4的网格…

做一个简易计算器(VB版)

今天小编来带大家用VB做一个简易计算器 废话不多说,下面就是具体步骤了 1、创建控件组的方法首先创建一个命令按钮,调整其大小(觉得合适就行),名称为Command1,Caption 属性为数字 0 ;然后进行…

简易计算器的设计_C#课程设计

以下内容可且仅可供参考,如有错误欢迎指正。 部分内容借鉴自百度 侵删致歉 位切换键盘的实现用了复杂的拖64给label的方法,此功能可以在自己计算机上的计算器里找到。 目录 一、设计简介 1.设计背景 2.开发工具及环境 二、需求分析 1.设计功能要求 …

Python制作简易计算器(GUI)---Tkinter

Python制作简易计算器(GUI)---Tkinter Tkinter简介Tkinter 与 PyQt5 的比较TkinterPyQt5 项目展示导入模块函数封装1. 运算公式的拼接与展示2. 将显示框的内容删除3. 使用eval()函数对表达式求值 主逻辑1. 布局窗口2. 布局表达式展示区域3. 布局按钮 代码…

自制个性计算器

一、布局文件xml的制作。 如图:是布局之后的一个效果图 完全可以自定义自己喜欢的各种类型的图片。 代码如下: 正所谓每一个鲜艳靓丽app背后都有成堆的代码支撑这句话是没有错的。由于没有长截屏软件只能用短截屏了,大家谅解一下&#…

C++简易计算器的实现

定义: 计算器是近代人发明的可以进行数字运算的机器。 也就是说,计算器不等同于算盘,前者能自行运算,后者只能简便计算过程,在古代,人们发明了许多计算工具,如算筹、算盘、计算尺等,随着社会的发展和科技的进步,计算…

制作简易计算器

简易计算器 效果展示图项目要求内容分析涉及函数 效果展示图 项目要求 制作简易计算器,使其能实现简单的加,减,乘,除运算。 1.在两个文本框中分别输入两个数字 2.输入完成后,再次点击加,减,乘&…

C# 制作简易计算器

前言:环境是vs 2022 1、打开vs2022后,右边导航栏选择创建新项目。 2、选择Windows窗体应用(.net Framework) 3、进入配置新项目界面(项目名称和位置可自行修改)点击创建 4、窗体From1即为我们要要编辑的位…

至简设计系列_简易计算器

–作者:小黑同学 本文为明德扬原创及录用文章,转载请注明出处! 1.1 总体设计 1.1.1 概述 计算器是近代人发明的可以进行数字运算的机器。现代的电子计算器能进行数学运算的手持电子机器,拥有集成电路芯片,但结构比电…

如何制作一个简易的计算器

今天,我们来学习如何完成一个简易计算器的功能吧! 一.布局 我们可以在HTML中使用CSS完成计算器的布局。接下来,我们便先来看看我们所要实现的效吧! 上图的计算器中,我们可以通过以下几个步骤完成对计算器的简单布局…

简易版计算器

这次我们来写一个简单的计算器案例 代码部分 HTML部分 首先设置一个基本样式,把我们需要的“计算”按钮,“-*/”四个计算符合,三个文本框准备好(两个用来输入数字进行计算,一个用来接收计算出来的结果),再为三个文…

java拦截器怎么实现

Java拦截器是一种对象拦截器,它可以拦截任何的类、方法和字段。拦截器还可以用于检查类是否已经加载以及对字段的访问权限是否符合规范。下面就让我们来了解一下 java拦截器怎么实现吧。 在 Java中,可以通过重写方法和代码块来实现拦截功能,但…

Java中的过滤器和拦截器

Java中的过滤器和拦截器 一.应用场景 拦截器应用场景 拦截器本质上是面向切面编程(AOP),符合横切关注点的功能都可以放在拦截器中来实现,主要的应用场景包括: 登录验证,判断用户是否登录。权限验证&…

拦截器(HandlerInterceptor)

目录 1 什么是拦截器 2 HandlerInterceptor和WebMvcConfigurer 2.1 HandlerInterceptor 2.2 WebMvcConfigurer 3 拦截器实现流程 1 什么是拦截器 拦截器是相对于Spring中来说的,它和过滤器不一样,过滤器的范围更广一些是相对于Tomcat容器来说的。拦…