如何在集群上部署 spark-shell 中使用的 scala 文件?
How to deploy scala files used in spark-shell on cluster?
我将 spark-shell
用于学习目的,为此我创建了几个包含常用代码的 Scala 文件,例如 class 定义。我通过在 shell 中调用“:load”命令来使用这些文件。
现在我想在 yarn-cluster 模式下使用 spark-shell
。我使用 spark-shell --master yarn --deploy-mode client
启动它。
shell 启动时没有任何问题,但是当我尝试 运行 由“:load”加载的代码时,出现执行错误。
17/05/04 07:59:36 WARN YarnSchedulerBackend$YarnSchedulerEndpoint: Container marked as failed: container_e68_1493271022021_0168_01_000002 on host: xxxw03.mine.de. Exit status: 50. Diagnostics: Exception from container-launch.
Container id: container_e68_1493271022021_0168_01_000002
Exit code: 50
Stack trace: ExitCodeException exitCode=50:
at org.apache.hadoop.util.Shell.runCommand(Shell.java:933)
at org.apache.hadoop.util.Shell.run(Shell.java:844)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:1123)
at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:225)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:317)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:83)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
我想我必须将 shell 中加载的代码分享给工作人员。但是我该怎么做呢?
spark-shell
对于快速测试很有用,但是一旦您知道要做什么并将一个完整的程序放在一起,它的用处就会直线下降。
您现在可能想继续使用 spark-submit
命令。
请参阅有关提交申请的文档 https://spark.apache.org/docs/latest/submitting-applications.html
使用此命令,您可以提供一个 JAR 文件,而不是单独的 class 个文件。
./bin/spark-submit \
--class <main-class> \
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
<main-class>
是您的 class 的 Java 样式路径,例如com.example.MyMainClass
<application-jar>
是项目中包含 classes 的 JAR 文件的路径,其他参数按照我在上面包含的 link 中的记录,但这两个是关于如何向集群提供代码的条款。
我将 spark-shell
用于学习目的,为此我创建了几个包含常用代码的 Scala 文件,例如 class 定义。我通过在 shell 中调用“:load”命令来使用这些文件。
现在我想在 yarn-cluster 模式下使用 spark-shell
。我使用 spark-shell --master yarn --deploy-mode client
启动它。
shell 启动时没有任何问题,但是当我尝试 运行 由“:load”加载的代码时,出现执行错误。
17/05/04 07:59:36 WARN YarnSchedulerBackend$YarnSchedulerEndpoint: Container marked as failed: container_e68_1493271022021_0168_01_000002 on host: xxxw03.mine.de. Exit status: 50. Diagnostics: Exception from container-launch.
Container id: container_e68_1493271022021_0168_01_000002
Exit code: 50
Stack trace: ExitCodeException exitCode=50:
at org.apache.hadoop.util.Shell.runCommand(Shell.java:933)
at org.apache.hadoop.util.Shell.run(Shell.java:844)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:1123)
at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:225)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:317)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:83)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
我想我必须将 shell 中加载的代码分享给工作人员。但是我该怎么做呢?
spark-shell
对于快速测试很有用,但是一旦您知道要做什么并将一个完整的程序放在一起,它的用处就会直线下降。
您现在可能想继续使用 spark-submit
命令。
请参阅有关提交申请的文档 https://spark.apache.org/docs/latest/submitting-applications.html
使用此命令,您可以提供一个 JAR 文件,而不是单独的 class 个文件。
./bin/spark-submit \
--class <main-class> \
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
<main-class>
是您的 class 的 Java 样式路径,例如com.example.MyMainClass
<application-jar>
是项目中包含 classes 的 JAR 文件的路径,其他参数按照我在上面包含的 link 中的记录,但这两个是关于如何向集群提供代码的条款。