【学习笔记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());
        }

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

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不断提升自己。 Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不断提升自己。 Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不断提升自己。Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不
Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不断提升自己。 Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不断提升自己。 Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不断提升自己。Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值