Spark基础概论

Spark基础概论

  1. Spark定义

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

  2. Spark的内置模块

    1. SparkSQL 结构化数据查询语句

    2. SparkStreaming 实时计算框架

    3. Spark Milb 机器学习

    4. Spark GraghX 图计算

    5. Spark core spark的核心引擎

      Spark Core: 实现了 Spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。 Spark Core 中还包含了对弹性分布式数据集(Resilient Distributed DataSet,简称 RDD)的 API 定义。
      Spark SQL: 是Spark用来操作结构化数据的程序包。通过Spark SQL,我们可以使用 SQL或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据。 Spark SQL 支持多种数据源,比如 Hive
      表、 Parquet 以及 JSON 等。
      Spark Streaming: 是 Spark 提供的对实时数据进行流式计算的组件。提供了用来操作数据流的 API,并且与 Spark Core 中的 RDD API 高度对应。
      Spark MLlib: 提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。
      集群管理器: Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。为了实现这样的要求,同时获得最大灵活性, Spark 支持在各种集群管理器(Cluster Manager)上运行,包括 Hadoop YARN、 Apache Mesos,以及 Spark 自带的一个简易调度 器,
      叫作独立调度器。

  3. 特点

    1)快: 与Hadoop的MapReduce相比, Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。 Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。计算的中间结果是存在于内存中的。
    2)易用: Spark支持Java、 Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的Shell,可以非常方便地在这些Shell中使用Spark集群来验证解决问题的方法。
    3)通用: Spark提供了统一的解决方案。 Spark可以用于批处理、交互式查询( Spark SQL)、实时流处理( Spark Streaming)、机器学习( Spark MLlib)和图计算( GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。减少了开发和维护的人力成本和部署平台的物力成本。
    4)兼容性: Spark可以非常方便地与其他的开源产品进行融合。比如, Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDFS、 HBase等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。

  4. 重要角色

    1. Driver(驱动器)

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

      ​ 1)把用户程序转为作业( JOB)
      ​ 2)跟踪 Executor 的运行状况
      ​ 3)为执行器节点调度任务
      ​ 4) UI 展示应用运行状况

    2. Executor(执行器)

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

      ​ 1) 负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程;
      ​ 2) 通过自身的块管理器( Block Manager)为用户程序中要求缓存的 RDD 提供内存式
      存储。 RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加
      速运算

  5. 安装使用

    上传解压安装包----直接运行bin下的Spark-submit脚本文件

    1. 官方求pi的案例:

    bin/spark-submit
    –class org.apache.spark.examples.SparkPi
    –executor-memory 1G
    –total-executor-cores 2
    ./examples/jars/spark-examples_2.11-2.4.4.jar
    100

​ 2. 基本语法:

​ bin/spark-submit \

–class
–master
–deploy-mode
–conf =
… # other options

[application-arguments]

  1. 参数说明

    –master 指定 Master 的地址,默认为 Local

    –class: 你的应用的启动类 (如 org.apache.spark.examples.SparkPi)

    –deploy-mode: 是否发布你的驱动到 worker 节点(cluster) 或者作为一个本地客户端
    (client) (default: client)*

    –conf: 任意的 Spark 配置属性, 格式 key=value. 如果值包含空格,可以加引号
    “key=value”

    application-jar: 打包好的应用 jar,包含依赖. 这个 URL 在集群中全局可见。 比如 hdfs://
    共享存储系统, 如果是 file:// path, 那么所有的节点的 path 都包含同样的 jar
    application-arguments: 传给 main()方法的参数
    –executor-memory 1G 指定每个 executor 可用内存为 1G
    –total-executor-cores 2 指定每个 executor 使用的 cup 核数为 2 个

  2. 官方WorkCount案例分析

    首先客户端Client进行任务提交----->Driver进行运行(初始化sc、任务划分、任务调度)---->向资源管理器(Yern)注册运用程序---->yern进行启动Executor----->执行器(Exector)启动之后(进行执行任务、进行一些列RDD算子操作、action提交任务)—>Exector执行过程中会向Driver进行反向注册,报告给Driver自己的任务执行情况。

  3. Spark的运行模式目前国内主要有三种

    Local 本地模式 只需要安装一台机器

    Standalone 3 需要进行Master和Worker的进程

    Yarn‘ 1 需要启动集群HDFS、Yarn

  4. 案例实操

    Spark Shell 仅在测试和验证我们的程序时使用的较多,在生产环境中,通常会在 IDEA中编制程序,然后打成 jar 包,然后提交到集群,最常用的是创建一个 Maven 项目,利用Maven 来管理 jar 包的依赖。

    编写WordCount程序

    1. 创建Maven项目、导入依赖、打包环境
    <dependency>
    	<groupId>org.apache.spark</groupId>
    	<artifactId>spark-core_2.11</artifactId>
    	<version>2.4.4</version>
    </dependency>
    <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>
    
    2. 编写代码
    package com.ityouxin
    import org.apache.spark.{SparkConf, SparkContext}
    object WordCount{
    def main(args: Array[String]): Unit = {
    	//1.创建 SparkConf 并设置 App 名称
    	val conf = new SparkConf().setAppName("WC")
    	//2.创建 SparkContext,该对象是提交 Spark App 的入口
    	val sc = new SparkContext(conf)
    	//3.使用 sc 创建 RDD 并执行相应的 transformation 和 action
    	sc.textFile(args(0)).flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_, 1).sortBy(_._2,false).saveAsTextFile(args(1))
    	//4.关闭连接
    	sc.stop()
    	}
    }
    3. 打包到集群上运行
    bin/spark-submit \
    --class WordCount \
    --master spark://hadoop102:7077 \
    WordCount.jar \
    /word.txt \
    /out
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值