一:分布式基础架构

Spark实训目标 spark实训总结_Hadoop

 

Spark实训目标 spark实训总结_Spark实训目标_02

 

Spark实训目标 spark实训总结_spark_03

 

Spark实训目标 spark实训总结_big data_04

二:Spark大数据分析计算引擎

Spark在传统的MapReduce 计算框架的基础上,对计算过程的优化,从而大大加快了数据分析、挖掘的运行和读写速度,并将计算单元缩小到更适合并行计算和重复使用的RDD计算模型。

Spark实训目标 spark实训总结_Hadoop_05

软件是完整的,框架是不全的,我们自己写的代码逻辑,需要部署到环境中才能够运行;

val spakConf = new SparkConf().setMaster("local").setAppName("WordCount").set("spark.testing.memory","2147480000") val sc = new SparkContext(spakConf)

从代码中可知,环境是本地,有master

三:Hadoop与Spark

Spark和Hadoop的根本差异是多个作业之间的数据通信问题 : Spark多个作业之间数据通信是基于内存,而Hadoop是基于磁盘。

Spark只有在shuffle的时候将数据写入磁盘,而Hadoop中多个MR作业之间的数据交互都要依赖于磁盘交互

 3.1补充

绝对路径 : 不可改变的路径

http://ip地址:端口号/磁盘路径 相对路径 : 可以改变的路径,但是有一个基准路径

 System.getProperty("user.dir")

3.2:补充

编译时异常是由于外部资源,造成的比如

FileNotFoundException:文件找不到的异常

ClassNotFoundException:类找不到的异常

DataFormatException:数据格式化异常

NoSuchFieldException:没有匹配的属性异常

NoSuchMethodException:没有匹配的方法异常

SQLException:数据库操作异常

TimeoutException:执行超时异常

运行时异常:

RuntimeException:运行时异常

NullPointerException:空指针异常

ArrayIndexOutofBoundsException:数组越界异

ClassCastException:类型转换异常

IllegalArgumentException:非法的参数异常

InputMismatchException:输入不匹配

3.3:补充

配置文件如果想要起作用,应该放置在classpath中
idea项目的classpath是哪?maven

Spark实训目标 spark实训总结_Hadoop_06

四:Spark的运行环境

1、Local模式(不需要其他任何节点资源就可以在本地执行Spark代码的环境)

2、Standalone模式(资源由spark的集群提供,计算由spark的程序提供因此叫Standalone模式)

Spark实训目标 spark实训总结_Hadoop_07

3、 配置高可用(HA)

当前集群中的Master节点只有一个,所以会存在单点故障问题。所以为了解决单点故障问题,需要在集群中配置多个Master节点,一旦处于活动状态的Master发生故障时,由备用Master提供服务,保证作业可以继续执行。

Spark实训目标 spark实训总结_Hadoop_08

 4、Yarn模式

独立部署(Standalone)模式由Spark自身提供计算资源,无需其他框架提供资源,这种方式降低了和其他第三方资源框架的耦合性,独立性非常强。但是Spark主要是计算框架,而不是资源调度框架,所以本身提供的资源调度并不是它的强项,因此yarn环境可以提供资源调度。

5、Windows模式

在学习的过程中每次都需要启动虚拟机,启动集群,比较繁琐,因此可以在windows系统下启动本地集群。

集群模式对比

Spark实训目标 spark实训总结_大数据_09

逻辑功能提交

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10

 4.1:补充

Spark实训目标 spark实训总结_大数据_10

 4.2:reduce() VS fold()

Spark实训目标 spark实训总结_Spark实训目标_11

Spark实训目标 spark实训总结_spark_12

 

Spark实训目标 spark实训总结_Hadoop_13

 

Spark实训目标 spark实训总结_Hadoop_14

val list: List[Int] = List(1, 2, 3, 4)
    val str: String = list.foldLeft("")(_ + _)
    println(str)

Spark实训目标 spark实训总结_Spark实训目标_15

 案例:将两个map合并

def main(args: Array[String]): Unit = {
    val map1: mutable.Map[String, Int] = mutable.Map(("a", 1), ("b", 2), ("c", 3))
    val map2: mutable.Map[String, Int] = mutable.Map(("a", 4), ("d", 5), ("c", 6))

    /*map2.foreach{
      case (k,v) => {
        val oldVal: Int = map1.getOrElse(k, 0)
        map1.update(k,v+oldVal)
      }
    }*/
    /*map2.foldLeft(map1)(
      //map1
      //map表示map1   kv表示map2中的一个元素
      (map , kv) => {
        val oldVal: Int = map.getOrElse(kv._1, 0)
        map.update(kv._1,kv._2+oldVal)
        map
      }
    )*/
    println(
    map2.foldLeft(map1)((map , kv )=>{
      val oldVal: Int = map.getOrElse(kv._1, 0)
      map.updated(kv._1,kv._2 + oldVal)
    })
    )

  }

Spark实训目标 spark实训总结_spark_16

 类比  yarn VS  spark

Spark实训目标 spark实训总结_spark_17

Spark实训目标 spark实训总结_big data_18

 补充 :什么时候用伴生类和伴生对象

在java中如果方法和属性是成员的就写在伴生类中

java中如果是静态属性和静态方法就写到伴生对象中,因为伴生对象可以通过类名直接访问;

补充:Thread.sleep 和 wait()的区别

public static void main(String[] args) throws Exception {

        Thread t1 = new Thread();
        Thread t2 = new Thread();

        t1.start();
        t2.start();

        // sleep方法和wait方法的本质区别:字体不一样
        t1.sleep(1000); // sleep方法是静态的,t1线程不会休眠, main线程休眠
        t2.wait();        // wait方法是成员的,t2线程在等待

    }

sleep方法和wait方法的本质区别:字体不一样
sleep方法是静态的,t1线程不会休眠, main线程休眠
wait方法是成员的,t2线程在等待

进程是一个一个的类

Spark查看当前Spark-shell运行任务情况端口号:4040(计算)

Hadoop YARN任务运行情况查看端口号:8088

Spark实训目标 spark实训总结_spark_19

五:Spark的核心组件

Spark框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构。

Spark实训目标 spark实训总结_Spark实训目标_20

 5.1:Driver(驱动作业开始执行)

驱动程序运行的工具就是驱动,执行Spark任务中的main方法,负责实际代码的执行工作。  (因为对于OS操作系统,并不知道Spark的运行机制,因此,只有装上驱动,才能更加驱动执行spark程序)

将用户程序转化为作业(job)

5.2:Executor(真正的进行计算)

Spark Executor是集群中工作节点(Worker)中的一个JVM进程,负责在 Spark 作业中运行具体任务(Task)

负责运行组成Spark应用的任务,并将结果返回给驱动器进程

RDD 是直接缓存在Executor进程内的;

5.3:Master & Worker(将多个机器的资源融合在一起)

类似于Yarn环境中的RM和NM

5.4:ApplicationMaster

将资源和计算解耦合

Spark实训目标 spark实训总结_Hadoop_21

5.5:核心概念

Executor与Core(核)类比

Executor类似于虚拟机中hadoop102,Hadoop103,Core每台虚拟机对应的核数。

5.6:并行度(多线程的场景下)

Spark实训目标 spark实训总结_Spark实训目标_22

 并行度:并行执行的线程数量。

5.7:有向无环图

拓扑图描述的是一种(功能与功能之间的)关系

Spark实训目标 spark实训总结_Hadoop_23

 5.8:数据结构

数据结构就是一个对象,只是这个对象中有一些属性用来管理数据。

Spark中的三大数据结构:

RDD : 弹性分布式数据集

        累加器:分布式共享只写变量

        广播变量:分布式共享只读变量

六:RDD(spark核心的数据模型)

代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算

  1. 存储的弹性:内存与磁盘的自动切换;
  2. 容错的弹性:数据丢失可以自动恢复
  3. 计算的弹性:计算出错重试机制;
  4. 分布式:数据存储在大数据集群不同节点上
  5. 不可变:RDD封装了计算逻辑,是不可以改变的,想要改变,只能产生新的RDD

将计算单元缩小到更适合并行计算和重复使用

Spark实训目标 spark实训总结_Spark实训目标_24

 RDD中并不是功能的增加,而是功能 的重新组合

Spark实训目标 spark实训总结_spark_25

 6.1:RDD的功能是如何组合的?

java中的IO模拟RDD的功能组合(装饰者模式)

但是IO可以临时存储数据  RDD不可以存储数据

Spark实训目标 spark实训总结_big data_26

RDD就是一个对象,使用装饰者设计模式实现功能的组合;

RDD(是一种数据结构)但是不保留数据,只对数据做处理;

Spark实训目标 spark实训总结_spark_27

 原理明白了,然后要知道各个功能是如何用的

Spark实训目标 spark实训总结_Hadoop_28


6.2:RDD核心配置属性

Spark实训目标 spark实训总结_spark_29

 

Spark实训目标 spark实训总结_Spark实训目标_30