java

spark非等值条件关联 spark 不等于_apache


spark非等值条件关联 spark 不等于_spark_02

spark简介

spark非等值条件关联 spark 不等于_spark_03


spark非等值条件关联 spark 不等于_jar_04


spark非等值条件关联 spark 不等于_jar_05

spark非等值条件关联 spark 不等于_spark非等值条件关联_06

spark非等值条件关联 spark 不等于_jar_07

DAG:先看到行动算子,再画流程图(有向无环图),再计算

spark非等值条件关联 spark 不等于_apache_08


Spark 与 MapReduce 的区别

spark非等值条件关联 spark 不等于_spark非等值条件关联_09

spark非等值条件关联 spark 不等于_spark非等值条件关联_10


spark非等值条件关联 spark 不等于_spark非等值条件关联_11


spark非等值条件关联 spark 不等于_jar_12

spark非等值条件关联 spark 不等于_spark非等值条件关联_13


RDD不存数据,存储的是计算逻辑

spark非等值条件关联 spark 不等于_spark_14

spark非等值条件关联 spark 不等于_jar_15


spark非等值条件关联 spark 不等于_spark_16

spark非等值条件关联 spark 不等于_jar_17


spark非等值条件关联 spark 不等于_spark_18


spark非等值条件关联 spark 不等于_jar_19

4. Transformations 转换算子

spark非等值条件关联 spark 不等于_apache_20

spark非等值条件关联 spark 不等于_apache_21


spark非等值条件关联 spark 不等于_spark非等值条件关联_22


spark非等值条件关联 spark 不等于_jar_23


spark非等值条件关联 spark 不等于_jar_24


spark非等值条件关联 spark 不等于_apache_25

spark非等值条件关联 spark 不等于_apache_26


spark非等值条件关联 spark 不等于_jar_27

java 排序

spark非等值条件关联 spark 不等于_apache_28


spark非等值条件关联 spark 不等于_spark非等值条件关联_29


join

join只join相同key下的vale,所有join的分区都是跟着父rdd的最大分数走,及两个rdd jion,join后的rdd分区为两个父rdd分区数大的分区数

JavaPairRDD<Integer, String> nameRDD = sc.parallelizePairs(Arrays.asList(
					new Tuple2<Integer, String>(0, "aa"),
					new Tuple2<Integer, String>(1, "a"),
					new Tuple2<Integer, String>(2, "b"),
					new Tuple2<Integer, String>(3, "c")
				));

		JavaPairRDD<Integer, Integer> scoreRDD = sc.parallelizePairs(Arrays.asList(
				new Tuple2<Integer, Integer>(1, 100),
				new Tuple2<Integer, Integer>(2, 200),
				new Tuple2<Integer, Integer>(3, 300),
				new Tuple2<Integer, Integer>(4, 400)
		));



		JavaPairRDD<Integer, Tuple2<String, Integer>> join = nameRDD.join(scoreRDD);

spark非等值条件关联 spark 不等于_jar_30


rightOuterJoin

spark非等值条件关联 spark 不等于_apache_31


spark非等值条件关联 spark 不等于_apache_32

spark非等值条件关联 spark 不等于_apache_33


mapParition

spark非等值条件关联 spark 不等于_apache_34


distance 去重

spark非等值条件关联 spark 不等于_jar_35

java 代码自己实现distinct

spark非等值条件关联 spark 不等于_jar_36


spark非等值条件关联 spark 不等于_spark_37

spark非等值条件关联 spark 不等于_spark_38


mapPartitionWithIndex

自已知道数据来自哪个分区

spark非等值条件关联 spark 不等于_spark_39

* coalesce减少分区
 * 第二个参数是减少分区的过程中是否产生shuffle,true是产生shuffle,false是不产生shuffle,默认是false.
 * 如果coalesce的分区数比原来的分区数还多,第二个参数设置false,即不产生shuffle,不会起作用。
 * 如果第二个参数设置成true则效果和repartition一样,即coalesce(numPartitions,true) = repartition(numPartitions)

过滤操作之后减少分区

spark非等值条件关联 spark 不等于_jar_40


spark非等值条件关联 spark 不等于_spark_41

5. Action 行动算子

spark非等值条件关联 spark 不等于_spark_42


spark非等值条件关联 spark 不等于_apache_43


spark非等值条件关联 spark 不等于_spark非等值条件关联_44


spark非等值条件关联 spark 不等于_spark_45


foreachPartition和 mapParition一样都是以分区为单位进行计算

spark非等值条件关联 spark 不等于_apache_46


结果

spark非等值条件关联 spark 不等于_jar_47

spark非等值条件关联 spark 不等于_spark_48


结果

spark非等值条件关联 spark 不等于_apache_49


spark非等值条件关联 spark 不等于_jar_50


reduce 可以做用在不是看k v格式的RDD

6. 控制算子

spark非等值条件关联 spark 不等于_spark非等值条件关联_51


spark非等值条件关联 spark 不等于_apache_52

cache

spark非等值条件关联 spark 不等于_spark_53

测试代码:

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

public class CacheTest {

    public static void main(String[] args) {
        SparkConf conf = new SparkConf();
        conf.setMaster("local").setAppName("CacheTest");
        JavaSparkContext jsc = new JavaSparkContext(conf);
        JavaRDD<String> lines = jsc.textFile("./data/NASA_access_log_Aug95");

        lines = lines.cache();
        long startTime = System.currentTimeMillis();
        long count = lines.count();
        long endTime = System.currentTimeMillis();
        System.out.println("共"+count+ "条数据,"+"初始化时间+cache时间+计算时间="+
                (endTime-startTime));


        long countStartTime = System.currentTimeMillis();
        long countrResult = lines.count();
        long countEndTime = System.currentTimeMillis();
        System.out.println("共"+countrResult+ "条数据,"+"计算时间="+ (countEndTime-
                countStartTime));

        jsc.stop();
    }
}

persist:

spark非等值条件关联 spark 不等于_jar_54


cache 和 persist 的注意事项:

spark非等值条件关联 spark 不等于_jar_55

checkpoint

cache和persist是为了提高性能的,checkpoint是为了容错的。

spark非等值条件关联 spark 不等于_spark_56

spark非等值条件关联 spark 不等于_jar_57


spark非等值条件关联 spark 不等于_apache_58

SparkConf conf = new SparkConf();
conf.setMaster("local").setAppName("checkpoint");
JavaSparkContext sc = new JavaSparkContext(conf);
sc.setCheckpointDir("./checkpoint");
JavaRDD<Integer> parallelize = sc.parallelize(Arrays.asList(1,2,3));
parallelize.checkpoint();
parallelize.count();
sc.stop();

3.集群搭建

一个人行动算子对应一个job,一个Job中有多个task一个task对应一个partition,partiiton数就是所谓并行度,partiiton分区在不同计算节点计算,不同的数据但是相同的逻辑及相同的task。

3.0.Spark-Submit 提交参数

spark非等值条件关联 spark 不等于_spark非等值条件关联_59


spark非等值条件关联 spark 不等于_spark非等值条件关联_60


spark非等值条件关联 spark 不等于_jar_61


spark非等值条件关联 spark 不等于_spark非等值条件关联_62

3.1Standalone 模式两种提交任务方式

Standalone 模式两种提交任务方式

1.Standalone-client 模式提交任务方式

提交命令
不指定默认是client模式

/spark-submit
--master spark://node1:7077
--class org.apache.spark.examples.SparkPi
../examples/jars/spark-examples_2.11-2.2.1.jar
1000

或者

./spark-submit
--master spark://node1:7077
--deploy-mode client
--class org.apache.spark.examples.SparkPi
../examples/jars/spark-examples_2.11-2.2.1.jar
100

spark非等值条件关联 spark 不等于_spark非等值条件关联_63

spark非等值条件关联 spark 不等于_spark_64

执行原理图解

spark非等值条件关联 spark 不等于_jar_65


提交一个任务就会在client节点启动一个对应Driver

spark非等值条件关联 spark 不等于_spark_66


spark非等值条件关联 spark 不等于_spark_67

2. Standalone-cluster模式 提交任务方式

提交命令

./spark-submit
--master spark://node1:7077
--deploy-mode cluster
--class org.apache.spark.examples.SparkPi
../examples/jars/spark-examples_2.11-2.2.1.jar
100

spark非等值条件关联 spark 不等于_jar_68


执行原理图解

spark非等值条件关联 spark 不等于_apache_69


提交一个任务就会在集群中的随机一个节点启动一个对应Driver

spark非等值条件关联 spark 不等于_spark非等值条件关联_70


spark非等值条件关联 spark 不等于_apache_71

3.2. Yarn 模式两种提交任务方式

1.yarn-client 提交任务方式

提交命令

./spark-submit
--master yarn
--class org.apache.spark.examples.SparkPi
../examples/jars/spark-examples_2.11-2.2.1.jar
100

或者

./spark-submit
--master yarn–client
--class org.apache.spark.examples.SparkPi
../examples/jars/spark-examples_2.11-2.2.1.jar
100

或者

./spark-submit
--master yarn
--deploy-mode client
--class org.apache.spark.examples.SparkPi
../examples/jars/spark-examples_2.11-2.2.1.jar
100

spark非等值条件关联 spark 不等于_spark非等值条件关联_72

执行原理图解

spark非等值条件关联 spark 不等于_apache_73


提交一个任务就会在client节点启动一个对应的ApplicationMaster和Driver

spark非等值条件关联 spark 不等于_spark非等值条件关联_74

spark非等值条件关联 spark 不等于_spark_75


spark非等值条件关联 spark 不等于_spark非等值条件关联_76

2. yarn-cluster 提交任务方式

提交命令

./spark-submit
--master yarn
--deploy-mode cluster
--class org.apache.spark.examples.SparkPi
../examples/jars/spark-examples_2.11-2.2.1.jar
100

或者

./spark-submit
--master yarn-cluster
--class org.apache.spark.examples.SparkPi
../examples/jars/spark-examples_2.11-2.2.1.jar
100

执行原理图解

spark非等值条件关联 spark 不等于_spark_77


提交一个任务就会在随机的一台NodeManager节点启动一个对用的ApplicationMaster相当于Driver

spark非等值条件关联 spark 不等于_spark非等值条件关联_78


spark非等值条件关联 spark 不等于_spark_79

配置历史数据

spark非等值条件关联 spark 不等于_jar_80


spark非等值条件关联 spark 不等于_jar_81

5. 窄依赖和宽依赖

一个application下可以有多个job(一个行动算子对应一个job),一个job可能分为多个stage,一个stage可能包含多个task。

job1,job2,job之间运行时串行的,及job1执行完才能执行job2

stage之间可能串行也可能并行

spark非等值条件关联 spark 不等于_spark_82


spark非等值条件关联 spark 不等于_apache_83


spark非等值条件关联 spark 不等于_spark_84


spark非等值条件关联 spark 不等于_spark非等值条件关联_85


宽窄依赖图理解

RDD分区数不改变就是窄依赖,分区改变就是宽依赖

spark非等值条件关联 spark 不等于_jar_86

spark非等值条件关联 spark 不等于_spark非等值条件关联_87

6. Stage

spark非等值条件关联 spark 不等于_spark非等值条件关联_88


spark非等值条件关联 spark 不等于_apache_83

spark非等值条件关联 spark 不等于_spark_90


宽依赖的算子可以指定并行度(partiiton数)

spark非等值条件关联 spark 不等于_spark_91

val conf = new SparkConf()
conf.setMaster("local").setAppName("pipeline");
val sc = new SparkContext(conf)
val rdd = sc.parallelize(Array(1,2,3,4))
val rdd1 = rdd.map { x => {
println("map--------"+x) x
}}
val rdd2 = rdd1.filter { x => {
println("fliter********"+x)
true
} }
rdd2.collect()
sc.stop()

spark非等值条件关联 spark 不等于_apache_92

7. Spark 资源调度和任务调度

一个stage一个stak执行不结束这个stage就执行不结束,satage对应的job(任务)就执行不结束,及颗老鼠屎坏了一锅粥。

spark非等值条件关联 spark 不等于_spark_93


Spark 资源调度和任务调度的流程:

spark非等值条件关联 spark 不等于_jar_94


执行慢的task,启动一个新的task计算不交默认是关闭的。

spark非等值条件关联 spark 不等于_jar_95


图解 Spark 资源调度和任务调度的流程

spark非等值条件关联 spark 不等于_apache_96


粗粒度资源申请和细粒度资源申请MR是细粒度的,由每个task计算时task自己申请资源,task计算完就释放资源
Spark是粗粒度的,任务开始的给所有的task申请好资源,所有的task都计算完才释放资源。

spark非等值条件关联 spark 不等于_spark非等值条件关联_97


spark非等值条件关联 spark 不等于_spark_98