将 Spark 作业提交到 Amazon EMR
Submitting Spark job to Amazon EMR
我即将尝试使用 EMR,并从现在开始浏览文档。我对提交过程有点困惑。
1) spark 库在哪里
从 Spark 文档中我们发现:
- spark.yarn.jars:
包含要分发到 YARN 容器的 Spark 代码的库列表。默认情况下,YARN 上的 Spark 将使用本地安装的 Spark jar,但 Spark jar 也可以位于 HDFS 上的世界可读位置。这允许 YARN 将其缓存在节点上,这样就不需要在每次应用程序运行时都分发它。例如,要指向 HDFS 上的 jars,请将此配置设置为 hdfs:///some/path。允许使用 Glob。
- (a) 我想知道 EMR 是如何设置的,即它是由 EMR 设置还是我必须自己设置?
2) --master 参数如何工作?
从 spark 文档我们有:
- --master:不同于Spark支持的其他集群管理器在--master参数中指定master的地址,在YARN模式下,ResourceManager的地址被拾取来自 Hadoop 配置。因此,--master 参数是 yarn.
- (a) 是EMR直接设置的吗?
3) 有没有办法通过终端提交应用程序,或者是在 S3 上实际部署 jar 的唯一方法吗? 我可以登录到 master 和从那里提交?提交脚本工作所需的所有 Env 变量是否准备就绪(请参阅上一个问题)?执行此提交最有效的方法是什么?
spark 库在哪里? spark
在路径中可用,这意味着,您可以从主节点上任何位置的命令行界面 运行 spark-submit
,但是,如果您想调整 spark 的配置文件,它们是位于所有节点的 /etc/spark/conf/
下。
如何提交Spark申请?有两种方式
a) CLI on the master node:
使用所有参数发出 spark-submit
,例如:spark-submit --class com.some.core.Main --deploy-mode cluster --master yarn --jars s3://path_to_some_jar.jar
b) AWS EMR Web console:
从 EMR web 控制台提交一个 spark 应用程序意味着提交一个 EMR 步骤,一个 EMR 步骤基本上是一个 UI 版本的 spark 提交,更多信息 here
--master参数怎么用,是EMR直接设置的吗?如果您使用 AWS EMR 步骤(即 web 控制台方式),这是自动设置的,UI 会自动为您添加它,但如果您使用 CLI 作为问题 2a
,那么您需要具体说一下
4) 是在 S3 上实际部署 jar 的唯一方法吗?有两种(或更多)方式
- a) 将 jar(构建文件)发布到
s3
并在提交时引用它。
- b)用SCP复制jar到master,提交时引用。
5) 提交脚本工作所需的所有 Env 变量都准备好了吗?
- 是的,对于所有 spark/yarn 相关的环境变量,如果您将
spark
应用程序添加到 EMR,它是一个完全配置的即用型 spark
集群。
- 不,对于所有自定义环境变量,实现此目的的一种方法是利用 AWS EMR
bootstrap action
执行脚本,这只能在集群创建期间完成,更多信息 here
6) 执行此提交最有效的方法是什么?这取决于用例,如果你 can/want 自己管理工作,只需做一个 spark-submit
但要获得 AWS EMR 自动调试日志的优势,那么 AWS EMR step
就是这样去吧。
更新:
7) 如何改变纱线、火花等的配置?同样有两个选项
- CLI:Hadoop conf 文件位于
/etc/hadoop/conf
,在主节点上修改这些文件,您可能需要在主节点上重新启动 yarn 管理器。
AWS Web控制台:您可以在创建集群时如here所述在Web控制台上提交配置,例如,如果要启用YARN FAIR调度,配置JSON 供应看起来像
{
'classification': 'yarn-site',
'Properties': { 'yarn.resourcemanager.scheduler.class':'org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler'
}
}
PS:我忘了说,几乎任何您可以在 AWS Web 控制台上执行的操作,您都可以使用 AWS CLI 或 AWS SDK 以编程方式执行相同的操作。
我即将尝试使用 EMR,并从现在开始浏览文档。我对提交过程有点困惑。
1) spark 库在哪里
从 Spark 文档中我们发现:
- spark.yarn.jars: 包含要分发到 YARN 容器的 Spark 代码的库列表。默认情况下,YARN 上的 Spark 将使用本地安装的 Spark jar,但 Spark jar 也可以位于 HDFS 上的世界可读位置。这允许 YARN 将其缓存在节点上,这样就不需要在每次应用程序运行时都分发它。例如,要指向 HDFS 上的 jars,请将此配置设置为 hdfs:///some/path。允许使用 Glob。
- (a) 我想知道 EMR 是如何设置的,即它是由 EMR 设置还是我必须自己设置?
2) --master 参数如何工作?
从 spark 文档我们有:
- --master:不同于Spark支持的其他集群管理器在--master参数中指定master的地址,在YARN模式下,ResourceManager的地址被拾取来自 Hadoop 配置。因此,--master 参数是 yarn.
- (a) 是EMR直接设置的吗?
3) 有没有办法通过终端提交应用程序,或者是在 S3 上实际部署 jar 的唯一方法吗? 我可以登录到 master 和从那里提交?提交脚本工作所需的所有 Env 变量是否准备就绪(请参阅上一个问题)?执行此提交最有效的方法是什么?
spark 库在哪里?
spark
在路径中可用,这意味着,您可以从主节点上任何位置的命令行界面 运行spark-submit
,但是,如果您想调整 spark 的配置文件,它们是位于所有节点的/etc/spark/conf/
下。如何提交Spark申请?有两种方式
a) CLI on the master node:
使用所有参数发出spark-submit
,例如:spark-submit --class com.some.core.Main --deploy-mode cluster --master yarn --jars s3://path_to_some_jar.jar
b) AWS EMR Web console:
从 EMR web 控制台提交一个 spark 应用程序意味着提交一个 EMR 步骤,一个 EMR 步骤基本上是一个 UI 版本的 spark 提交,更多信息 here
--master参数怎么用,是EMR直接设置的吗?如果您使用 AWS EMR 步骤(即 web 控制台方式),这是自动设置的,UI 会自动为您添加它,但如果您使用 CLI 作为问题
2a
,那么您需要具体说一下
4) 是在 S3 上实际部署 jar 的唯一方法吗?有两种(或更多)方式
- a) 将 jar(构建文件)发布到
s3
并在提交时引用它。 - b)用SCP复制jar到master,提交时引用。
5) 提交脚本工作所需的所有 Env 变量都准备好了吗?
- 是的,对于所有 spark/yarn 相关的环境变量,如果您将
spark
应用程序添加到 EMR,它是一个完全配置的即用型spark
集群。 - 不,对于所有自定义环境变量,实现此目的的一种方法是利用 AWS EMR
bootstrap action
执行脚本,这只能在集群创建期间完成,更多信息 here
6) 执行此提交最有效的方法是什么?这取决于用例,如果你 can/want 自己管理工作,只需做一个 spark-submit
但要获得 AWS EMR 自动调试日志的优势,那么 AWS EMR step
就是这样去吧。
更新:
7) 如何改变纱线、火花等的配置?同样有两个选项
- CLI:Hadoop conf 文件位于
/etc/hadoop/conf
,在主节点上修改这些文件,您可能需要在主节点上重新启动 yarn 管理器。 AWS Web控制台:您可以在创建集群时如here所述在Web控制台上提交配置,例如,如果要启用YARN FAIR调度,配置JSON 供应看起来像
{ 'classification': 'yarn-site', 'Properties': { 'yarn.resourcemanager.scheduler.class':'org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler' } }
PS:我忘了说,几乎任何您可以在 AWS Web 控制台上执行的操作,您都可以使用 AWS CLI 或 AWS SDK 以编程方式执行相同的操作。