Spark RDD弹性表现和来源

标签: spark rdd 弹性 | 发表时间:2016-02-09 20:12 | 作者:Kevin12
出处:http://www.iteye.com
hadoop 的MapReduce是基于数据集的,位置感知,容错 负载均衡
基于数据集的处理:从物理存储上加载数据,然后操作数据,然后写入物理存储设备;
基于数据集的操作不适应的场景:
1,不适合于大量的迭代
2,交互式查询
重点是:基于数据流的方式 不能够复用曾经的结果或者中间计算结果;

spark RDD是基于工作集的
工作流和工作集的共同特点:位置感知,自动容错,负载均衡等。
spark的位置感知比hadoop的好很多,具体如下:
hadoop位置感知:hadoop进行partition之后就不管Reducer在哪里了。
spark的位置感知:spark进行partition后再进行下一步Stage时会确定其位置,是更精致化的。
RDD:Resillient Distributed Dataset
RDD的弹性表现:
1、弹性之一:自动的进行内存和磁盘数据存储的切换;
2、弹性之二:基于Lineage的高效容错(第n个节点出错,会从第n-1个节点恢复,血统容错);
3、弹性之三:Task如果失败会自动进行特定次数的重试(默认4次);
4、弹性之四:Stage如果失败会自动进行特定次数的重试(可以只运行计算失败的阶段);只计算失败的数据分片;
5、checkpoint和persist
6、数据调度弹性:DAG TASK 和资源 管理无关
7、数据分片的高度弹性(人工自由设置分片函数),repartition


Spark RDD来源:
1,使用程序中的集合创建RDD(用于小量测试);
2,使用本地文件系统创建RDD(测试大量数据);
3,使用HDFS创建RDD(生产环境最常用的RDD创建方式);
4,基于DB创建RDD;
5,基于NoSQL,例如HBase;
6,基于S3创建RDD;
7,基于数据流创建RDD;


前三种是比较基本的,后面4种是基于数据库的,要注意数据本地性(getPreferedLocations);
1.集合创建RDD方式
package com.imf.spark.rdd

import org.apache.spark.{SparkConf, SparkContext}

/**
  * Created by lujinyong168 on 2016/2/2.
  * DT大数据梦工厂-IMF
  * 使用程序中的集合创建RDD(用于小量测试)
  */
object RDDCreateByCollections {
def main(args: Array[String]) {
val conf = new SparkConf()//创建SparkConf对象
conf.setAppName("RDDCreateByCollections")//设置应用名称
conf.setMaster("local")
val sc = new SparkContext(conf)//创建SparkContext对象
    //创建一个Scala集合
val numbers = 1 to 100
val rdd = sc.parallelize(numbers)
//    val rdd = sc.parallelize(numbers,10)//设置并行度为10
val sum = rdd.reduce(_+_)
println("1+2+3+...+99+100="+sum)
  }
}


2.local模式创建RDD
package com.imf.spark.rdd

import org.apache.spark.{SparkConf, SparkContext}

/**
  * Created by lujinyong168 on 2016/2/2.
  * DT大数据梦工厂-IMF
  * 使用本地文件系统创建RDD(测试大量数据)
  * 统计文本中的字符个数
  */
object RDDCreateByLocal {
def main(args: Array[String]) {
val conf = new SparkConf()//创建SparkConf对象
conf.setAppName("RDDCreateByLocal")//设置应用名称
conf.setMaster("local")
val sc = new SparkContext(conf)//创建SparkContext对象
val rdd = sc.textFile("D://testspark//WordCount.txt")
val linesLen = rdd.map(line=>line.length)
val sum = linesLen.reduce(_+_)
println("The total characters of the file is : "+sum)
  }
}


3.HDFS模式创建RDD
package com.imf.spark.rdd

import org.apache.spark.{SparkConf, SparkContext}

/**
  * Created by lujinyong168 on 2016/2/2.
  * DT大数据梦工厂-IMF
  * 使用HDFS创建RDD(生产环境最常用的RDD创建方式)
  */
object RDDCreateByHDFS {
def main(args: Array[String]) {
val conf = new SparkConf()//创建SparkConf对象
conf.setAppName("RDDCreateByHDFS")//设置应用名称
conf.setMaster("local")
val sc = new SparkContext(conf)//创建SparkContext对象
val rdd = sc.textFile("/library/")
val linesLen = rdd.map(line=>line.length)
val sum = linesLen.reduce(_+_)
println("The total characters of the file is : "+sum)
  }
}


王家林:中国Spark第一人,Spark亚太研究院院长和首席专家
DT大数据梦工厂
新浪微博:http://weibo.com.ilovepains/
手机:18610086859
QQ:1740415547
联系邮箱[email protected]

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [spark rdd 弹性] 推荐:

Spark RDD弹性表现和来源

- - 开源软件 - ITeye博客
hadoop 的MapReduce是基于数据集的,位置感知,容错 负载均衡. 基于数据集的处理:从物理存储上加载数据,然后操作数据,然后写入物理存储设备;. 基于数据集的操作不适应的场景:. 重点是:基于数据流的方式 不能够复用曾经的结果或者中间计算结果;. spark RDD是基于工作集的. 工作流和工作集的共同特点:位置感知,自动容错,负载均衡等.

Spark和RDD模型研究

- - CSDN博客云计算推荐文章
现今分布式计算框架像MapReduce和Dryad都提供了高层次的原语,使用户不用操心任务分发和错误容忍,非常容易地编写出并行计算程序. 然而这些框架都缺乏对分布式内存的抽象和支持,使其在某些应用场景下不够高效和强大. RDD(Resilient Distributed Datasets弹性分布式数据集)模型的产生动机主要来源于两种主流的应用场景:.

Spark算子:RDD键值转换操作(4)–cogroup、join – lxw的大数据田地

- -
关键字:Spark算子、Spark RDD键值转换、cogroup、join. cogroup相当于SQL中的全外关联full outer join,返回左右RDD中的记录,关联不上的为空. 参数numPartitions用于指定结果的分区数. 参数partitioner用于指定分区函数. ##参数为3个RDD示例略,同上.

Spark常用函数讲解之键值RDD转换 - MOBIN - 博客园

- -
RDD:弹性分布式数据集,是一种特殊集合 ‚ 支持多种来源 ‚ 有容错机制 ‚ 可以被缓存 ‚ 支持并行操作,一个RDD代表一个分区里的数据集.         Transformation(转换):Transformation属于延迟计算,当一个RDD转换成另一个RDD时并没有立即进行转换,仅仅是记住       了数据集的逻辑操作.

颠覆大数据分析之Spark弹性分布式数据集

- - 并发编程网 - ifeve.com
颠覆大数据分析之Spark弹性数据集. 译者:黄经业     购书. Spark中迭代式机器学习算法的数据流可以通过图2.3来进行理解. 将它和图2.1中Hadoop MR的迭代式机器学习的数据流比较一下. MR中每次迭代都会涉及HDFS的读写,而在Spark中则要简单得多. 它仅需从HDFS到Spark中的分布式共享对象空间的一次读入——从HDFS文件中创建RDD.

Spark概览

- - 简单文本
Spark具有先进的DAG执行引擎,支持cyclic data flow和内存计算. 因此,它的运行速度,在内存中是Hadoop MapReduce的100倍,在磁盘中是10倍. 这样的性能指标,真的让人心动啊. Spark的API更为简单,提供了80个High Level的操作,可以很好地支持并行应用.

Spark与Mapreduce?

- - 崔永键的博客
我本人是类似Hive平台的系统工程师,我对MapReduce的熟悉程度是一般,它是我的底层框架. 我隔壁组在实验Spark,想将一部分计算迁移到Spark上. 年初的时候,看Spark的评价,几乎一致表示,Spark是小数据集上处理复杂迭代的交互系统,并不擅长大数据集,也没有稳定性. 但是最近的风评已经变化,尤其是14年10月他们完成了Peta sort的实验,这标志着Spark越来越接近替代Hadoop MapReduce了.

Spark迷思

- - ITeye博客
目前在媒体上有很大的关于Apache Spark框架的声音,渐渐的它成为了大数据领域的下一个大的东西. 证明这件事的最简单的方式就是看google的趋势图:. 上图展示的过去两年Hadoop和Spark的趋势. Spark在终端用户之间变得越来越受欢迎,而且这些用户经常在网上找Spark相关资料. 这给了Spark起了很大的宣传作用;同时围绕着它的也有误区和思维错误,而且很多人还把这些误区作为银弹,认为它可以解决他们的问题并提供比Hadoop好100倍的性能.

Spark 优化

- - CSDN博客推荐文章
提到Spark与Hadoop的区别,基本最常说的就是Spark采用基于内存的计算方式,尽管这种方式对数据处理的效率很高,但也会往往引发各种各样的问题,Spark中常见的OOM等等. 效率高的特点,注定了Spark对性能的严苛要求,那Spark不同程序的性能会碰到不同的资源瓶颈,比如:CPU,带宽、内存.

Spark&Spark性能调优实战

- - CSDN博客互联网推荐文章
       Spark特别适用于多次操作特定的数据,分mem-only和mem & disk. 其中mem-only:效率高,但占用大量的内存,成本很高;mem & disk:内存用完后,会自动向磁盘迁移,解决了内存不足的问题,却带来了数据的置换的消费. Spark常见的调优工具有nman、Jmeter和Jprofile,以下是Spark调优的一个实例分析:.