spark-java+scala 乐字节教育 框架+算子

java
在这里插入图片描述
在这里插入图片描述

spark简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

DAG:先看到行动算子,再画流程图(有向无环图),再计算
在这里插入图片描述
Spark 与 MapReduce 的区别
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
RDD不存数据,存储的是计算逻辑
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. Transformations 转换算子

在这里插入图片描述

filter
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

java 排序
在这里插入图片描述
在这里插入图片描述
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);

在这里插入图片描述
rightOuterJoin
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
mapParition
在这里插入图片描述
distance 去重
在这里插入图片描述

java 代码自己实现distinct
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
mapPartitionWithIndex
自已知道数据来自哪个分区

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

过滤操作之后减少分区

在这里插入图片描述
在这里插入图片描述

5. Action 行动算子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
foreachPartition和 mapParition一样都是以分区为单位进行计算
在这里插入图片描述
结果
在这里插入图片描述

在这里插入图片描述
结果
在这里插入图片描述
在这里插入图片描述
reduce 可以做用在不是看k v格式的RDD

6. 控制算子

在这里插入图片描述
在这里插入图片描述

cache

在这里插入图片描述

测试代码:

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:

在这里插入图片描述
cache 和 persist 的注意事项:
在这里插入图片描述

checkpoint

cache和persist是为了提高性能的,checkpoint是为了容错的。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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 提交参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

执行原理图解
在这里插入图片描述
提交一个任务就会在client节点启动一个对应Driver
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
执行原理图解
在这里插入图片描述
提交一个任务就会在集群中的随机一个节点启动一个对应Driver
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

执行原理图解
在这里插入图片描述
提交一个任务就会在client节点启动一个对应的ApplicationMaster和Driver
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

执行原理图解
在这里插入图片描述
提交一个任务就会在随机的一台NodeManager节点启动一个对用的ApplicationMaster相当于Driver
在这里插入图片描述
在这里插入图片描述

配置历史数据
在这里插入图片描述
在这里插入图片描述

5. 窄依赖和宽依赖

一个application下可以有多个job(一个行动算子对应一个job),一个job可能分为多个stage,一个stage可能包含多个task。
job1,job2,job之间运行时串行的,及job1执行完才能执行job2
stage之间可能串行也可能并行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
宽窄依赖图理解
RDD分区数不改变就是窄依赖,分区改变就是宽依赖
在这里插入图片描述

在这里插入图片描述

6. Stage

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
宽依赖的算子可以指定并行度(partiiton数)
在这里插入图片描述

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()

在这里插入图片描述

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

一个stage一个stak执行不结束这个stage就执行不结束,satage对应的job(任务)就执行不结束,及颗老鼠屎坏了一锅粥。
在这里插入图片描述
Spark 资源调度和任务调度的流程:
在这里插入图片描述
执行慢的task,启动一个新的task计算不交默认是关闭的。
在这里插入图片描述
图解 Spark 资源调度和任务调度的流程
在这里插入图片描述
粗粒度资源申请和细粒度资源申请

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

在这里插入图片描述
在这里插入图片描述


版权声明:本文为yangshengwei230612原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。