This commit is contained in:
罗祥 2019-05-19 21:31:36 +08:00
parent 10b5ad9d09
commit 3f29f6a9cc
16 changed files with 532 additions and 176 deletions

View File

@ -72,13 +72,12 @@
**Spark Core :**
1. Spark简介
2. [Spark单机版本环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Spark%E5%8D%95%E6%9C%BA%E7%89%88%E6%9C%AC%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA.md)
3. Spark命令行的基本使用
1. [Spark简介](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spark简介.md)
2. [Spark开发环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Spark开发环境搭建.md)
4. [弹性式数据集RDD](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spark-RDD.md)
5. [RDD常用算子详解](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spark-Transformation和Action.md)
6. Spark运行模式
7. [Spark累加器与广播变量](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spark累加器与广播变量.md)
5. [Spark运行模式与作业提交](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spark部署模式与作业提交.md)
6. [Spark累加器与广播变量](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spark累加器与广播变量.md)
**Spark SQL :**
@ -172,4 +171,10 @@ TODO
12. [类型参数](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala类型参数.md)
13. [隐式转换和隐式参数](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala隐式转换和隐式参数.md)
## 十三、公共基础知识
1. 大数据应用打包方式
2. 大数据常用文件格式

View File

@ -1,2 +0,0 @@
hadoop,mapreduce,hadoop
spark,spark

View File

@ -1,46 +0,0 @@
<?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>com.heibaiying</groupId>
<artifactId>spark-base</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<scala.version>2.12.8</scala.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.paranamer</groupId>
<artifactId>paranamer</artifactId>
<version>2.8</version>
</dependency>
</dependencies>
</project>

View File

@ -1,4 +1,4 @@
package com.heibaiying.spark.rdd
package rdd.scala
import org.apache.spark.{SparkConf, SparkContext}

View File

@ -75,4 +75,5 @@ storm和Flink都是真正意义上的流计算框架但 Spark Streaming 只
## 参考资料
[Spark Streaming Programming Guide](https://spark.apache.org/docs/latest/streaming-programming-guide.html)
1. [Spark Streaming Programming Guide](https://spark.apache.org/docs/latest/streaming-programming-guide.html)
2. [What is stream processing?](https://www.ververica.com/what-is-stream-processing)

97
notes/Spark简介.md Normal file
View File

@ -0,0 +1,97 @@
# Spark简介
<nav>
<a href="#一简介">一、简介</a><br/>
<a href="#二特点">二、特点</a><br/>
<a href="#三集群架构">三、集群架构</a><br/>
<a href="#四核心组件">四、核心组件</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#31-Spark--SQL">3.1 Spark SQL</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#32-Spark-Streaming">3.2 Spark Streaming</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#33-MLlib">3.3 MLlib</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#34-Graphx">3.4 Graphx</a><br/>
<a href="#"> </a><br/>
</nav>
## 一、简介
Spark于2009年诞生于加州大学伯克利分校AMPLab。2013年该项目被捐赠给Apache软件基金会。2014年2月成为Apache的顶级项目。相对于MapReduce上的批处理计算Spark可以带来上百倍的性能提升因此它成为继MapReduce之后最为广泛使用的计算框架。
## 二、特点
+ Apache Spark使用最先进的DAG调度程序查询优化器和物理执行引擎以实现性能上的保证
+ 多语言支持如JavaScalaPythonR语言;
+ Spark提供80多个高级的API可以轻松构建并行应用程序
+ 支持批处理,流处理和复杂的分析;
+ 丰富的类库支持包括SQLDataFramesMLlibGraphX和Spark Streaming等库。并且可以在同一个应用程序中无缝地进行组合
+ 丰富的部署模式支持本地模式和自带的集群模式也支持在HadoopMesosKubernetes上运行
+ 多数据源支持支持访问HDFSAlluxioCassandraHBaseHive以及数百个其他数据源中的数据。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/future-of-spark.png"/> </div>
## 三、集群架构
| Term术语 | Meaning含义 |
| --------------- | ------------------------------------------------------------ |
| Application | Spark应用程序由集群上的一个Driver节点和多个Executor节点组成。 |
| Driver program | 主运用程序,该进程运行应用的 main() 方法并且创建了 SparkContext |
| Cluster manager | 集群资源管理器例如Standlone ManagerMesosYARN |
| Worker node | 执行计算任务的工作节点 |
| Executor | 位于工作节点上的应用进程,负责执行计算任务并且将输出数据保存到内存或者磁盘中 |
| Task | 被发送到Executor中的工作单元 |
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-集群模式.png"/> </div>
**执行过程**
1. 用户程序创建SparkContext后其会连接到集群资源管理器集群资源管理器会为计算程序分配计算资源并启动Executor
2. Dirver将计算程序划分为不同的执行阶段和多个Task之后将Task发送给Executor
3. Executor负责执行Task并将执行状态汇报给Driver同时也会将当前节点资源的使用情况汇报给集群资源管理器。
## 四、核心组件
Spark基于Spark Core扩展了四个核心组件分别用于满足不同领域的计算需求。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-stack.png"/> </div>
### 3.1 Spark SQL
Spark SQL主要用于结构化数据的处理。其具有以下特点
- 能够将SQL查询与Spark程序无缝混合允许您使用SQL或DataFrame API对结构化数据进行查询
- 支持多种数据源包括HiveAvroParquetORCJSON和JDBC
- 支持HiveQL语法以及Hive SerDes和UDF允许你访问现有的Hive仓库
- 支持标准的JDBC和ODBC连接
- 支持优化器,列式存储和代码生成等特性,以提高查询效率。
### 3.2 Spark Streaming
Spark Streaming主要用于快速构建可扩展高吞吐量高容错的流处理程序。支持从HDFSFlumeKafkaTwitter和ZeroMQ读取数据并进行处理。
<div align="center"> <img width="600px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-streaming-arch.png"/> </div>
Spark Streaming的本质是微批处理它将数据流进行极小粒度的拆分拆分为多个批处理使得其能够得到接近于流处理的效果。
<div align="center"> <img width="600px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-streaming-flow.png"/> </div>
### 3.3 MLlib
MLlib是Spark的机器学习库。其设计目标是使得机器学习变得简单且可扩展。它提供了以下工具
+ 常见的机器学习算法:如分类,回归,聚类和协同过滤;
+ 特征化:特征提取,转换,降维和选择;
+ 管道用于构建评估和调整ML管道的工具
+ 持久性:保存和加载算法,模型,管道数据;
+ 实用工具:线性代数,统计,数据处理等。
### 3.4 Graphx
GraphX是Spark中用于图形计算和图形并行计算的新组件。在高层次上GraphX通过引入一个新的图形抽象来扩展 RDD一种具有附加到每个顶点和边缘的属性的定向多重图形。为了支持图计算GraphX提供了一组基本运算符 subgraphjoinVertices 和 aggregateMessages以及优化后的Pregel API。此外GraphX 还包括越来越多的图形算法和构建器,以简化图形分析任务。
##

View File

@ -0,0 +1,246 @@
# Spark部署模式与作业提交
<nav>
<a href="#一作业提交">一、作业提交</a><br/>
<a href="#二Local模式">二、Local模式</a><br/>
<a href="#三Standalone模式">三、Standalone模式</a><br/>
<a href="#三Spark-on-Yarn模式">三、Spark on Yarn模式</a><br/>
</nav>
## 一、作业提交
### 1.1 spark-submit
Spark所有模式均通过使用` spark-submit`提交作业,其命令格式如下:
```shell
./bin/spark-submit \
--class <main-class> \ # 应用程序主入口类
--master <master-url> \ # 集群的Master Url
--deploy-mode <deploy-mode> \ # 部署模式
--conf <key>=<value> \ # 可选配置
... # other options
<application-jar> \ # Jar包路径
[application-arguments] #传递给主入口类的参数
```
需要注意的是:在集群环境下,`application-jar`必须能被集群中所有节点都能访问可以是HDFS上的路径也可以是本地文件系统路径如果是本地文件系统路径则要求集群中每一个节点上的相同路径都存在该Jar包。
### 1.2 deploy-mode
deploy-mode有`cluster``client`两个可选参数,默认为`client`。这里以Spark On Yarn模式对两者的区别进行说明
+ 在cluster模式下Spark Drvier在应用程序Master进程内运行该进程由群集上的YARN管理提交作业的客户端可以在启动应用程序后关闭
+ 在client模式下Spark Drvier在提交作业的客户端进程中运行应用程序Master服务器仅用于从YARN请求资源。
### 1.3 master-url
master-url的所有可选参数如下表所示
| Master URL | Meaning |
| --------------------------------- | ------------------------------------------------------------ |
| `local` | 使用一个线程本地运行Spark |
| `local[K]` | 使用 K 个 worker 线程本地运行 Spark |
| `local[K,F]` | 使用 K 个 worker 线程本地运行 , 第二个参数为Task的失败重试次数 |
| `local[*]` | 使用与CPU核心数一样的线程数在本地运行Spark |
| `local[*,F]` | 使用与CPU核心数一样的线程数在本地运行Spark<br/>第二个参数为Task的失败重试次数 |
| `spark://HOST:PORT` | 连接至指定的standalone 集群的 master节点。端口号默认是 7077。 |
| `spark://HOST1:PORT1,HOST2:PORT2` | 如果standalone集群采用Zookeeper实现高可用则必须包含由zookeeper设置的所有master主机地址。 |
| `mesos://HOST:PORT` | 连接至给定的Mesos集群。端口默认是 5050。对于使用了 ZooKeeper 的 Mesos cluster 来说,使用 `mesos://zk://...`来指定地址,使用 `--deploy-mode cluster`模式来提交。 |
| `yarn` | 连接至一个YARN 集群,集群由配置的 `HADOOP_CONF_DIR` 或者 `YARN_CONF_DIR` 来决定。使用`--deploy-mode`参数来配置`client``cluster` 模式。 |
接下来主要介绍三种常用部署模式的配置及作业的提交。
## 二、Local模式
Local模式下提交作业最为简单不需要进行任何配置提交命令如下
```shell
# 本地模式提交应用
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100 # 传给SparkPi的参数
```
这里的`spark-examples_2.11-2.4.0.jar`在Spark安装包里默认就有是Spark官方提供的测试用例`SparkPi`用于计算Pi值执行成功后可以在输出中看到计算出的Pi值。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-pi.png"/> </div>
## 三、Standalone模式
Standalone是Spark提供的一种内置的集群模式采用内置的资源管理器进行管理。
下面按照如图所示演示1个Mater和2个Worker节点的集群配置这里使用两台主机进行演示
+ hadoop001 由于只有两台主机所以hadoop001既是Master节点也是Worker节点;
+ hadoop002 Worker节点。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-集群模式.png"/> </div>
### 3.1 环境配置
首先需要保证Spark已经解压在两台主机的相同路径上。然后进入hadoop001的`${SPARK_HOME}/conf/`目录下,拷贝配置样本并进行相关配置:
```shell
# cp spark-env.sh.template spark-env.sh
```
`spark-env.sh`中配置JDK的目录完成后将该配置使用scp命令分发到hadoop002上
```shell
# JDK安装位置
JAVA_HOME=/usr/java/jdk1.8.0_201
```
### 3.2 集群配置
`${SPARK_HOME}/conf/`目录下,拷贝集群配置样本并进行相关配置:
```
# cp slaves.template slaves
```
指定所有Worker节点的主机名
```shell
# A Spark Worker will be started on each of the machines listed below.
hadoop001
hadoop002
```
这里需要注意以下三点:
+ 主机名与IP地址的映射必须在`/etc/hosts`文件中已经配置否则就直接使用IP地址
+ 每个主机名必须独占一行;
+ Spark的Master主机是通过ssh访问所有的Worker节点所以需要预先配置免密登录。或者通过设置环境变量`SPARK_SSH_FOREGROUND`并为每个Worker节点指定密码。
### 3.3 启动
使用`start-all.sh`代表启动Master和所有Worker服务。
```shell
./sbin/start-master.sh
```
访问8080端口查看Spark的Web-UI界面,,此时应该显示有两个有效的工作节点:
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-Standalone-web-ui.png"/> </div>
### 3.4 提交作业
```shell
# 以client模式提交到standalone集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop001:7077 \
--executor-memory 2G \
--total-executor-cores 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100
# 以cluster模式提交到standalone集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://207.184.161.138:7077 \
--deploy-mode cluster \
--supervise \ # 配置此参数代表开启监督如果主应用程序异常退出则自动重启Driver
--executor-memory 2G \
--total-executor-cores 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100
```
### 3.5 可选配置
在虚拟机上提交作业时经常出现一个的问题是作业无法申请到足够的资源:
```properties
Initial job has not accepted any resources;
check your cluster UI to ensure that workers are registered and have sufficient resources
```
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-内存不足2.png"/> </div>
这时候可以查看Web UI我这里是内存空间不足提交命令中要求作业的`executor-memory`是2G但是实际的工作节点的`Memory`只有1G这时候你可以修改`--executor-memory`,也可以修改 Woker 的`Memory`其默认值为主机所有可用内存值减去1G。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-内存不足.png"/> </div>
关于Master和Woker节点的所有可选配置如下可以在`spark-env.sh`进行对应的配置:
| Environment Variable环境变量 | Meaning含义 |
| -------------------------------- | ------------------------------------------------------------ |
| `SPARK_MASTER_HOST` | master 节点地址 |
| `SPARK_MASTER_PORT` | master 节点地址端口默认7077 |
| `SPARK_MASTER_WEBUI_PORT` | master 的 web UI 的端口默认8080 |
| `SPARK_MASTER_OPTS` | 仅用于 master 的配置属性,格式是 "-Dx=y"默认none,所有属性可以参考官方文档:[spark-standalone-mode](https://spark.apache.org/docs/latest/spark-standalone.html#spark-standalone-mode) |
| `SPARK_LOCAL_DIRS` | spark 的临时存储的目录用于暂存map的输出和持久化存储RDDs。多个目录用逗号分隔 |
| `SPARK_WORKER_CORES` | spark worker节点可以使用CPU Cores的数量。默认全部可用 |
| `SPARK_WORKER_MEMORY` | spark worker节点可以使用的内存数量默认全部的内存减去1GB |
| `SPARK_WORKER_PORT` | spark worker节点的端口默认 random随机 |
| `SPARK_WORKER_WEBUI_PORT` | worker 的 web UI 的 Port端口默认8081 |
| `SPARK_WORKER_DIR` | worker运行应用程序的目录这个目录中包含日志和暂存空间defaultSPARK_HOME/work |
| `SPARK_WORKER_OPTS` | 仅用于 worker 的配置属性,格式是 "-Dx=y"默认none。所有属性可以参考官方文档[spark-standalone-mode](https://spark.apache.org/docs/latest/spark-standalone.html#spark-standalone-mode) |
| `SPARK_DAEMON_MEMORY` | 分配给 spark master 和 worker 守护进程的内存。(默认: 1G |
| `SPARK_DAEMON_JAVA_OPTS` | spark master 和 worker 守护进程的 JVM 选项,格式是 "-Dx=y"默认none |
| `SPARK_PUBLIC_DNS` | spark master 和 worker 的公开 DNS 名称。默认none |
## 三、Spark on Yarn模式
Spark支持将作业提交到Yarn上运行此时不需要启动Master节点也不需要启动Worker节点。
### 3.1 配置
`spark-env.sh`中配置hadoop的配置目录的位置可以使用`YARN_CONF_DIR``HADOOP_CONF_DIR`进行指定:
```properties
YARN_CONF_DIR=/usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop
# JDK安装位置
JAVA_HOME=/usr/java/jdk1.8.0_201
```
### 3.2 启动
必须要保证Hadoop已经启动这里包括Yarn和HDFS都需要启动因为在计算过程中Spark会使用HDFS存储临时文件如果HDFS没有启动则会抛出异常。
```shell
# start-yarn.sh
# start-dfs.sh
```
### 3.3 提交应用
```shell
# 以client模式提交到yarn集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--executor-memory 2G \
--num-executors 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100
# 以cluster模式提交到yarn集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--executor-memory 2G \
--num-executors 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100
```

View File

@ -1,120 +0,0 @@
# Spark单机版本环境搭建
>**系统环境**centos 7.6
>
### 1. Spark安装包下载
官网下载地址http://spark.apache.org/downloads.html
因为Spark常常和Hadoop联合使用所以下载时候需要选择Spark版本和对应的Hadoop版本后再下载
<div align="center"> <img width="600px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-download.png"/> </div>
### 2. 解压安装包
```shell
# tar -zxvf spark-2.2.3-bin-hadoop2.6.tgz
```
### 3. 配置环境变量
```shell
# vim /etc/profile
```
添加环境变量:
```shell
export SPARK_HOME=/usr/app/spark-2.2.3-bin-hadoop2.6
export PATH=${SPARK_HOME}/bin:$PATH
```
使得配置的环境变量生效:
```shell
# source /etc/profile
```
### 4. Standalone模式启动Spark
进入`${SPARK_HOME}/conf/`目录下,拷贝配置样本并进行相关配置:
```shell
# cp spark-env.sh.template spark-env.sh
```
`spark-env.sh`中增加如下配置:
```shell
# 主机节点地址
SPARK_MASTER_HOST=hadoop001
# Worker节点的最大并发task数
SPARK_WORKER_CORES=2
# Worker节点使用的最大内存数
SPARK_WORKER_MEMORY=1g
# 每台机器启动Worker实例的数量
SPARK_WORKER_INSTANCES=1
# JDK安装位置
JAVA_HOME=/usr/java/jdk1.8.0_201
```
进入`${SPARK_HOME}/sbin/`目录下,启动服务:
```shell
# ./start-all.sh
```
### 5. 验证启动是否成功
访问8080端口查看Spark的Web-UI界面
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-web-ui.png"/> </div>
## 附一个简单的词频统计例子感受spark的魅力
#### 1. 准备一个词频统计的文件样本wc.txt,内容如下:
```txt
hadoop,spark,hadoop
spark,flink,flink,spark
hadoop,hadoop
```
#### 2. 指定spark master 节点地址启动spark-shell
```shell
# spark-shell --master spark://hadoop001:7077
```
#### 3. 在scala交互式命令行中执行如下命名
```scala
val file = spark.sparkContext.textFile("file:///usr/app/wc.txt")
val wordCounts = file.flatMap(line => line.split(",")).map((word => (word, 1))).reduceByKey(_ + _)
wordCounts.collect
```
执行过程如下:
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-shell.png"/> </div>
通过spark shell web-ui可以查看作业的执行情况访问端口为4040
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-shell-web-ui.png"/> </div>

View File

@ -0,0 +1,175 @@
# Spark开发环境搭建
## 一、安装Spark
### 1.1 下载安装包
官网下载地址http://spark.apache.org/downloads.html
因为Spark常常和Hadoop联合使用所以下载时候需要选择Spark版本和对应的Hadoop版本后再下载
<div align="center"> <img width="600px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-download.png"/> </div>
### 1.2 解压安装包
```shell
# tar -zxvf spark-2.2.3-bin-hadoop2.6.tgz
```
### 1.3 配置环境变量
```shell
# vim /etc/profile
```
添加环境变量:
```shell
export SPARK_HOME=/usr/app/spark-2.2.3-bin-hadoop2.6
export PATH=${SPARK_HOME}/bin:$PATH
```
使得配置的环境变量生效:
```shell
# source /etc/profile
```
### 1.4 Local模式
Local 模式是最简单的一种运行方式,它采用单节点多线程(cpu)方式运行,不用部署,开箱即用,适合日常测试开发。
```shell
# 启动命令
spark-shell --master local[2]
```
- local只启动一个工作线程
- local[k]启动k个工作线程
- local[*]启动跟cpu数目相同的工作线程数。
![spark-shell-local](D:\BigData-Notes\pictures\spark-shell-local.png)
采用这种模式创建后你会进入Scala交互式命令行并且程序已经自动创建了SparkContext即Spark的应用上下文等效于执行了下面的Scala代码
```scala
val conf = new SparkConf().setAppName("Spark shell").setMaster("local[2]")
val sc = new SparkContext(conf)
```
同时从输出的日志也可以看出来Local模式还提供了对应的Web UI界面端口为4040。
## 二、词频统计案例
安装完成后可以先做一个简单的词频统计例子感受spark的魅力。准备一个词频统计的文件样本wc.txt,内容如下:
```txt
hadoop,spark,hadoop
spark,flink,flink,spark
hadoop,hadoop
```
在scala交互式命令行中执行如下Scala语句
```scala
val file = spark.sparkContext.textFile("file:///usr/app/wc.txt")
val wordCounts = file.flatMap(line => line.split(",")).map((word => (word, 1))).reduceByKey(_ + _)
wordCounts.collect
```
执行过程如下:
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-shell.png"/> </div>
可以通过spark shell web-ui可以查看作业的执行情况访问端口为4040
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-shell-web-ui.png"/> </div>
## 三、Scala开发环境配置
Spark是基于Scala语言进行开发的分别提供了基于Scala、Java、Python语言的API如果你想使用Scala语言进行开发则需要搭建Scala语言的开发环境。
### 2.1 前置条件
首先Scala的运行依赖于Java环境目前最新的Scala 2.12.x要求你必须安装JDK 1.8或以上版本。
### 2.2 安装Scala插件
首先需要安装Scala插件使得IDEA支持scala语言的开发。打开 IDEA依次点击**File** => **settings**=> **plugins**选项卡搜索Scala插件(如下图)。找到插件后进行安装并重启IDEA使得安装生效。
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/idea-scala-plugin.png"/> </div>
### 2.3 创建Scala项目
在IDEA中依次点击 **File** => **New** => **Project**选项卡然后选择创建Scala—IDEA工程
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/idea-newproject-scala.png"/> </div>
### 2.4 下载Scala SDK
#### 1.方式一
此时看到Scala SDK为空依次点击`Create` => `Download` ,选择所需的版本后,点击`OK`按钮进行下载,下载完成点击`Finish`进入工程。
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/idea-scala-select.png"/> </div>
#### 2.方式二
方式一是Scala官方安装指南里使用的方式但下载速度可能会比较慢且这种安装下并没有直接提供Scala命令行工具。所以个人推荐使用方式二进行安装。
> 官方下载地址https://www.scala-lang.org/download/
这里我的系统是Windows下载msi版本的安装包后一直点击下一步安装即可安装完成后会自动配置好环境变量。
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/scala-other-resources.png"/> </div>
由于安装时已经自动配置好环境变量所以IDEA会自动选择对应版本的SDK。
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/idea-scala-2.1.8.png"/> </div>
### 2.5 创建Hello World
在工程 `src`目录上右击**New** => **Scala class**.创建`Hello.scala`。输入代码如下,完成后点击运行按钮,成功运行则代表搭建成功。
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/scala-hello-world.png"/> </div>
### 2.6 切换Scala版本
在日常的开发中由于对应Spark的版本切换可能导致需要切换Scala的版本则可以在`Project Structures`中的`Global Libraries`选项卡中进行切换。
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/idea-scala-change.png"/> </div>
##

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
pictures/spark-pi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
pictures/spark-stack.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB