本文共 3334 字,大约阅读时间需要 11 分钟。
MapReduce的缺点
需要一种灵活的框架可同时进行批处理、流式计算、交互式计算
Spark优势
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合.
Dataset:一个数据集,简单的理解为集合,用于存放数据的
Distributed:它的数据是分布式存储,并且可以做分布式的计算
Resilient:弹性的
所有spark中对数据的操作最终都会转换成RDD的操作
RDD是不可变的
创建RDD之前先要有spark context
conf = SparkConf().setAppName(appName).setMaster(master)sc = SparkContext(conf=conf)
通过内存中的数据创建RDD
创建RDD时可以指定 partition的数量(RDD会分成几份)一个partition会对应一个task,根据CPU的内核数来指定partition (1核对应2~4个partition)
从文件创建RDD 可以是HDFS支持的任何一种存储介质
transformation
所有的transformation 都是延迟执行的,只要不调用action 不会执行,只是记录过程
transformation 这一类算子返回值还是 rdd
rdd.transformation 还会得到新的rdd
map(func) 将func函数作用到数据集的每一个元素上,生成一个新的RDD返回
filter(func) 选出所有func返回值为true的元素,生成一个新的RDD返回
flatMap(func) 会先执行map的操作,再将所有对象合并为一个对象
union() 取并集
intersection() 交集
groupByKey() 以元组中的第0个元素作为key,进行分组,返回一个新的RDD 结果中 value是一个Iterable
reducebykey(func) 将key相同的键值对,按照Function进行计算
sortbykey(ascending=True, numPartitions=None, keyfunc=<function RDD.>)Sorts this RDD, which is assumed to consist of (key, value) pairs.按照关键词排序,排完后函数操作
action
persist
详情见
Application
用户自己写的Spark应用程序,批处理作业的集合。Application的main方法为应用程序的入口,用户通过Spark的API,定义了RDD和对RDD的操作。
Client:客户端进程,负责提交作业到Master。
Master(类比与ResourceManager)
Worker(类比于NodeManager)
Driver(类比于ApplicationMaster)
Executor(类比于Container):即真正执行作业的地方,一个集群一般包含多个Executor,每个Executor接收Driver的命令Launch Task,一个Executor可以执行一到多个Task。
转载地址:http://dmdsn.baihongyu.com/