文章目录能力目标
- 能够在Linux下运行Spark程序
- 能够使用Spark shell命令
- 能够在IDEA配置Spark运行环境
- 能够使用IDEA开发WordCount程序
- 前言
- 一、认识Spark架构和原理
- 1.基本概念
- 2.集群运行架构
- 二、启动Spark-Shell
- 1.说明
- 2.运行Spark-Shell读取HDFS文件
- 三、IDEA开发WordCount程序
- 1.创建Maven项目
- 2.添加Spark相关依赖,打包插件
- 3.编写代码,查看结果
前言
点赞+关注+评论=养成好习惯
提示:以下是本篇文章正文内容,下面案例可供参考
名称 | 含义 |
---|---|
Application | Spark上运行的应用。Application中包含一个驱动器进程和集群上的多个执行器进程。 |
Driver Program | 运行main()方法并创建SparkContext的进程 |
Cluster Manager | 用于在集群上申请资源的外部服务(如:独立部署的集群管理器、Mesos或者Yarn) |
Worker Node | 集群上运行应用程序代码的任意一个节点 |
Executor | 在集群工作节点上为某个应用启动的工作进程,该进程负责运行计算任务,并为应用程序存储数据 |
Task | 运行main()方法并创建SparkContext的进程 |
Job | 一个并行计算作业,由一组任务组成,并由Spark的行动算子(如:save、collect)触发启动 |
Stage | 每个Job可划分为更小的Task集合,每组任务被称为Stage |
名称 | 作用 |
---|---|
SparkContext | 掌控了所有Spark的生命活动,统筹全局,除了具体的任务在executor中执行,其他的任务调度、提交、监控、RDD管理 |
Cluster Manager | 负责整个集群的统一资源管理 |
Worker | Worker节点中的Executor是应用执行的主要进程,内部含有多个Task线程以及内存空间 |
步骤1:当一个Spark应用被提交时,根据提交参数创建Driver进程,Driver进程初始化SparkContext对象,由SparkContext负责和Cluster Manager的通信以及资源的申请、任务的分配和监控等。
步骤2:Driver进程向Cluster Manager申请资源,Cluster Manager接收到Application的注册请求后,会使用自己的资源调度算法,在Spark集群的Worker节点上,通知Worker为应用启动多个Executor。
步骤3:Executor创建后,会向Cluster Manager进行资源及状态的反馈,便于Cluster Manager对Executor进行状态监控,如果监控到Executor失败,则会立刻重新创建。
步骤4:Executor会向SparkContext反向注册申请Task。
步骤5:Task Scheduler将Task发送给Worker进程中的Executor运行并提供应用程序代码。
步骤6:当程序执行完毕后写入数据,Driver向Cluster Manager注销申请的资源。
Spark应用在集群上作为独立的进程组来运行,具体运行流程如下所示。
二、启动Spark-Shell 1.说明 在spark/bin目录中,执行下列命令进入Spark-Shell交互环境 bin/spark-shell --master–master”表示指定当前连接的Master节点
用于指定Spark的运行模式
可取的详细值如下所示:
参数 | 相关说明 |
---|---|
local | 使用一个Worker线程本地化运行Spark |
local[*] | 本地运行Spark,工作线程数量与本机CPU逻辑核心数量相同 |
local[N] | 使用N个Worker线程本地化运行Spark |
spark://host:port | Standalone模式下,连接到指定的Spark集群,默认端口7077 |
yarn-client | 以客户端模式连接Yarn集群,集群位置可在HADOOP_CONF_DIR环境变量中配置 |
yarn-cluster | 以集群模式连接Yarn集群,集群位置可在HADOOP_CONF_DIR 环境变量中配置 |
mesos://host:port | 连接到指定的Mesos集群。默认接口是5050 |
直接在本地启动交互式spark命令行
[root@hadoop spark]# bin/spark-shell
使用一个Worker线程本地化运行Spark
[root@hadoop spark]# bin/spark-shell --master local
Standalone模式下,连接到指定的Spark集群,默认端口7077
[root@hadoop spark]# bin/spark-shell --master spark://hadoop:7077
2.运行Spark-Shell读取HDFS文件
(1)整合spark与HDFS
确定spark-env.sh添加了下面参数
export HADOOP_CONF_DIR=/opt/hadoop-2.7.1/etc/hadoop
(2)启动Hadoop、Spark服务
(3)启动Spark-Shell编写程序
[root@hadoop spark]# bin/spark-shell --master local
运行读取hdfs文件并统计单词个数的命令。
Spark-Shell本身就是一个Driver,它会初始化一个SparkContext对象为sc
(4)退出Spark-Shell客户端
scala> :quit
三、IDEA开发WordCount程序
本地模式执行Spark程序
1.创建Maven项目创建一个名为“spark_chapter02”的Maven项目,然后在main和test目录下分别创建一个名称为scala的文件夹。
设置依赖的版本号
添加了Scala、Hadoop和Spark相关的依赖,pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Maven</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<scala.version>2.11.8</scala.version>
<hadoop.version>2.7.1</hadoop.version>
<spark.version>2.2.0</spark.version>
</properties>
<!--scala-->
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<!--spark-->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<!--Hadoop-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
</dependencies>
</project>
3.编写代码,查看结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)