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

Fix markdown syntax

上级 1c71335d
......@@ -92,7 +92,44 @@ To use a custom metrics.properties for the application master and executors, upd
#### Spark 属性
</tr> </table> # 重要提示 - core request 在调度决策中是否得到执行取决于使用的调度程序及其配置方式。- 在 `cluster 集群` 模式中,Spark executors 和 Spark dirver 使用的本地目录是为 YARN(Hadoop YARN 配置 `yarn.nodemanager.local-dirs`)配置的本地目录。如果用户指定 `spark.local.dir`,它将被忽略。在 `client 客户端` 模式下,Spark executors 将使用为 YARN 配置的本地目录,Spark dirver 将使用 `spark.local.dir` 中定义的目录。这是因为 Spark drivers 不在 YARN cluster 的 `client ` 模式中运行,仅仅 Spark 的 executors 会这样做。- `--files``--archives` 支持用 # 指定文件名,与 Hadoop 相似。例如您可以指定:`--files localtest.txt#appSees.txt` 然后就会上传本地名为 `localtest.txt` 的文件到 HDFS 中去,但是会通过名称 `appSees.txt` 来链接,当你的应用程序在 YARN 上运行时,你应该使用名称 `appSees.txt` 来引用它。- The `--jars` 选项允许你在 `cluster 集群` 模式下使用本地文件时运行 `SparkContext.addJar` 函数。如果你使用 HDFS,HTTP,HTTPS 或 FTP 文件,则不需要使用它。# 在安全集群中运行 如 [security](security.html) 所讲的,Kerberos 被应用在安全的 Hadoop 集群中去验证与服务和客户端相关联的 principals。这允许客户端请求这些已验证的服务; 向授权的 principals 授予请求服务的权利。Hadoop 服务发出 *hadoop tokens* 去授权访问服务和数据。客户端必须首先获取它们将要访问的服务的 tokens,当启动应用程序时,将它和应用程序一起发送到 YAYN 集群中。如果 Spark 应用程序与其它任何的 Hadoop 文件系统(例如 hdfs,webhdfs,等等),HDFS,HBase 和 Hive 进行交互,它必须使用启动应用程序的用户的 Kerberos 凭据获取相关 tokens,也就是说身份将成为已启动的 Spark 应用程序的 principal。这通常在启动时完成:在安全集群中,Spark 将自动为集群的 HDFS 文件系统获取 tokens,也可能为 HBase 和 Hive 获取。如果 HBase 在 classpath 中,HBase token 是可以获取的,HBase 配置声明应用程序是安全的(即 `hbase-site.xml``hbase.security.authentication` 设置为 `kerberos`),并且 `spark.yarn.security.tokens.hbase.enabled` 未设置为 `false`,HBase tokens 将被获得。类似地,如果 Hive 在 classpath 中,其配置包括元数据存储的 URI(`hive.metastore.uris`),并且 `spark.yarn.security.tokens.hive.enabled` 未设置为 `false`,则将获得 Hive token(令牌)。如果应用程序需要与其他安全 Hadoop 文件系统交互,则在启动时必须显式请求访问这些集群所需的 tokens。这是通过将它们列在 1spark.yarn.access.namenodes1 属性中来实现的。``` spark.yarn.access.hadoopFileSystems hdfs://ireland.example.org:8020/,webhdfs://frankfurt.example.org:50070/ ``` Spark 支持通过 Java Services 机制(请看 `java.util.ServiceLoader`)与其它的具有安全性的服务来进行集成。为了实现该目标,通过在 jar 的 `META-INF/services` 目录中列出相应 `org.apache.spark.deploy.yarn.security.ServiceCredentialProvider` 的实现的名字就可应用到 Spark。这些插件可以通过设置 `spark.yarn.security.tokens.{service}.enabled``false` 来禁用,这里的 `{service}` 是 credential provider(凭证提供者)的名字。## 配置外部的 Shuffle Service 要在 YARN cluster 中的每个 `NodeManager` 中启动 Spark Shuffle,按照以下说明:1\.[YARN profile](building-spark.html) 来构建 Spark。如果你使用了预包装的发布可以跳过该步骤。1\. 定位 `spark-<version>-yarn-shuffle.jar`。如果是你自己构建的 Spark,它应该在 `$SPARK_HOME/common/network-yarn/target/scala-<version>` 下,如果你使用的是一个发布的版本,那么它应该在 `yarn` 下。1\. 添加这个 jar 到你集群中所有的 `NodeManager` 的 classpath 下去。1\. 在每个 node(节点)的 `yarn-site.xml` 文件中,添加 `spark_shuffle``yarn.nodemanager.aux-services`,然后设置 `yarn.nodemanager.aux-services.spark_shuffle.class``org.apache.spark.network.yarn.YarnShuffleService`。1\. 通过在 `etc/hadoop/yarn-env.sh` 文件中设置 `YARN_HEAPSIZE` (默认值 1000) 增加 `NodeManager's` 堆大小以避免在 shuffle 时的 garbage collection issues(垃圾回收问题)。1\. 重启集群中所有的 `NodeManager`。当 shuffle service 服务在 YARN 上运行时,可以使用以下额外的配置选项:</version></version>
# 重要提示
- core request 在调度决策中是否得到执行取决于使用的调度程序及其配置方式。
-`cluster 集群` 模式中,Spark executors 和 Spark dirver 使用的本地目录是为 YARN(Hadoop YARN 配置 `yarn.nodemanager.local-dirs`)配置的本地目录。如果用户指定 `spark.local.dir`,它将被忽略。在 `client 客户端` 模式下,Spark executors 将使用为 YARN 配置的本地目录,Spark dirver 将使用 `spark.local.dir` 中定义的目录。这是因为 Spark drivers 不在 YARN cluster 的 `client ` 模式中运行,仅仅 Spark 的 executors 会这样做。
- `--files``--archives` 支持用 # 指定文件名,与 Hadoop 相似。例如您可以指定:`--files localtest.txt#appSees.txt` 然后就会上传本地名为 `localtest.txt` 的文件到 HDFS 中去,但是会通过名称 `appSees.txt` 来链接,当你的应用程序在 YARN 上运行时,你应该使用名称 `appSees.txt` 来引用它。
- The `--jars` 选项允许你在 `cluster 集群` 模式下使用本地文件时运行 `SparkContext.addJar` 函数。如果你使用 HDFS,HTTP,HTTPS 或 FTP 文件,则不需要使用它。
# 在安全集群中运行
[security](security.html) 所讲的,Kerberos 被应用在安全的 Hadoop 集群中去验证与服务和客户端相关联的 principals。这允许客户端请求这些已验证的服务; 向授权的 principals 授予请求服务的权利。
Hadoop 服务发出 _hadoop tokens_ 去授权访问服务和数据。客户端必须首先获取它们将要访问的服务的 tokens,当启动应用程序时,将它和应用程序一起发送到 YAYN 集群中。
如果 Spark 应用程序与其它任何的 Hadoop 文件系统(例如 hdfs,webhdfs,等等),HDFS,HBase 和 Hive 进行交互,它必须使用启动应用程序的用户的 Kerberos 凭据获取相关 tokens,也就是说身份将成为已启动的 Spark 应用程序的 principal。
这通常在启动时完成:在安全集群中,Spark 将自动为集群的 HDFS 文件系统获取 tokens,也可能为 HBase 和 Hive 获取。
如果 HBase 在 classpath 中,HBase token 是可以获取的,HBase 配置声明应用程序是安全的(即 `hbase-site.xml``hbase.security.authentication` 设置为 `kerberos`),并且 `spark.yarn.security.tokens.hbase.enabled` 未设置为 `false`,HBase tokens 将被获得。
类似地,如果 Hive 在 classpath 中,其配置包括元数据存储的 URI(`hive.metastore.uris`),并且 `spark.yarn.security.tokens.hive.enabled` 未设置为 `false`
则将获得 Hive token(令牌)。如果应用程序需要与其他安全 Hadoop 文件系统交互,则在启动时必须显式请求访问这些集群所需的 tokens。这是通过将它们列在 1spark.yarn.access.namenodes1 属性中来实现的。
```
spark.yarn.access.hadoopFileSystems hdfs://ireland.example.org:8020/,webhdfs://frankfurt.example.org:50070/
```
Spark 支持通过 Java Services 机制(请看 `java.util.ServiceLoader`)与其它的具有安全性的服务来进行集成。为了实现该目标,通过在 jar 的 `META-INF/services` 目录中列出相应 `org.apache.spark.deploy.yarn.security.ServiceCredentialProvider` 的实现的名字就可应用到 Spark。这些插件可以通过设置 `spark.yarn.security.tokens.{service}.enabled``false` 来禁用,这里的 `{service}` 是 credential provider(凭证提供者)的名字。
## 配置外部的 Shuffle Service
要在 YARN cluster 中的每个 `NodeManager` 中启动 Spark Shuffle,按照以下说明:
1.[YARN profile](building-spark.html) 来构建 Spark。如果你使用了预包装的发布可以跳过该步骤。
2. 定位 `spark-<version>-yarn-shuffle.jar`。如果是你自己构建的 Spark,它应该在 `$SPARK_HOME/common/network-yarn/target/scala-<version>` 下,如果你使用的是一个发布的版本,那么它应该在 `yarn` 下。
3. 添加这个 jar 到你集群中所有的 `NodeManager` 的 classpath 下去。
4. 在每个 node(节点)的 `yarn-site.xml` 文件中,添加 `spark_shuffle``yarn.nodemanager.aux-services`,然后设置 `yarn.nodemanager.aux-services.spark_shuffle.class``org.apache.spark.network.yarn.YarnShuffleService`
5. 通过在 `etc/hadoop/yarn-env.sh` 文件中设置 `YARN_HEAPSIZE` (默认值 1000) 增加 `NodeManager's` 堆大小以避免在 shuffle 时的 garbage collection issues(垃圾回收问题)。
6. 重启集群中所有的 `NodeManager`。当 shuffle service 服务在 YARN 上运行时,可以使用以下额外的配置选项:
| Property Name(属性名称)| Default(默认值)| Meaning(含义)|
| --- | --- | --- |
......@@ -141,4 +178,58 @@ To use a custom metrics.properties for the application master and executors, upd
| --- | --- | --- |
| `spark.yarn.shuffle.stopOnFailure` | `false` | 是否在 Spark Shuffle Service 初始化出现故障时停止 NodeManager。This prevents application failures caused by running containers on NodeManagers where the Spark Shuffle Service is not running. |
## 用 Apache Oozie 来运行应用程序 Apache Oozie 可以将启动 Spark 应用程序作为工作流的一部分。在安全集群中,启动的应用程序将需要相关的 tokens 来访问集群的服务。如果 Spark 使用 keytab 启动,这是自动的。但是,如果 Spark 在没有 keytab 的情况下启动,则设置安全性的责任必须移交给 Oozie。有关配置 Oozie 以获取安全集群和获取作业凭据的详细信息,请参阅 [Oozie web site](http://oozie.apache.org/) 上特定版本文档的 “Authentication” 部分。对于 Spark 应用程序,必须设置 Oozie 工作流以使 Oozie 请求应用程序需要的所有 tokens,包括:- The YARN resource manager. - The local Hadoop filesystem. - Any remote Hadoop filesystems used as a source or destination of I/O. - Hive —if used. - HBase —if used. - The YARN timeline server, if the application interacts with this. 为了避免 Spark 尝试 - 然后失败 - 要获取 Hive,HBase 和远程的 HDFS 令牌,必须将 Spark 配置收集这些服务 tokens 的选项设置为禁用。Spark 配置必须包含以下行:``` spark.yarn.security.credentials.hive.enabled false spark.yarn.security.credentials.hbase.enabled false ``` 必须取消设置配置选项`spark.yarn.access.hadoopFileSystems`. ## Kerberos 故障排查 调试 Hadoop/Kerberos 问题可能是 “difficult 困难的”。一个有用的技术是通过设置 `HADOOP_JAAS_DEBUG` 环境变量在 Hadoop 中启用对 Kerberos 操作的额外记录。```bash export HADOOP_JAAS_DEBUG=true ``` JDK 类可以配置为通过系统属性 `sun.security.krb5.debug` 和 `sun.security.spnego.debug=true` 启用对 Kerberos 和 SPNEGO/REST 认证的额外日志记录。``` -Dsun.security.krb5.debug=true -Dsun.security.spnego.debug=true ``` 所有这些选项都可以在 Application Master 中启用:``` spark.yarn.appMasterEnv.HADOOP_JAAS_DEBUG true spark.yarn.am.extraJavaOptions -Dsun.security.krb5.debug=true -Dsun.security.spnego.debug=true ``` 最后,如果 `org.apache.spark.deploy.yarn.Client` 的日志级别设置为 `DEBUG`,日志将包括获取的所有 tokens 的列表,以及它们的到期详细信息。## 使用 Spark History Server 来替换 Spark Web UI 当应用程序 UI 被禁用时的应用程序,可以使用 Spark History Server 应用程序页面作为运行程序用于跟踪的 URL。这在 secure clusters(安全的集群)中是适合的,或者减少 Spark driver 的内存使用量。要通过 Spark History Server 设置跟踪,请执行以下操作:- 在 application(应用)方面,在 Spark 的配置中设置 `spark.yarn.historyServer.allowTracking=true`. 在 application's UI 是禁用的情况下,这将告诉 Spark 去使用 history server's URL 作为 racking URL。- 在 Spark History Server 方面,添加 `org.apache.spark.deploy.yarn.YarnProxyRedirectFilter` 到 `spark.ui.filters` 配置的中的 filters 列表中去。请注意,history server 信息可能不是应用程序状态的最新信息。
\ No newline at end of file
## 用 Apache Oozie 来运行应用程序
Apache Oozie 可以将启动 Spark 应用程序作为工作流的一部分。在安全集群中,启动的应用程序将需要相关的 tokens 来访问集群的服务。如果 Spark 使用 keytab 启动,这是自动的。但是,如果 Spark 在没有 keytab 的情况下启动,则设置安全性的责任必须移交给 Oozie。
有关配置 Oozie 以获取安全集群和获取作业凭据的详细信息,请参阅 [Oozie web site](http://oozie.apache.org/) 上特定版本文档的 “Authentication” 部分。
对于 Spark 应用程序,必须设置 Oozie 工作流以使 Oozie 请求应用程序需要的所有 tokens,包括:
- The YARN resource manager.
- The local Hadoop filesystem.
- Any remote Hadoop filesystems used as a source or destination of I/O.
- Hive —if used.
- HBase —if used.
- The YARN timeline server, if the application interacts with this.
为了避免 Spark 尝试 - 然后失败 - 要获取 Hive,HBase 和远程的 HDFS 令牌,必须将 Spark 配置收集这些服务 tokens 的选项设置为禁用。Spark 配置必须包含以下行:
```
spark.yarn.security.credentials.hive.enabled false
spark.yarn.security.credentials.hbase.enabled false
```
必须取消设置配置选项`spark.yarn.access.hadoopFileSystems`.
## Kerberos 故障排查
调试 Hadoop/Kerberos 问题可能是 “difficult 困难的”。一个有用的技术是通过设置 `HADOOP_JAAS_DEBUG` 环境变量在 Hadoop 中启用对 Kerberos 操作的额外记录。
```bash
export HADOOP_JAAS_DEBUG=true
```
JDK 类可以配置为通过系统属性 `sun.security.krb5.debug``sun.security.spnego.debug=true` 启用对 Kerberos 和 SPNEGO/REST 认证的额外日志记录。
```
-Dsun.security.krb5.debug=true -Dsun.security.spnego.debug=true
```
所有这些选项都可以在 Application Master 中启用:
```
spark.yarn.appMasterEnv.HADOOP_JAAS_DEBUG true
spark.yarn.am.extraJavaOptions -Dsun.security.krb5.debug=true -Dsun.security.spnego.debug=true
```
最后,如果 `org.apache.spark.deploy.yarn.Client` 的日志级别设置为 `DEBUG`,日志将包括获取的所有 tokens 的列表,以及它们的到期详细信息。
## 使用 Spark History Server 来替换 Spark Web UI 当应用程序
UI 被禁用时的应用程序,可以使用 Spark History Server 应用程序页面作为运行程序用于跟踪的 URL。这在 secure clusters(安全的集群)中是适合的,或者减少 Spark driver 的内存使用量。要通过 Spark History Server 设置跟踪,请执行以下操作:
- 在 application(应用)方面,在 Spark 的配置中设置 `spark.yarn.historyServer.allowTracking=true`. 在 application's UI 是禁用的情况下,这将告诉 Spark 去使用 history server's URL 作为 racking URL。
- 在 Spark History Server 方面,添加 `org.apache.spark.deploy.yarn.YarnProxyRedirectFilter``spark.ui.filters` 配置的中的 filters 列表中去。
请注意,history server 信息可能不是应用程序状态的最新信息。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册