SparkRDD内核
Spark内核
RDD是基础,是spark中一个基础的抽象,是不可变的,比如我们加载进的数据RDD,如果想更改其中的内容是不允许的;分区的集合,可以并行来计算;RDD类中包含了很多基础的操作,例如map filter persist,RDD的数据是加载到内存中,使用persist可将内存中的数据持久化到磁盘中,也可以持久化到内存中。对RDD的一些算子操作放在PairRDDFunctions类中,比如groupByKey、join等
任何操作会通过隐式转换自动匹配任何类型的RDD
Resilient Distributed Dataset 弹性分布式数据集
每个RDD有五个主要的特性。RDD可以有副本,通过persist的方式持久化出副本。初始加载是没有副本的,初始加载到内存中只有一个。
五大特性(前3个特性每个RDD都有)
A list of partitions
每个RDD是由一组partition组成的
每个partition是在一个节点中连续的数据
在HDFS中存储的文件分为多个block块,每个block块对应一个partition
数据会遵循数据本地性,当spark使用HDFS中的数据文件时,文件的block在哪个节点,就会将该block加载到自身节点内存中,形成partition,供spark使用。
A function for computing each split
从数据的角度看一个partition对应一个split
并行计算如果对RDD进行map操作,会把map操作应用到每个partition上去
A list of dependencies on other RDDs
RDD会记着由谁产生,为了做容错,因为RDD是瞬时的转化,如果上个RDD存在,那么用上个RDD的数据接着计算,如果上个RDD不存在,那么再往前找
PairRDD依赖FilterRDD依赖HadoopRDD
RDD的生成在内存中,内存中的数据不稳定,如果宕机,数据就没了,spark会重算,spark是并行计算,partition:HadoopRDD-> FilterRDD ->PairRDD,如果计算过程中某条线出现了错误,那spark只会重新计算这条线,不会影响其他partition。
Optionally, a Partitioner for key-value RDDS
可对RDD重新进行分区,提高并行度,提高计算速度,分区多了,partition中的数据就少了,计算也就快了,有相应的算子。默认分区方式是对key取哈希取模,hash-partitioned,根据下游partition的数量,partition的数量是几就模几。
键值对的RDD可以自定义分区,所有RDD都可以进行分区
Optionally, a list of preferred locations to compute each split on
数据本地性
如果读HDFS中的block,一个block有三个副本,就有一个最优位置,但是如果读的是本地文件,就会随便放在某台spark节点,那么此选项就没用了

sc.textFile()将HDFS的数据封装到RDD,遵循数据本地性,HDFS中数据文件的block在哪台机器,就会加载到哪台机器的内存中。
partition是具体的概念,指在某个节点中连续的数据
RDD是抽象的概念
spark运行时

Driver:驱动程序,任务调度,发配当前的job任务,将任务切分为多个task,把task发到每个物理节点,task将每个物理节点的数据加载到对应机器的内存中,在内存中一条线的进行计算,将计算结果返回给驱动程序。不同的job,driver在不同机器上,这样才能做到分布式(mapreduce中的job)
流程示意
分布式文件系统(File system)--加载数据集
都是封装为RDD
transformations延迟执行—针对RDD的操作
所有操作都是针对RDD,每步转化成为算子操作
Action触发执行
碰到action就会将之前的代码封装为job,提交到集群中执行
代码示例

filter是transformation算子,延迟算子
count是action算子,立即执行。
碰到filter延迟算子,不先计算,碰到action算子会把前边的代码封装为job,提交到集群中进行运算。
errors.persist(); errors.cache();等价。
持久化在内存。如果RDD需要复用,需要持久化,以供后边代码使用。如果不持久化,那么计算http_errors时会重新计算之前的代码生成errors。
RDD是瞬时存在的状态,产生新的RDD,旧的RDD就没了。
SparkRDD内核的更多相关文章
- Linux 内核概述 - Linux Kernel
Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...
- [PHP内核探索]PHP中的哈希表
在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据 ...
- QT5利用chromium内核与HTML页面交互
在QT5.4之前,做QT开发浏览器只能选择QWebkit,但是有过使用的都会发现,这个webkit不是出奇的慢,简直是慢的令人发指,Release模式下还行,debug下你就无语了,但是webkit毕 ...
- 模仿Linux内核kfifo实现的循环缓存
想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...
- [内核笔记1]内核文件结构与缓存——inode和对应描述
由来:公司内部外网记录日志的方式现在都是通过Nginx模块收到数据发送到系统消息队列,然后由另外一个进程来从消息队列读取然后写回磁盘这样的操作,尽量的减少Nginx的阻塞. 但是由于System/V消 ...
- ucos实时操作系统学习笔记——内核结构和任务创建
对于ucos实时操作系统,邵贝贝的那本书已经写得很详细了,我因为之前不深的研究过ucos,所以在这里做一个笔记,写一些个人对该操作系统的理解,仅仅是个人理解,如果有人看到这边随笔有不对的地方,望给我指 ...
- linux内核调试技术之修改内核定时器来定位系统僵死问题
1.简介 在内核调试中,会经常出现内核僵死的问题,也就是发生死循环,内核不能产生调度.导致内核失去响应.这种情况下我们可以采用修改系统内核中的系统时钟的中断来定位发生僵死的进程和函数名称.因为内核系统 ...
- linux内核调试技术之自构proc
1.简介 在上一篇中,在内核中使用printk可以讲调试信息保存在log_buf缓冲区中,可以使用命令 #cat /proc/kmsg 将缓冲区的数区的数数据打印出来,今天我们就来研究一下,自己写k ...
- linux内核调试技术之printk
原创博客:欢迎转载,转载请注明出处https://i.cnblogs.com/EditPosts.aspx?postid=6218383 1.简介(基于s3c2440 linux) 在内核调试技术之中 ...
随机推荐
- windows和linux下目录分隔符兼容问题(换行回车兼容)
windows和linux下目录分隔符兼容 DIRECTORY_SEPARATOR 换行回车兼容 PHP_EOF
- Data Guard配置
>> from zhuhaiqing.info 确认主库处于归档模式下 SQL>archive log list; Database log mode Archive Mode Au ...
- poj 2553 The Bottom of a Graph(强连通、缩点、出入度)
题意:给出一个有向图G,寻找所有的sink点.“sink”的定义为:{v∈V|∀w∈V:(v→w)⇒(w→v)},对于一个点v,所有能到达的所有节点w,都能够回到v,这样的点v称为sink. 分析:由 ...
- Junit 内部解密之二: TestResult + TestListener + Assert
转自:http://blog.sina.com.cn/s/blog_6cf812be0100wbhw.html 之前我们看到了Test接口里面的run方法有个TestResult的参数,不错,这个类就 ...
- 使用strace,lstrace,truss来跟踪程序的运行过程
使用truss.strace或ltrace诊断软件问题 2008-07-05 16:25 使用truss.strace或ltrace诊断软件问题 进程无法启动,软件运行速度突然变慢, ...
- 批处理--md5校检
@echo off rem 获取文件xx.zip的MD5 for /f "delims=" %%i in ('md5.exe xx.zip') do (set md5_var=%% ...
- 基于Linux整形时间的常用计算思路
上一次分享了Linux时间时区详解与常用时间函数,相信大家对Linux常见时间函数的使用也有了一定的了解,在工作中遇到类似获取时间等需求的时候也一定能很好的处理.本文基于Linux整形时间给出一些简化 ...
- iOS 企业版 安装失败 原因
首先要吐槽下国内的论坛水分略多,以下问题大多是查询stackoverflow等论坛解决的.推荐一款软件,Log Guru,用来查看app安装时的系统日志,很多问题要看日志才知道错误点. 1.首先有几 ...
- PHP-Manual的学习----【语言参考】----【类型】-----【对象】
Object 对象1.对象初始化要创建一个新的对象 object ,使用 new 语句实例化一个类: class foo{ function do_foo(){ echo &quo ...
- Apache禁止ip访问
网站突然让禁止ip访问,于是就通过配置Apache达到了想要的效果. 我们网站用的是Apache+tomcat集群,所以需要配置虚拟主机,虚拟主机我在这里就不说了,不明白的上网搜搜吧,这里只说禁止ip ...