spark
17
README.md
@ -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. 大数据常用文件格式
|
@ -1,2 +0,0 @@
|
||||
hadoop,mapreduce,hadoop
|
||||
spark,spark
|
@ -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>
|
@ -1,4 +1,4 @@
|
||||
package com.heibaiying.spark.rdd
|
||||
package rdd.scala
|
||||
|
||||
import org.apache.spark.{SparkConf, SparkContext}
|
||||
|
@ -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
@ -0,0 +1,97 @@
|
||||
# Spark简介
|
||||
<nav>
|
||||
<a href="#一简介">一、简介</a><br/>
|
||||
<a href="#二特点">二、特点</a><br/>
|
||||
<a href="#三集群架构">三、集群架构</a><br/>
|
||||
<a href="#四核心组件">四、核心组件</a><br/>
|
||||
<a href="#31-Spark--SQL">3.1 Spark SQL</a><br/>
|
||||
<a href="#32-Spark-Streaming">3.2 Spark Streaming</a><br/>
|
||||
<a href="#33-MLlib">3.3 MLlib</a><br/>
|
||||
<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调度程序,查询优化器和物理执行引擎,以实现性能上的保证;
|
||||
|
||||
+ 多语言支持,如Java,Scala,Python,R语言;
|
||||
|
||||
+ Spark提供80多个高级的API,可以轻松构建并行应用程序;
|
||||
|
||||
+ 支持批处理,流处理和复杂的分析;
|
||||
|
||||
+ 丰富的类库支持:包括SQL,DataFrames,MLlib,GraphX和Spark Streaming等库。并且可以在同一个应用程序中无缝地进行组合;
|
||||
|
||||
+ 丰富的部署模式:支持本地模式和自带的集群模式,也支持在Hadoop,Mesos,Kubernetes上运行;
|
||||
|
||||
+ 多数据源支持:支持访问HDFS,Alluxio,Cassandra,HBase,Hive以及数百个其他数据源中的数据。
|
||||
|
||||
<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 Manager,Mesos,YARN) |
|
||||
| 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对结构化数据进行查询;
|
||||
- 支持多种数据源,包括Hive,Avro,Parquet,ORC,JSON和JDBC;
|
||||
- 支持HiveQL语法以及Hive SerDes和UDF,允许你访问现有的Hive仓库;
|
||||
- 支持标准的JDBC和ODBC连接;
|
||||
- 支持优化器,列式存储和代码生成等特性,以提高查询效率。
|
||||
|
||||
### 3.2 Spark Streaming
|
||||
|
||||
Spark Streaming主要用于快速构建可扩展,高吞吐量,高容错的流处理程序。支持从HDFS,Flume,Kafka,Twitter和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提供了一组基本运算符(如: subgraph,joinVertices 和 aggregateMessages)以及优化后的Pregel API。此外,GraphX 还包括越来越多的图形算法和构建器,以简化图形分析任务。
|
||||
|
||||
##
|
246
notes/Spark部署模式与作业提交.md
Normal 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运行应用程序的目录,这个目录中包含日志和暂存空间(default:SPARK_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
|
||||
```
|
||||
|
||||
|
||||
|
@ -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>
|
175
notes/installation/Spark开发环境搭建.md
Normal 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数目相同的工作线程数。
|
||||
|
||||

|
||||
|
||||
采用这种模式创建后,你会进入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>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
##
|
||||
|
BIN
pictures/future-of-spark.png
Normal file
After Width: | Height: | Size: 346 KiB |
BIN
pictures/spark-Standalone-web-ui.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
pictures/spark-pi.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
pictures/spark-shell-local.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
pictures/spark-stack.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
pictures/spark-内存不足.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
pictures/spark-内存不足2.png
Normal file
After Width: | Height: | Size: 19 KiB |