文章目录能力目标
- 能够在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.编写代码,查看结果
前言
点赞+关注+评论=养成好习惯
提示:以下是本篇文章正文内容,下面案例可供参考
一、认识Spark架构和原理 1.基本概念| 名称 | 含义 |
|---|---|
| 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:70772.运行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如下:
3.编写代码,查看结果4.0.0 org.example Maven 1.0-SNAPSHOT 2.11.8 2.7.1 2.2.0 org.scala-lang scala-library ${scala.version} org.apache.spark spark-core_2.11 ${spark.version} org.apache.hadoop hadoop-client ${hadoop.version}



