spark比mapreduce快的两个缘由java
1. mapreduce任务后期在计算的是时候,每个job的输出结果都会落地到磁盘,后续有其余的job要依赖于前面job的输出结果,这个时候就须要进行大量的磁盘io操做,性能较低 2. spark任务后期在进行计算的时候,job的结果是能够保存在内存中的,后面有其余的job须要以言语前面job的输出结果,这个时候能够直接从内存中读取,避免了磁盘io操做,性能比较高 spark程序和mapreduce程序都会产生shuffle阶段,在shuffle阶段中他们产生的数据都会保留在磁盘中
1 mapreduce任务以进程的方式运行在yarn集群中,好比说有100个mapTask,一个task就须要一个进程,这些task要运行就须要开启100个进程 2 spark任务以线程的方式运行在进程中,好比说有100个task,则一个task就对应一个线程
A list of dependencies on other RDDspython
一个RDD会依赖于其余多个RDDapache
这里是说RDD和RDD之间是有依赖关系的,spark任务的容错机制就是根据这个特性(血统)而来
Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)数组
一个Patitioner,即RDD的分区函数(可选项)网络
spark中实现了两种类型的分区函数 1 基于哈希的HashPartitioner,(key.hashcode % 分区数 = 分区号) 2 基于范围的RangePartitioner 只有对于key-value的RDD,而且产生shuffle,才会有Partitioner 非key-value的RDD的Partitioner的值是None
Optionally, a list of preferred locations to compute each split in (e.g. block locations for an HDFS file)架构
一个列表,存储每一个Partition的优先位置(可选项)分布式
spark任务在调度的时候会优先考虑存有数据的节点开启计算任务,以减小数据的网络传输,提成计算效率
转换 | 含义 |
---|---|
map(func) | 返回一个新的RDD,该RDD由每个输入元素通过func函数转换后组成 |
filter(func) | 返回一个新的RDD,该函数由通过func函数计算而且返回值为true的输入元素组成 |
flatMap(func) | 相似于map,但每个输入元素能够被映射为0或多个输出元素(因此func应该返回一个序列,而不是单一的元素) |
mapPartitions(func) | 相似于map,但独立地在RDD的每个分片上运行,所以在类型为T的RDD上运行时,func的函数类型必须是Iterator[T] => Iterator[U] |
mapPartitionsWithIndex(func) | 相似于mapPartitions,但func带有一个整数参数表示分片的索引值,所以在类型为T的RDD上运行时,func的函数类型必须是Iterator[T] => Iterator[U] |
union(otherDataset) | 对源RDD和参数RDD求并集,并返回一个新的RDD |
intersection(otherDataset) | 对源RDD和参数RDD求交集,并返回一个新的RDD |
distinct([numTasks])) | 对源RDD进行去重以后返回一个新的RDD |
groupByKey([numTasks]) | 在一个(k,v)类型的RDD上调用,返回一个(k,v)的RDD |
reduceByKey(func, [numTasks]) | 在一个(k,v)类型的RDD上调用,返回一个(k,v)的RDD,使用指定的reduce函数,将相同key的值聚合到一块儿,与groupByKey相似,reduce任务的个数能够经过第二个参数来设置 |
sortByKey([ascending], [numTasks]) | 在一个(k,v)的RDD上调用,k必须实现Ordered接口,返回一个按照key进行排序的(k,v)RDD |
sortBy(func,[ascending], [numTasks]) | 与sortByKey相似,可是更灵活,能够自定义排序func |
join(otherDataset, [numTasks]) | 在类型为(k,v)和(k,w)的RDD上调用,返回一个相同 key对应的全部元素对在一块儿的(k,(v,w))的RDD |
cogroup(otherDataset, [numTasks]) | 在类型为(K,V)和(K,W)的RDD上调用,返回一个(K,(Iterable
|
coalesce(numPartitions) | 减小RDD的分区数到指定值 |
repartition(numPartitions) | 从新给RDD分区 |
repartitionAndSortWithinPartitions(partitioner) | 从新给RDD分区,而且每一个分区内以记录的key排序 |
动做 | 含义 |
---|---|
reduce(func) | reduce将RDD中元素前两个传给输入函数,产生一个新的return值,新产生的return值与RDD中下一个元素(第三个元素)组成两个元素,再被传给输入函数,直到最后只有一个值为止。 |
collect() | 在驱动程序中,以数组的形式返回数据集的全部元素 |
count() | 返回RDD的元素个数 |
first() | 返回RDD的第一个元素(相似于take(1)) |
take(n) | 返回一个由数据集的前n个元素组成的数组 |
takeOrdered(n, [ordering]) | 返回天然顺序或者自定义顺序的前 n 个元素 |
saveAsTextFile(path) | 将数据集中的元素以textFile的形式保存到HDFS文件系统或者其余支持的文件系统,对于每一个元素,Spark将会调用toString方法,将它装换为文件中的文本 |
saveAsSequenceFile(path) | 将数据集中的元素以Hadoop sequenceFile的格式保存到指定的目录,能够是HDFS或者其余Hadoop支持的文件系统 |
saveAsObjectFile(path) | 将数据集的元素以Java序列化的方式保存到指定的目录下 |
countByKey() | 针对(k,v)类型的RDD,返回一个(k,int)的map,表示每个key对应的元素个数 |
foreach(func) | 在数据集上每一个元素上,运行函数func |
foreachPartition(func) | 在数据集的每一个分区上,运行函数func |