spark基础

spark基础


前言

Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。 Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。

章一、spark基础概念

1.1什么是spark

定义:

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

1.2 spark的内置模块

在这里插入图片描述
spark core:实现了spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。spark还对弹性分布式数据集(Resilient Distributed DataSet)即RDD 的定义
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 自带的一个简易调度器,叫作独立调度器

1.3spark的特点

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的强大处理能力。

章二、spark运行模式

2.1提交流程

在这里插入图片描述

重要角色:
Driver(驱动器)

Spark 的驱动器是执行开发程序中的 main 方法的进程。它负责开发人员编写的用来创
建 SparkContext、创建 RDD,以及进行 RDD 的转化操作和行动操作代码的执行。如果你
是用 spark shell,那么当你启动 Spark shell 的时候,系统后台自启了一个 Spark 驱动器程
序,就是在 Spark shell 中预加载的一个叫作 sc 的 SparkContext 对象。如果驱动器程序终
止,那么 Spark 应用也就结束了。主要负责:
1)把用户程序转为任务
2)跟踪 Executor 的运行状况
3)为执行器节点调度任务
4)UI 展示应用运行状况

Executor(执行器)

Spark Executor 是一个工作进程,负责在 Spark 作业中运行任务,任务间相互独立。
Spark 应用启动时,Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周
期而存在。如果有 Executor 节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出
错节点上的任务调度到其他 Executor 节点上继续运行。主要负责:
1)负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程;
2)通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存式
存储。RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加
速运算。

2.2数据流程 (以wordCount为例)

textFile(“input”):读取本地文件 input 文件夹数据;
flatMap(.split(" ")):压平操作,按照空格分割符将一行数据映射成一个个单词;
map((
,1)):对每一个元素操作,将单词映射为元组;
reduceByKey(+):按照 key 将值进行聚合,相加;
collect:将数据收集到 Driver 端展示。

2.3 集群模式

Standalone(独立集群) 模式

在这里插入图片描述

HA高可用配置

在这里插入图片描述

Yarn 模式

在这里插入图片描述

几种模式对比

在这里插入图片描述

案例

package com.lyinl
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()
 } }
maven 依赖
<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>
<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-assembly-plugin</artifactId>
 <version>3.0.0</version>
 <configuration>
 <archive>
 <manifest>
 <mainClass>WordCount</mainClass>
 </manifest>
 </archive>
 <descriptorRefs>
 <descriptorRef>jar-withdependencies</descriptorRef>
 </descriptorRefs>
 </configuration>
 <executions>
 <execution>
 <id>make-assembly</id>
 <phase>package</phase>
 <goals>
 <goal>single</goal>
 </goals>
 </execution>
 </executions>
 </plugin>
打包到集群
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、付费专栏及课程。

余额充值