RDD 可伸缩不可改变分布式集合,缓存进内存,每次转换生成新的RDD,因此有依赖关系,丢失后可恢复;指定partition个数,分到cpu中,每个partition被一个任务处理,对于key-value的RDD存在分片函数,存在一个列表存储分片的位置
对RDD的创建,转换,返回;创建后不可改变,对外部的HDFS或List操作,转换时生成新的RDD,直到action时才计算,返回driver程序或外部存储
task,stage,shuffle,依赖,DAG即是RDD的依赖关系
Spark 集群由集群管理器 Cluster Manager、工作节点 Worker、执行器 Executor、驱动器 Driver、应用程序 Application 等部分组成 https://www.jianshu.com/p/bd53509dc237
application由driver执行连接到集群管理器,使用SparkAPI。driver运行main函数,执行sparkContext,生成DAG并且协调资源,发送task到executor。executor是运行在worker上的进程,运行task,worker同步资源信息到资源管理器。
scala> val file = sc.textFile("/spark/hello.txt")读取文件RDD,本地的文件系统,还有所有Hadoop支持的数据集,比如HDFS、Cassandra、HBase等
scala> val array = Array(1,2,3,4,5)
array: Array[Int] = Array(1, 2, 3, 4, 5)
scala> val rdd = sc.parallelize(array)
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[27] at parallelize at
Spark支持两个类型(算子)操作:Transformation和Action https://www.cnblogs.com/qingyunzong/p/8899715.html
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import scala.Tuple2;
import java.util.Arrays;
import java.util.Iterator;
public class SparkWordCountWithJava7 {
public static void main(String[] args) {
SparkConf conf = new SparkConf();
conf.setMaster("local");
conf.setAppName("WordCount");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD
JavaRDD
@Override
public Iterator
return Arrays.asList(line.split(",")).iterator();
}
});
JavaPairRDD
@Override
public Tuple2
return new Tuple2<>(word, 1);
}
});
JavaPairRDD
@Override
public Integer call(Integer i1, Integer i2) throws Exception {
return i1 + i2;
}
});
JavaPairRDD
@Override
public Tuple2
return new Tuple2<>(tuple._2, tuple._1);
}
});
JavaPairRDD
JavaPairRDD
@Override
public Tuple2
return new Tuple2<>(tuple._2, tuple._1);
}
});
resultRDD.saveAsTextFile("E:\\result7");
}
}
窄依赖:是指每个父RDD的一个Partition最多被子RDD的一个Partition所使用,例如map、filter、union等操作都会产生窄依赖;(独生子女)
宽依赖:是指一个父RDD的Partition会被多个子RDD的Partition所使用,例如groupByKey、reduceByKey、sortByKey等操作都会产生宽依赖;(超生)
Hadoop中MapReduce操作中的Mapper和Reducer在spark中的基本等量算子是map和reduceByKey;不过区别在于:Hadoop中的MapReduce天生就是排序的;而reduceByKey只是根据Key进行reduce,但spark除了这两个算子还有其他的算子;
日志分析 https://blog.csdn.net/love__live1/article/details/84860872