深入 rdd_定义_出现的背景 | 学习笔记

简介: 快速学习 深入 rdd_定义_出现的背景

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段深入 rdd_定义_出现的背景】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/689/detail/11961


深入 rdd_定义_出现的背景


内容介绍:

一、初步介绍过程

二、rdd 为什么会出现?

 

一、初步介绍过程

对于 rdd 的定义,需要做一些事情,首先要了解 rdd 为什么会出现?其次要了解 rdd 为了解决原来的问题,有什么样的特点?最终对它整个的概念做定义,下一个结论。

也即是:第一个步要去了解一下在 rdd 之前的计算框架存在的问题。Rdd 为什么会出现会出现?其次要对 rdd 它的特点做一个详细的说明。Rdd 特点这一章节特别的重要,因为许多概念等清楚了之后,后面的内容才更便于去理解。最终要去严格的定义什么叫做弹性,什么叫做分布式,什么叫做数据集,即什么叫做弹性分布式数据集?

 

二、rdd 为什么会出现?

1.MapReduce 的问题

要了解 rdd 为什么会出现,就应该先去了解在 rdd 之前应用较广泛的 MapReduce,显然 MapReduce 是不够好的,好那么原因是什么?

是因为 MapReduce 只能通过磁盘来进行中间数据的共享,如下图的整个过程,要通过 MapReduce 做一个比较复杂的一个数据处理,那可能一个 MapReduce 没有办法完成,可能需要两个,这时第一个 MapReduce 先去 hdfs 当中读取文件,即 read 操作,它经过 MapReduce 的计算,再经过 MapReduce 归约,最终生成了一个运算结果,这个运算结果不能直接得出,还要再放到hdfs当中,那么这个时候 job1还要再从 hdfs 当中去读数据,读出来以后。

image.png

再经过上述重复的操作再放入 hdfs 中,假如后面还有许多数据的话,那么每一次中间都需要经过 hdfs 来数据共享,过程很繁琐,这是 MapReduce 的问题。简单来说,在数据共享的过程中,在 hdfs 中分为俩个步骤,一是读,二是写。

在跟 hdfs 之间,用 iohdfs 内部也有 io,因此效率会变低。

2.  rdd 如何解决 MapReduce 存在的问题?

Rdd 的数据最终还是要存在 hdfs 上,那么 rdd 可以把这些数据从 hdfs 当中读出来,然后进入到整个 spark 的环节,这个环节当中就不再去把数据特定的写到这个硬存储介质,写到磁盘当中,假如说现在是一个 rdd1计算完以后,那rdd2

去计算,再计算完 rdd2以后给 rdd3计算,那么整个计算过程是最终先去计算 rdd3,而 rdd3等于 rdd2,即rdd3=rdd2.func10Rdd2又与 rdd1有关系,即 rdd2=rdd1.func10.这是大致的的过程。它就不需要再复杂的往磁盘里存数据,而是像管道一样在 rdd1rdd2rdd3之间进行交换。

即:rdd3=rdd1.func2.func1。在 rdd3rdd2之间没有存储数据的这个过程。

所以减少了大量的 io,所以 rdd 是比较适合做迭代型的计算和交互型的计算,它中间的没有什么,这个一定要去混的这样的一些理由,所以他会减少 io,那比较适合链条比较长的这种计算。

3.  代码

下面滴滴的论文当中去收集的收录的一段代码,这段代码实现的是一个机器学习当中常见的线性回归,这个线性回归的过程和内容不需要过多的去关注,只需要看下图部分中 for 循环,这个 for 循环执行了多少次?会发现大概有一万次,这1万次执行每一个都要通过 mapreduce,都进行计算。假如说有1万个 job 要在里面,要使用也就是去MapReduce,这样的话里面的会变得很多。所以这也是使用 MapReduce 的弊端。

//线性回归

val points = sc.textFile(...)

.map(...)

.persist(...)

valw= randomValue

for (i <-1 to 10000) [

valgradient=points.map p =>p.x *(1/(1+ exp(-p.y * (w dot p.x))) - 1) *p.y) reduce +

W-= gradient

在这个例子中,进行了大致10000次迭代,如果在 MapReduce 中实现,可能需要运行很多 Job,每个 Job 之间都要通过 HDFS 享结果,熟快熟慢一窥便知。

相关文章
|
存储 虚拟化 Docker
windows系统安装docker(Hyper-V方式)
windows系统安装docker(Hyper-V方式)
1796 2
|
4月前
|
SQL 前端开发 API
如何物业管理(园区式)系统的行政综合板块?(附架构图+流程图+代码参考)
本文详细解析了物业管理系统的架构设计与核心模块实现,重点讲解了行政综合模块的功能、流程、数据库设计及前后端开发示例,涵盖活动公告、运营周报、人事管理、资产入库、出库耗材及雨季数据等场景。同时介绍了共用技术点与运维注意事项,帮助团队高效构建稳定、可扩展的物业管理系统,提升物业运营效率与数据管理水平。
|
12月前
|
JSON API 开发者
京东店铺所有商品数据接口(JD.item_search_shop)丨京东API接口指南
JD.item_search_shop 是京东开放平台提供的接口,用于获取店铺所有商品数据。请求方法为 GET,主要参数包括 shopId(必填)、page、pageSize 和 sortType。开发者需先注册并获取 API 密钥,确定目标店铺 ID 后构建请求。响应为 JSON 格式,适用于电商应用、价格比较和市场分析等场景。
1080 0
|
Kubernetes 负载均衡 API
在K8S中,Kube-proxy有什么功能?
在K8S中,Kube-proxy有什么功能?
|
机器学习/深度学习 人工智能 搜索推荐
AI与未来医疗:重塑健康的双刃剑
【10月更文挑战第6天】 人工智能作为现代科技的巅峰之作,已经渗透进我们生活的方方面面。从语音助手到自动驾驶,AI不仅改变了我们的日常,更在各个专业领域,特别是医疗行业,扮演着愈发重要的角色。本文探讨了AI在未来医疗中的应用及其潜在影响,揭示了这把“双刃剑”的机遇与挑战。
428 1
|
存储 分布式计算 关系型数据库
从零到一建设数据中台 - 功能组织与实现技术
从零到一建设数据中台 - 功能组织与实现技术
972 0
|
SQL 存储 运维
阿里云分布式关系型数据库服务 DRDS
DRDS 是阿里巴巴集团自主研发的分布式数据库中间件产品,专注于解决单机关系型数据库扩展性问题,具备轻量(无状态)、灵活、稳定、高效等特性,稳定运行11年,经历历届双十一核心交易业务和各类行业业务的考验
14252 0
|
SQL NoSQL 前端开发
大厂如何解决订单幂等问题
本文探讨了分布式系统中接口幂等性的重要性和实现方法,特别是在防止重复下单的场景中。首先介绍了通过数据库事务处理创建订单时的原子性需求。接着分析了服务间调用时可能遇到的重复请求问题,提出每个请求需具备唯一标识,并记录处理状态以识别并阻止重复操作。具体实践包括生成全局唯一的订单ID,利用数据库主键唯一性约束来防止重复插入,以及使用Redis存储订单支付状态。此外,文章还讨论了解决ABA问题(即数据在两次检查之间被修改的问题)的方法,引入版本号机制来确保数据更新的原子性和一致性。这些技术方案不仅限于订单服务,也可广泛应用于需要实现幂等性的其他业务场景中。
|
JSON 人工智能 机器人
GPTs 应用开发:使用 GPT Builder 创建自己的 GPTs 应用(下)
GPTs 应用开发:使用 GPT Builder 创建自己的 GPTs 应用
490 1
|
存储 SQL 关系型数据库
MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)
MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)
1573 0