提交 6ff5e231 编写于 作者: 取昵称好难啊's avatar 取昵称好难啊

". " to "。" and "。|" to "。 |" and " 。" to "。"

上级 e47e92ad
# Spark 概述
Apache Spark 是一个快速的,多用途的集群计算系统。它提供了 Java,Scala,Python 和 R 的高级 API,以及一个支持通用的执行图计算的优化过的引擎. 它还支持一组丰富的高级工具,包括使用 SQL 处理结构化数据处理的 [Spark SQL](sql-programming-guide.html),用于机器学习的 [MLlib](ml-guide.html),用于图计算的 [GraphX](graphx-programming-guide.html),以及 [Spark Streaming](streaming-programming-guide.html)
Apache Spark 是一个快速的,多用途的集群计算系统。它提供了 Java,Scala,Python 和 R 的高级 API,以及一个支持通用的执行图计算的优化过的引擎它还支持一组丰富的高级工具,包括使用 SQL 处理结构化数据处理的 [Spark SQL](sql-programming-guide.html),用于机器学习的 [MLlib](ml-guide.html),用于图计算的 [GraphX](graphx-programming-guide.html),以及 [Spark Streaming](streaming-programming-guide.html)
# 下载
从该项目官网的 [下载页面](http://spark.apache.org/downloads.html) 获取 Spark. 该文档用于 Spark 2.2.0 版本. Spark可以通过Hadoop client库使用HDFS和YARN.下载一个预编译主流Hadoop版本比较麻烦. 用户可以下载一个编译好的Hadoop版本,并且可以 通过[设置 Spark 的 classpath](hadoop-provided.html) 来与任何的 Hadoop 版本一起运行 Spark. Scala 和 Java 用户可以在他们的工程中通过Maven的方式引入 Spark,并且在将来 Python 用户也可以从 PyPI 中安装 Spark。
从该项目官网的 [下载页面](http://spark.apache.org/downloads.html) 获取 Spark。该文档用于 Spark 2.2.0 版本。Spark可以通过Hadoop client库使用HDFS和YARN.下载一个预编译主流Hadoop版本比较麻烦。用户可以下载一个编译好的Hadoop版本,并且可以 通过[设置 Spark 的 classpath](hadoop-provided.html) 来与任何的 Hadoop 版本一起运行 Spark。Scala 和 Java 用户可以在他们的工程中通过Maven的方式引入 Spark,并且在将来 Python 用户也可以从 PyPI 中安装 Spark。
如果您希望从源码中编译一个Spark,请访问 [编译 Spark](building-spark.html).
......@@ -18,7 +18,7 @@ Spark 可运行在 Java 8+,Python 2.7+/3.4+ 和 R 3.1+ 的环境上。针对 S
# 运行示例和 Shell
Spark 自带了几个示例程序. Scala,Java,Python 和 R 示例在 `examples/src/main` 目录中. 要运行 Java 或 Scala 中的某个示例程序,在最顶层的 Spark 目录中使用 `bin/run-example <class> [params]` 命令即可.(这个命令底层调用了 [`spark-submit` 脚本](submitting-applications.html)去加载应用程序)。例如,
Spark 自带了几个示例程序。Scala,Java,Python 和 R 示例在 `examples/src/main` 目录中。要运行 Java 或 Scala 中的某个示例程序,在最顶层的 Spark 目录中使用 `bin/run-example <class> [params]` 命令即可.(这个命令底层调用了 [`spark-submit` 脚本](submitting-applications.html)去加载应用程序)。例如,
```
./bin/run-example SparkPi 10
......@@ -30,7 +30,7 @@ Spark 自带了几个示例程序. Scala,Java,Python 和 R 示例在 `exampl
./bin/spark-shell --master local[2]
```
`--master`选项可以指定为 [针对分布式集群的 master URL](submitting-applications.html#master-urls),或者 以`local`模式 使用 1 个线程在本地运行,`local[N]` 会使用 N 个线程在本地运行.你应该先使用local模式进行测试. 可以通过–help指令来获取spark-shell的所有配置项. Spark 同样支持 Python API。在 Python interpreter(解释器)中运行交互式的 Spark,请使用 `bin/pyspark`:
`--master`选项可以指定为 [针对分布式集群的 master URL](submitting-applications.html#master-urls),或者 以`local`模式 使用 1 个线程在本地运行,`local[N]` 会使用 N 个线程在本地运行.你应该先使用local模式进行测试。可以通过–help指令来获取spark-shell的所有配置项。Spark 同样支持 Python API。在 Python interpreter(解释器)中运行交互式的 Spark,请使用 `bin/pyspark`:
```
./bin/pyspark --master local[2]
......
......@@ -117,8 +117,8 @@ export HADOOP_CONF_DIR=XXX
| `local[*]` | 使用更多的 worker 线程作为逻辑的 core 在您的机器上来本地的运行 Spark。 |
| `local[*,F]` | 使用更多的 worker 线程作为逻辑的 core 在您的机器上来本地的运行 Spark并允许最多失败 F次。 |
| `spark://HOST:PORT` | 连接至给定的 [Spark standalone cluster](spark-standalone.html) master. master。该 port(端口)必须有一个作为您的 master 配置来使用,默认是 7077。 |
| `spark://HOST1:PORT1,HOST2:PORT2` | 连接至给定的 [Spark standalone cluster with standby masters with Zookeeper](spark-standalone.html#standby-masters-with-zookeeper). 该列表必须包含由zookeeper设置的高可用集群中的所有master主机。该 port(端口)必须有一个作为您的 master 配置来使用,默认是 7077。 |
| `mesos://HOST:PORT` | 连接至给定的 [Mesos](running-on-mesos.html) 集群. 该 port(端口)必须有一个作为您的配置来使用,默认是 5050。或者,对于使用了 ZooKeeper 的 Mesos cluster 来说,使用 `mesos://zk://...`。使用 `--deploy-mode cluster`,来提交,该 HOST:PORT 应该被配置以连接到 [MesosClusterDispatcher](running-on-mesos.html#cluster-mode). |
| `spark://HOST1:PORT1,HOST2:PORT2` | 连接至给定的 [Spark standalone cluster with standby masters with Zookeeper](spark-standalone.html#standby-masters-with-zookeeper)该列表必须包含由zookeeper设置的高可用集群中的所有master主机。该 port(端口)必须有一个作为您的 master 配置来使用,默认是 7077。 |
| `mesos://HOST:PORT` | 连接至给定的 [Mesos](running-on-mesos.html) 集群。该 port(端口)必须有一个作为您的配置来使用,默认是 5050。或者,对于使用了 ZooKeeper 的 Mesos cluster 来说,使用 `mesos://zk://...`。使用 `--deploy-mode cluster`,来提交,该 HOST:PORT 应该被配置以连接到 [MesosClusterDispatcher](running-on-mesos.html#cluster-mode)
| `yarn` | 连接至一个 [YARN](running-on-yarn.html) cluster in `client` or `cluster` mode 取决于 `--deploy-mode`. 的值在 client 或者 cluster 模式中。该 cluster 的位置将根据 `HADOOP_CONF_DIR` 或者 `YARN_CONF_DIR` 变量来找到。 |
# 从文件中加载配置
......
此差异已折叠。
此差异已折叠。
......@@ -118,7 +118,7 @@ Spark 中 GC 调优的目的是确保只有长寿命的 RDD 存储在 Old 版本
* 在打印的 GC 统计信息中,如果 OldGen 接近于满,则通过降低减少用于缓存的内存量 `spark.memory.fraction` ; 缓存较少的对象比减慢任务执行更好。或者,考虑减少年轻一代的大小。这意味着 `-Xmn` 如果您将其设置为如上所述降低。如果没有,请尝试更改 JVM `NewRatio` 参数的值。许多 JVM 默认为2,这意味着 Old 版本占据堆栈的2/3。它应该足够大,使得该分数超过 `spark.memory.fraction`
* 尝试使用 G1GC 垃圾回收器 `-XX:+UseG1GC`。在垃圾收集是瓶颈的一些情况下,它可以提高性能. 请注意,对于大型 excutor 的堆大小,通过设置 -XX:G1HeapRegionSize 参数来增加 [G1 区域的大小](https://blogs.oracle.com/g1gc/entry/g1_gc_tuning_a_case) 是非常重要的
* 尝试使用 G1GC 垃圾回收器 `-XX:+UseG1GC`。在垃圾收集是瓶颈的一些情况下,它可以提高性能请注意,对于大型 excutor 的堆大小,通过设置 -XX:G1HeapRegionSize 参数来增加 [G1 区域的大小](https://blogs.oracle.com/g1gc/entry/g1_gc_tuning_a_case) 是非常重要的
* 例如,如果您的任务是从 HDFS 读取数据,则可以使用从 HDFS 读取的数据块的大小来估计任务使用的内存量。请注意,解压缩块的大小通常是块大小的2或3倍。所以如果我们希望有3或4个任务的工作空间,而 HDFS 块的大小是128MB,我们可以估计 Eden 的大小`4*3*128MB`
......
......@@ -15,17 +15,17 @@
# 概述
Spark 有好几计算资源调度的方式. 首先,回忆一下 [集群模式概述](cluster-overview.html),每个Spark 应用(包含一个SparkContext实例)中运行了一些其独占的执行器(executor)进程. 集群管理器提供了Spark 应用之间的资源调度[scheduling across applications](#scheduling-across-applications). 其次,在各个Spark应用内部,各个线程可能并发地通过action算子提交多个Spark作业(job).如果你的应用服务于网络请求,那这种情况是很常见的. 在Spark应用内部(对应同一个SparkContext)各个作业之间,Spark默认FIFO调度,同时也可以支持公平调度 [fair scheduler](#scheduling-within-an-application).
Spark 有好几计算资源调度的方式。首先,回忆一下 [集群模式概述](cluster-overview.html),每个Spark 应用(包含一个SparkContext实例)中运行了一些其独占的执行器(executor)进程。集群管理器提供了Spark 应用之间的资源调度[scheduling across applications](#scheduling-across-applications)。其次,在各个Spark应用内部,各个线程可能并发地通过action算子提交多个Spark作业(job).如果你的应用服务于网络请求,那这种情况是很常见的。在Spark应用内部(对应同一个SparkContext)各个作业之间,Spark默认FIFO调度,同时也可以支持公平调度 [fair scheduler](#scheduling-within-an-application).
# 跨应用调度
如果在集群上运行,每个Spark应用都会SparkContext获得一批独占的执行器JVM,来运行其任务并存储数据. 如果有多个用户共享集群,那么会有很多资源分配相关的选项,如何设计还取觉于具体的集群管理器.
如果在集群上运行,每个Spark应用都会SparkContext获得一批独占的执行器JVM,来运行其任务并存储数据如果有多个用户共享集群,那么会有很多资源分配相关的选项,如何设计还取觉于具体的集群管理器.
对Spark所支持的各个集群管理器而言,最简单的的资源分配,就是静态划分.这种方式就意味着,每个Spark应用都是设定一个最大可用资源总量,并且该应用在整个生命周期内都会占住这个资源.这种方式在 Spark’s独立部署 [standalone](spark-standalone.html)[YARN](running-on-yarn.html)调度,以及Mesos粗粒度模式下都可用.[coarse-grained Mesos mode](running-on-mesos.html#mesos-run-modes) . Resource allocation can be configured as follows,based on the cluster type:
* **Standalone mode:** 默认情况下,Spark应用在独立部署的集群中都会以FIFO(first-in-first-out)模式顺序提交运行,并且每个spark应用都会占用集群中所有可用节点.不过你可以通过设置spark.cores.max或者spark.deploy.defaultCores来限制单个应用所占用的节点个数.最后,除了可以控制对CPU的使用数量之外,还可以通过spark.executor.memory来控制各个应用的内存占用量.
* **Mesos:** 在Mesos中要使用静态划分的话,需要将spark.mesos.coarse设为true,同样,你也需要配置spark.cores.max来控制各个应用的CPU总数,以及spark.executor.memory来控制各个应用的内存占用.
* **YARN:** 在YARN中需要使用 –num-executors 选项来控制Spark应用在集群中分配的执行器的个数.对于单个执行器(executor)所占用的资源,可以使用 –executor-memory和–executor-cores来控制. Mesos上还有一种动态共享CPU的方式。在这种模式下,每个Spark应用的内存占用仍然是固定且独占的(仍由spark.exexcutor.memory决定),但是如果该Spark应用没有在某个机器上执行任务的话,那么其它应用可以占用该机器上的CPU。这种模式对集群中有大量不是很活跃应用的场景非常有效,例如:集群中有很多不同用户的Spark shell session.但这种模式不适用于低延时的场景,因为当Spark应用需要使用CPU的时候,可能需要等待一段时间才能取得对CPU的使用权。要使用这种模式,只需要在mesos://URL上设置spark.mesos.coarse属性为false即可。
* **YARN:** 在YARN中需要使用 –num-executors 选项来控制Spark应用在集群中分配的执行器的个数.对于单个执行器(executor)所占用的资源,可以使用 –executor-memory和–executor-cores来控制Mesos上还有一种动态共享CPU的方式。在这种模式下,每个Spark应用的内存占用仍然是固定且独占的(仍由spark.exexcutor.memory决定),但是如果该Spark应用没有在某个机器上执行任务的话,那么其它应用可以占用该机器上的CPU。这种模式对集群中有大量不是很活跃应用的场景非常有效,例如:集群中有很多不同用户的Spark shell session.但这种模式不适用于低延时的场景,因为当Spark应用需要使用CPU的时候,可能需要等待一段时间才能取得对CPU的使用权。要使用这种模式,只需要在mesos://URL上设置spark.mesos.coarse属性为false即可。
值得注意的是,目前还没有任何一种资源分配模式支持跨Spark应用的内存共享。如果你想通过这种方式共享数据,我们建议你可以单独使用一个服务(例如:alluxio),这样就能实现多应用访问同一个RDD的数据。
......@@ -37,11 +37,11 @@ Spark 提供了一种基于负载来动态调节Spark应用资源占用的机制
### 配置和部署
要使用这一特性有两个前提条件。首先,你的应用必须设置spark.dynamicAllocation.enabled为true。其次,你必须在每个节点上启动external shuffle service,并将spark.shuffle.service.enabled设为true。external shuffle service 的目的是在移除executor的时候,能够保留executor输出的shuffle文件(本文后续有更新的描述 [below](job-scheduling.html#graceful-decommission-of-executors)). 启用external shuffle service 的方式在各个集群管理器上各不相同:
要使用这一特性有两个前提条件。首先,你的应用必须设置spark.dynamicAllocation.enabled为true。其次,你必须在每个节点上启动external shuffle service,并将spark.shuffle.service.enabled设为true。external shuffle service 的目的是在移除executor的时候,能够保留executor输出的shuffle文件(本文后续有更新的描述 [below](job-scheduling.html#graceful-decommission-of-executors))启用external shuffle service 的方式在各个集群管理器上各不相同:
在Spark独立部署的集群中,你只需要在worker启动前设置spark.shuffle.service.enabled为true即可。
在Mesos粗粒度模式下,你需要在各个节点上运行$SPARK_HOME/sbin/start-mesos-shuffle-service.sh 并设置 spark.shuffle.service.enabled为true即可. 例如,你可以在Marathon来启用这一功能。
在Mesos粗粒度模式下,你需要在各个节点上运行$SPARK_HOME/sbin/start-mesos-shuffle-service.sh 并设置 spark.shuffle.service.enabled为true即可例如,你可以在Marathon来启用这一功能。
在YARN模式下,需要按以下步骤在各个NodeManager上启动: [here](running-on-yarn.html#configuring-the-external-shuffle-service).
......@@ -93,7 +93,7 @@ val sc = new SparkContext(conf)
## 公平调度资源池
公平调度器还可以支持将作业分组放入资源池(pool),然后给每个资源池配置不同的选项(如 : 权重)。这样你就可以给一些比较重要的作业创建一个“高优先级”资源池,或者你也可以把每个用户的作业分到一组,这样一来就是各个用户平均分享集群资源,而不是各个作业平分集群资源。Spark 公平调度的实现方式基本都是模仿 [Hadoop Fair Scheduler](http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/FairScheduler.html). 来实现的。
公平调度器还可以支持将作业分组放入资源池(pool),然后给每个资源池配置不同的选项(如 : 权重)。这样你就可以给一些比较重要的作业创建一个“高优先级”资源池,或者你也可以把每个用户的作业分到一组,这样一来就是各个用户平均分享集群资源,而不是各个作业平分集群资源。Spark 公平调度的实现方式基本都是模仿 [Hadoop Fair Scheduler](http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/FairScheduler.html)来实现的。
默认情况下,新提交的作业都会进入到默认资源池中,不过作业对应于哪个资源池,可以在提交作业的线程中用 SparkContext.setLocalProperty 设定 spark.scheduler.pool 属性。示例代码如下 :
......@@ -128,7 +128,7 @@ sc.setLocalProperty("spark.scheduler.pool", null)
* `weight`: 控制资源池相对其他资源池,可以分配到资源的比例。默认所有资源池的 weight 都是 1。如果你将某个资源池的 weight 设为 2,那么该资源池中的资源将是其他池子的2倍。如果将 weight 设得很高,如 1000,可以实现资源池之间的调度优先级 – 也就是说,weight=1000 的资源池总能立即启动其对应的作业。
* `minShare`: 除了整体 weight 之外,每个资源池还能指定一个最小资源分配值(CPU 个数),管理员可能会需要这个设置。公平调度器总是会尝试优先满足所有活跃(active)资源池的最小资源分配值,然后再根据各个池子的 weight 来分配剩下的资源。因此,minShare 属性能够确保每个资源池都能至少获得一定量的集群资源。minShare 的默认值是 0。
资源池属性是一个 XML 文件,可以基于 conf/fairscheduler.xml.template 修改,然后在 [SparkConf](configuration.html#spark-properties). 的 spark.scheduler.allocation.file 属性指定文件路径:
资源池属性是一个 XML 文件,可以基于 conf/fairscheduler.xml.template 修改,然后在 [SparkConf](configuration.html#spark-properties)的 spark.scheduler.allocation.file 属性指定文件路径:
......
......@@ -3,7 +3,7 @@
Spark 当前支持使用 shared secret(共享密钥)来 authentication(认证)。可以通过配置 `spark.authenticate` 参数来开启认证。这个参数用来控制 Spark 的通讯协议是否使用共享密钥来执行认证。这个认证是一个基本的握手,用来保证两侧具有相同的共享密钥然后允许通讯。如果共享密钥无法识别,他们将不能通讯。创建共享密钥的方法如下:
* 对于 Spark on [YARN](running-on-yarn.html) 的部署方式,配置 `spark.authenticate``true`,会自动生成和分发共享密钥。每个 application 会使用一个单独的共享密钥.
* 对于 Spark 的其他部署方式,需要在每一个 nodes 配置 `spark.authenticate.secret` 参数. 这个密码将会被所有的 Master/Workers 和 aplication 使用.
* 对于 Spark 的其他部署方式,需要在每一个 nodes 配置 `spark.authenticate.secret` 参数这个密码将会被所有的 Master/Workers 和 aplication 使用.
## Web UI
......@@ -29,7 +29,7 @@ SSL 配置是分级组织的。用户可以对所有的通讯协议配置默认
| Config Namespace(配置空间) | Component(组件) |
| --- | --- |
| `spark.ssl.fs` | 文件下载客户端 (用于从启用了 HTTPS 的服务器中下载 jars 和 files). |
| `spark.ssl.fs` | 文件下载客户端 (用于从启用了 HTTPS 的服务器中下载 jars 和 files) |
| `spark.ssl.ui` | Spark application Web UI |
| `spark.ssl.standalone` | Standalone Master / Worker Web UI |
| `spark.ssl.historyServer` | History Server Web UI |
......
......@@ -12,7 +12,7 @@ github: [https://github.com/apachecn/spark-doc-zh](https://github.com/apachecn/s
* 2017-09-20: 校验 structured-streaming-kafka-integration.md 其中有问题的地方。
* 2017-09-14: 修改 sql-programming-guide.md 中其它翻译有问题的地方,更多细节请看:[https://github.com/apachecn/spark-doc-zh/issues/95](https://github.com/apachecn/spark-doc-zh/issues/95)
* 2017-09-13: 修改 sql-programming-guide.md 中的`写作``写操作`,英文原文为`writing`. 更多细节请看[https://github.com/apachecn/spark-doc-zh/issues/95](https://github.com/apachecn/spark-doc-zh/issues/95)
* 2017-09-13: 修改 sql-programming-guide.md 中的`写作``写操作`,英文原文为`writing`更多细节请看[https://github.com/apachecn/spark-doc-zh/issues/95](https://github.com/apachecn/spark-doc-zh/issues/95)
* 2017-08-29: 修改 index.md 中的语法问题.
* 2017-08-23: 修复 sql-programming-guide.md 中格式错乱的 BUG.
* 2017-08-14: 修改 index.md 和 tuning.md 中不正确的地方.
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册