优化阅读格式

This commit is contained in:
heibaiying
2019-07-31 17:18:07 +08:00
parent ceb868fe13
commit ca7c99802b
91 changed files with 4059 additions and 4058 deletions

View File

@ -12,49 +12,49 @@
### 1.1 spark-submit
Spark所有模式均使用`spark-submit`命令提交作业,其格式如下:
Spark 所有模式均使用 `spark-submit` 命令提交作业,其格式如下:
```shell
./bin/spark-submit \
--class <main-class> \ # 应用程序主入口类
--master <master-url> \ # 集群的Master Url
--master <master-url> \ # 集群的 Master Url
--deploy-mode <deploy-mode> \ # 部署模式
--conf <key>=<value> \ # 可选配置
... # other options
<application-jar> \ # Jar包路径
<application-jar> \ # Jar 包路径
[application-arguments] #传递给主入口类的参数
```
需要注意的是:在集群环境下,`application-jar`必须能被集群中所有节点都能访问可以是HDFS上的路径也可以是本地文件系统路径如果是本地文件系统路径则要求集群中每一个机器节点上的相同路径都存在该Jar包。
需要注意的是:在集群环境下,`application-jar` 必须能被集群中所有节点都能访问,可以是 HDFS 上的路径;也可以是本地文件系统路径,如果是本地文件系统路径,则要求集群中每一个机器节点上的相同路径都存在该 Jar 包。
### 1.2 deploy-mode
deploy-mode`cluster``client`两个可选参数,默认为`client`。这里以Spark On Yarn模式对两者的区别进行说明
deploy-mode`cluster``client` 两个可选参数,默认为 `client`。这里以 Spark On Yarn 模式对两者的区别进行说明
+ 在cluster模式下Spark Drvier在应用程序的Master进程内运行该进程由群集上的YARN管理提交作业的客户端可以在启动应用程序后关闭
+ 在client模式下Spark Drvier在提交作业的客户端进程中运行Master进程仅用于从YARN请求资源。
+ 在 cluster 模式下Spark Drvier 在应用程序的 Master 进程内运行,该进程由群集上的 YARN 管理,提交作业的客户端可以在启动应用程序后关闭;
+ 在 client 模式下Spark Drvier 在提交作业的客户端进程中运行Master 进程仅用于从 YARN 请求资源。
### 1.3 master-url
master-url的所有可选参数如下表所示
master-url 的所有可选参数如下表所示:
| Master URL | Meaning |
| --------------------------------- | ------------------------------------------------------------ |
| `local` | 使用一个线程本地运行Spark |
| `local` | 使用一个线程本地运行 Spark |
| `local[K]` | 使用 K 个 worker 线程本地运行 Spark |
| `local[K,F]` | 使用 K 个 worker 线程本地运行 , 第二个参数为Task的失败重试次数 |
| `local[*]` | 使用与CPU核心数一样的线程数在本地运行Spark |
| `local[*,F]` | 使用与CPU核心数一样的线程数在本地运行Spark<br/>第二个参数为Task的失败重试次数 |
| `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` 模式。 |
| `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模式下提交作业最为简单不需要进行任何配置提交命令如下
Local 模式下提交作业最为简单,不需要进行任何配置,提交命令如下:
```shell
# 本地模式提交应用
@ -62,10 +62,10 @@ 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的参数
100 # 传给 SparkPi 的参数
```
`spark-examples_2.11-2.4.0.jar`Spark提供的测试用例包`SparkPi`用于计算Pi值执行结果如下
`spark-examples_2.11-2.4.0.jar`Spark 提供的测试用例包,`SparkPi` 用于计算 Pi 值,执行结果如下:
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-pi.png"/> </div>
@ -73,10 +73,10 @@ spark-submit \
## 三、Standalone模式
StandaloneSpark提供的一种内置的集群模式采用内置的资源管理器进行管理。下面按照如图所示演示1个Mater和2个Worker节点的集群配置这里使用两台主机进行演示
StandaloneSpark 提供的一种内置的集群模式,采用内置的资源管理器进行管理。下面按照如图所示演示 1 个 Mater 和 2 个 Worker 节点的集群配置,这里使用两台主机进行演示:
+ hadoop001 由于只有两台主机所以hadoop001既是Master节点也是Worker节点;
+ hadoop002 Worker节点。
+ hadoop001 由于只有两台主机,所以 hadoop001 既是 Master 节点,也是 Worker 节点;
+ hadoop002 Worker 节点。
@ -86,13 +86,13 @@ Standalone是Spark提供的一种内置的集群模式采用内置的资源
### 3.1 环境配置
首先需要保证Spark已经解压在两台主机的相同路径上。然后进入hadoop001`${SPARK_HOME}/conf/`目录下,拷贝配置样本并进行相关配置:
首先需要保证 Spark 已经解压在两台主机的相同路径上。然后进入 hadoop001`${SPARK_HOME}/conf/` 目录下,拷贝配置样本并进行相关配置:
```shell
# cp spark-env.sh.template spark-env.sh
```
`spark-env.sh`中配置JDK的目录完成后将该配置使用scp命令分发到hadoop002上
`spark-env.sh` 中配置 JDK 的目录,完成后将该配置使用 scp 命令分发到 hadoop002 上:
```shell
# JDK安装位置
@ -101,13 +101,13 @@ JAVA_HOME=/usr/java/jdk1.8.0_201
### 3.2 集群配置
`${SPARK_HOME}/conf/`目录下,拷贝集群配置样本并进行相关配置:
`${SPARK_HOME}/conf/` 目录下,拷贝集群配置样本并进行相关配置:
```
# cp slaves.template slaves
```
指定所有Worker节点的主机名
指定所有 Worker 节点的主机名:
```shell
# A Spark Worker will be started on each of the machines listed below.
@ -117,19 +117,19 @@ hadoop002
这里需要注意以下三点:
+ 主机名与IP地址的映射必须在`/etc/hosts`文件中已经配置否则就直接使用IP地址
+ 主机名与 IP 地址的映射必须在 `/etc/hosts` 文件中已经配置,否则就直接使用 IP 地址;
+ 每个主机名必须独占一行;
+ SparkMaster主机是通过SSH访问所有的Worker节点所以需要预先配置免密登录。
+ SparkMaster 主机是通过 SSH 访问所有的 Worker 节点,所以需要预先配置免密登录。
### 3.3 启动
使用`start-all.sh`代表启动Master和所有Worker服务。
使用 `start-all.sh` 代表启动 Master 和所有 Worker 服务。
```shell
./sbin/start-master.sh
```
访问8080端口查看SparkWeb-UI界面,,此时应该显示有两个有效的工作节点:
访问 8080 端口,查看 SparkWeb-UI 界面,,此时应该显示有两个有效的工作节点:
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-Standalone-web-ui.png"/> </div>
@ -150,7 +150,7 @@ spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://207.184.161.138:7077 \
--deploy-mode cluster \
--supervise \ # 配置此参数代表开启监督如果主应用程序异常退出则自动重启Driver
--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 \
@ -170,13 +170,13 @@ check your cluster UI to ensure that workers are registered and have sufficient
<br/>
这时候可以查看Web UI我这里是内存空间不足提交命令中要求作业的`executor-memory`2G但是实际的工作节点的`Memory`只有1G这时候你可以修改`--executor-memory`,也可以修改 Woker 的`Memory`其默认值为主机所有可用内存值减去1G。
这时候可以查看 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>
<br/>
关于MasterWoker节点的所有可选配置如下可以在`spark-env.sh`中进行对应的配置:
关于 MasterWoker 节点的所有可选配置如下,可以在 `spark-env.sh` 中进行对应的配置:
| Environment Variable环境变量 | Meaning含义 |
| -------------------------------- | ------------------------------------------------------------ |
@ -184,12 +184,12 @@ check your cluster UI to ensure that workers are registered and have sufficient
| `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_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_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 |
@ -199,11 +199,11 @@ check your cluster UI to ensure that workers are registered and have sufficient
## 三、Spark on Yarn模式
Spark支持将作业提交到Yarn上运行此时不需要启动Master节点也不需要启动Worker节点。
Spark 支持将作业提交到 Yarn 上运行,此时不需要启动 Master 节点,也不需要启动 Worker 节点。
### 3.1 配置
`spark-env.sh`中配置hadoop的配置目录的位置可以使用`YARN_CONF_DIR``HADOOP_CONF_DIR`进行指定:
`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
@ -213,7 +213,7 @@ JAVA_HOME=/usr/java/jdk1.8.0_201
### 3.2 启动
必须要保证Hadoop已经启动这里包括YARNHDFS都需要启动因为在计算过程中Spark会使用HDFS存储临时文件如果HDFS没有启动则会抛出异常。
必须要保证 Hadoop 已经启动,这里包括 YARNHDFS 都需要启动,因为在计算过程中 Spark 会使用 HDFS 存储临时文件,如果 HDFS 没有启动,则会抛出异常。
```shell
# start-yarn.sh