Spark RDD

原创 2017年11月15日 12:23:12

RDD是Spark的核心抽象,全称为ResilientDistributedDataSet,弹性分布式数据集
RDD在抽象上来说是一种元素集合的,包含了数据。它是被分区的,分为多个分区的,每个分区分布在集群中的不同节点上,分区即是Partition的,从而让RDD中的数据可以被并行操作的
RDD通常通过Hadoop上的文件,即是HDFS文件来进行创建的,有时也可以通过spark应用程序中的集合来创建的
RDD最重要的特性是提供了容错性的,可以自动从节点失败中恢复过来的额,即如果某个节点上的RDD Partition,因为节点故障,导致数据丢失了,那么RDD会自动通过自己的数据来源重新计算Paritition的,这一切对使用者来说是透明的
RDD的数据默认情况下是存放在内存中的,但是在内存资源不足的时候,Spark会自动将RDD数据写入磁盘中的额,弹性的特性的

创建RDD的三种方式:
在RDD中,通常就代表了和包含了Spark应用程序的输入源数据
当我们,在创建了初始化的RDD之后,才可以通过SparkCore提供的Transformation算子,对该RDD进行transformation转换操作的来获取其他的RDD的
SparkCore为我们提供了三种创建RDD的方式:
使用程序中的集合创建RDD,主要是用于进行测试的,可以在实际部署到集群运行之前,自己使用集合构造测试数据来测试后面的Spark应用的流程的
使用本地文件创建RDD,主要用于在本地临时性地处理一些存储大量数据的文件
使用HDFS文件创建RDD,应该是最常用的生产环境处理方式,主要可以针对HDFS上存储的大数据,进行离线批次处理操作的

并行化创建RDD
如果要通过并行化集合来创建RDD,需要针对程序中的集合,调用SparkContext中的Parallelize方法的,Spark会将集合中的数据拷贝到集群上去的,形成一个分布式的数据集合的,也就是一个RDD,集合中的部分数据到一个节点上的额,另一部分数据会到其他节点的,然后可以采用并行的方式来操作这个分布式数据集合的
val arr=Array(1,2,3,4,5)
val rdd=sc.parallelize(arr)
val sum=rdd.reduce(+)
Typically you want 2-4partitions for each CPU in your cluster,
在调用parallelize()方法时候,有一个重要的参数可以指定的,就是要将集合切分成多少个partition的,Spark会为每一个partition运行一个task来进行处理的,Spark的官方建议是为集群中的每个CPU创建2-4个partition,Spark默认会根据集群的情况来设置partition的数量的,但是也可以调用parallelize方法时候传入第二个参数的, 来设置RDD的partition数量的,

使用TextFile方法,通过本地文件或者HDFS创建RDD
Spark是支持使用任何Hadoop支持的存储系统上的文件创建RDD的,比如说是HDFS,Cassandra,HBase以及本地文件的,通过调用SparkContext的TextFile()方法,可以针对本地文件或 HDFS文件创建RDD,通过调用SparkContext的textFile方法,可以针对本地文件或者是HDFS上的文件创建RDD的,
val rdd=sc.textFile(“/home/hadoop/data.txt”)
val wordcount=rdd.map(line=>line.length).reduce(+)

如果是在Spark集群上针对Linux本地文件,那么需要将文件拷贝到所有的worker节点上的,就是spak-submit上使用–master指定了master节点的,使用standalone模式进行运行的,而TextFile方法内仍然使用的是Linux本地文件的,在这种情况下,是需要将文件拷贝到所有的worker节点上的,

Spark的textFile方法支持针对目录,压缩文件以及通配符进行创建RDD的,
Spark会默认为HDFS文件上的每一个block创建一个partition的,但是也可以通过textFile的第二参数来手动的设置分区数量的,只能比HDFS上的block数量多的额,不能比block数量少的额,

Spark RDD使用详解2--RDD创建方式

关键字:Spark RDD 创建、parallelize、makeRDD、textFile、hadoopFile、hadoopRDD、newAPIHadoopFile、newAPIHadoopRDD...
  • guohecang
  • guohecang
  • 2016年06月23日 16:47
  • 11720

自定义排序及RDD理解,spark

自定义排序1: object CustomSort1 {     def main(args: Array[String]): Unit = {     val conf = ...
  • xiaoqiang17
  • xiaoqiang17
  • 2017年08月24日 22:06
  • 459

spark rdd存储开销分析

背景很多使用spark的朋友很想知道rdd里的元素是怎么存储的,它们占用多少存储空间?本次我们将以实验的方式进行测试,展示rdd存储开销性能。 关于rdd的元素怎么存储,spark里面实现了好几种不...
  • tanglizhe1105
  • tanglizhe1105
  • 2016年04月03日 16:56
  • 1755

spark性能调优之重构RDD架构,RDD持久化

当第一次对RDD2执行算子,获取RDD3的时候,就会从RDD1开始计算,就是读取HDFS文件,然后对RDD1执行算子,获取到RDD2,然后再计算,得到RDD3 默认情况下,多次对一个RDD执行算子...
  • hutao_hadoop
  • hutao_hadoop
  • 2016年09月28日 21:27
  • 1451

Spark RDD使用详解1--RDD原理

在集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(Resilient Distributed Dataset,RDD)。它是一种有容错机制的特殊集合,可以分布在集群的节点上,以函数式编操...
  • guohecang
  • guohecang
  • 2016年06月22日 19:34
  • 14074

Spark的基本数据结构RDD介绍

RDD的全称:弹性分布式数据集合,它是spark的基本数据结构,spark中的所有数据都是通过RDD的形式进行组织。 RDD是不可变的数据集合,不可变的意思是RDD中的每个分区数据是只读的。 RDD数...
  • qq_31598113
  • qq_31598113
  • 2017年04月26日 21:26
  • 1328

Spark RDD 的那些个事事

内容来自京东金融微信公众号整理和解读 Google 发表三大论文  GFS  MapReduce BigTable  衍生出很多开源框架 ,毫无疑问 Hadoop 在 大家心中的地位是不可估...
  • haohaixingyun
  • haohaixingyun
  • 2017年03月28日 22:08
  • 254

Spark RDD基本操作

Spark RDD Scala语言编程RDD(Resilient Distributed Dataset)是一个不可变的分布式对象集合, 每个rdd被分为多个分区, 这些分区运行在集群的不同节点上。r...
  • wusuopuBUPT
  • wusuopuBUPT
  • 2016年11月13日 20:32
  • 3338

Spark RDD使用原则

如今随着数据量的不断增加,Hadoop已经难以满足处理需求,逐渐发展起来的Spark基于内存的并行计算已经得到了广泛的应用。 Spark博大精深,编写起来比Hadoop方便很多,简单的几行代码就可以实...
  • u013124704
  • u013124704
  • 2016年05月25日 21:54
  • 602

spark源码阅读笔记RDD(三)RDD的缓存原理

1、RDD的缓存(cache和persist) spark最重要一个能力就是:在不同的操作中把数据集缓存(cache)或存留(persist)在内存(memory) 中[1]。当持久化一个RDD后,每...
  • legotime
  • legotime
  • 2016年04月23日 17:52
  • 2479
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spark RDD
举报原因:
原因补充:

(最多只允许输入30个字)