美文网首页
1.Spark基础学习一(Spark概念)

1.Spark基础学习一(Spark概念)

作者: 做个合格的大厂程序员 | 来源:发表于2020-09-01 09:10 被阅读0次

什么是Spark

Spark是一种基于内存的快速的,通用的,可扩展的大数据分析引擎

Spark内存模块

Snipaste_2020-08-18_20-33-17

Spark特点

:与Hadoop和MapReduce响度,Spark基于内存运算要快100倍以上,基于硬盘的运算要快10倍以上,Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流,计算的中间结果是存在内存中的

易用: Spark支持Java,Python和Scala的API,还支持超过80中的高级算法,使用户可以快速构建不同的应用,而且Spark支持交互式的Python和Scala的Shell,可以非常方便的再这些Shell中使用Spark集群来验证解决问题。

通用: Spark提供了同意的解决方案,Spark可以用于处理,交互式查询,实时处理,机器学习,图计算,这些不同类型的处理都可以在同一个应用中无缝使用,减少开发和维护的人力成本。

兼容: Spark可以非常方便的与其他开元产品进行融合,比如,Spark可以使用Hadoop的yarn和Apache Mesos作为它的资源管理器和调度器,并且可以处理所有的Hadoop支持数据。包括HDFS,Hbase等。

Spark的安装地址

1.官网地址

http://spark.apache.org/

2.文档查看地址

https://spark.apache.org/docs/2.1.1/

3.下载地址

https://spark.apache.org/downloads.html

角色

Driver(驱动器)

​ Spark的驱动器是执行开发程序中的main方法的进程。它负责开发人员编写的用来创建SparkContext、创建RDD,以及进行RDD的转化操作和行动操作代码的执行。如果你是用spark shell,那么当你启动Spark shell的时候,系统后台自启了一个Spark驱动器程序,就是在Spark shell中预加载的一个叫作 sc的SparkContext对象。如果驱动器程序终止,那么Spark应用也就结束了。主要负责:

​ 1)把用户程序转为作业(JOB)

​ 2)跟踪Executor的运行状况

​ 3)为执行器节点调度任务

​ 4)UI展示应用运行状况

Executor(执行器)

​ Spark Executor是一个工作进程,负责在 Spark 作业中运行任务,任务间相互独立。Spark 应用启动时,Executor节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有Executor节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他Executor节点上继续运行。主要负责:

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

2)通过自身的块管理器(Block Manager)为用户程序中要求缓存的RDD提供内存式存储。RDD是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

Snipaste_2020-08-18_20-46-52

Yarn模式

Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。

yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出

yarn-cluster:Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)适用于生产环境。

Snipaste_2020-08-19_17-39-17

几种模式的对比

模式 Spark机器安装数 需要启动的进程 所属者
local 1 Spark
Standlone 3 Master及Worker Spark
Yarn 1 Yarn及Hdfs Hadoop

Java编写一个本地的Spark应用

创建一个Maven项目WordCount并导入依赖

<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.1.1</version>
    </dependency>
</dependencies>
<build>
        <finalName>WordCount</finalName>
        <plugins>
<plugin>
                <groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
                <version>3.2.2</version>
                <executions>
                    <execution>
                       <goals>
                          <goal>compile</goal>
                          <goal>testCompile</goal>
                       </goals>
                    </execution>
                 </executions>
            </plugin>
        </plugins>
</build>

用wordCount例子来举证

package com.leon.bigdata.spark

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object WordCount {

  def main(args: Array[String]): Unit = {
    val sparkConfig = new SparkConf().setMaster("local[*]").setAppName("WordCount")
    
    val sc = new SparkContext(sparkConfig)

    val lines: RDD[String] = sc.textFile("./SparkDemo/data")

    val words = lines.flatMap(_.split(" "))

    val wordsMap = words.map((_,1))

    val wordsSum = wordsMap.reduceByKey((_+_))

    val result: Array[(String, Int)] = wordsSum.collect()

    result.foreach(println)
  }
}

相关文章

网友评论

      本文标题:1.Spark基础学习一(Spark概念)

      本文链接:https://www.haomeiwen.com/subject/rwvmsktx.html