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 rdd函数大全。spark rdd操作为core操作,虽然后续版本主要以dataset来操作,但是rdd操作也是不可忽略的一部分。
Spark思维导图之Spark RDD.png
spark RDD论文中文版
spark rdd相关操作详解;包括全部的操作说明和举例;
RDD(Resilient Distributed Datasets弹性分布式数据集)是一个容错的、并行的数据结构,可以简单的把RDD理解成一个提供了许多操作接口的数据集合,和一般数据集不同的是,其实际数据分布存储于一批机器中(内存或...
RDD即弹性分布式数据集,有容错机制并可以被并行操作的元素集合,具有只读、分区、容错、高效、无需物化、可以缓存、RDD依赖等特征。RDD只是数据集的抽象,分区内部并不会存储具体的数据。
本文是spark RDD的基础论文,有非常好的指导意义。
大数据实验报告Windows环境下安装Spark及RDD编程和Spark编程实现wordcount.doc
Spark RDD思维导图,xmind
Spark RDD 资料
Spark rdd 简易教程
课时3:Spark RDD操作 课时4:SparkRDD原理剖析 课时5:Spark2sql从mysql中导入 课时6:Spark1.6.2sql与mysql数据交互 课时7:SparkSQL java操作mysql数据 课时8:Spark统计用户的收藏转换率 课时9:Spark梳理...
RDD:弹性分布式数据集(ResilientDistributed Dataset),是Spark对数据的核心抽象。RDD其实是分布式的元素集合。当Spark对数据操作和转换时,会自动将RDD中的数据分发到集群,并将操作并行化执行。 Spark中的RDD是一...
包含了spark rdd的原版英语论文以及spark老汤根据原版论文翻译的中文版论文,详细的介绍了spark的核心抽象-RDD,非常适合喜欢spark技术的同学阅读
spark RDD论文:Resilient distributed datasets: A fault-tolerant abstraction for in-memory cluster computing
Spark RDD 练习作业(选择部分数据(可以是自拟,可以是采集的,也可以是现有的),进行多角度数据统计及分析,并进行数据整合及展示(尽量多的运用 Spark RDD API)).zip Spark RDD 练习作业(选择部分数据(可以...
内容根据spark rdd.scala和ParRDDFunctions.scala源码中rdd顺序整理,包含rdd功能解释。对熟悉spark rdd很有用
这是一个基于Scala语言开发的Spark RDD、Spark SQL、Spark Streaming相关Demo,包含35个文件。主要文件类型包括29个Scala...该项目提供了Spark中RDD、SQL和Streaming的相关示例,适合用于学习和实践Spark编程技术。
结合代码详细描述RDD算子的执行流程,并配上执行流程图
Apache Spark RDD相关知识面试题