标签: spark-submit

如何在spark 2.1.0中点火提交python文件?

我目前正在运行spark 2.1.0.我大部分时间都在PYSPARK shell中工作,但是我需要spark-submit一个python文件(类似于java中的spark-submit jar).你是如何在python中做到的?

apache-spark apache-spark-sql pyspark pyspark-sql spark-submit

5
推荐指数
1
解决办法
1万
查看次数

提交火花时ClassNotFoundException scala.runtime.LambdaDeserialize

我遵循https://spark.apache.org/docs/2.1.0/quick-start.html上的Scala教程

我的scala文件

/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
  def main(args: Array[String]) {
    val logFile = "/data/README.md" // Should be some file on your system
    val conf = new SparkConf().setAppName("Simple Application")
    val sc = new SparkContext(conf)
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println(s"Lines with a: $numAs, Lines with b: $numBs")
    sc.stop()
  }
}
Run Code Online (Sandbox Code Playgroud)

和build.sbt

name := "Simple Project"

version := "1.0"

scalaVersion …
Run Code Online (Sandbox Code Playgroud)

scala sbt apache-spark spark-submit

5
推荐指数
1
解决办法
3369
查看次数

AWS EMR Spark 集群 - 使用 Scala fat JAR 的步骤,找不到 MainClass

我有一个 fat jar,用 Scala 编写,由 sbt 打包。我需要在 AWS EMR 的 Spark 集群中使用它。

如果我手动启动集群,将 jar 复制到 master 并使用这样的命令运行 Spark-submit 作业,它的功能就很好......

spark-submit --class org.company.platform.package.SparkSubmit --name platform ./platform-assembly-0.1.0.jar arg0 arg1 arg2
Run Code Online (Sandbox Code Playgroud)

但是...如果我尝试将其作为步骤添加到 EMR 集群,则会失败。stderr 的日志看起来像这样......

Exception in thread "main" java.lang.ClassNotFoundException: package.SparkSubmit
  at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Class.java:278)
  at org.apache.hadoop.util.RunJar.run(RunJar.java:214)
  at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Run Code Online (Sandbox Code Playgroud)

我的 build.sbt 中的相关设置如下所示......

lazy val root = (project in file(".")).
  settings(
    name := "platform",
    version := "0.1.0",
    scalaVersion := "2.10.5", …
Run Code Online (Sandbox Code Playgroud)

scala jar executable-jar amazon-emr spark-submit

5
推荐指数
1
解决办法
2148
查看次数

spark提交中的PySpark依赖模块

我正在尝试运行 spark submit(pyspark) 命令。作为 spark 提交的一部分,我需要提供 boto3 的依赖项,因为它是我代码中的依赖项。我正在运行以下命令并且没有收到模块错误。

bin/spark-submit --master=local --py-files /home/user/boto3-develop.zip /home/user/py_script.py

Traceback (most recent call last):
  File "/home/user/py_script.py", line 16, in <module>
    import boto3
ModuleNotFoundError: No module named 'boto3'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
    from apport.packaging_impl import impl as packaging …
Run Code Online (Sandbox Code Playgroud)

apache-spark boto3 pyspark spark-submit

5
推荐指数
0
解决办法
374
查看次数

集群模式下pyarrow通过spark-submit失败

我有一个简单的 Pyspark 代码

导入 pyarrow fs = pyarrow.hdfs.connect()

如果我在“客户端”模式下使用spark-submit运行它,它工作正常,但在“集群”模式下,会抛出错误

Traceback (most recent call last):
  File "t3.py", line 17, in <module>
    fs = pa.hdfs.connect()
  File "/opt/anaconda/3.6/lib/python3.6/site-packages/pyarrow/hdfs.py", line 181, in connect
    kerb_ticket=kerb_ticket, driver=driver)
  File "/opt/anaconda/3.6/lib/python3.6/site-packages/pyarrow/hdfs.py", line 37, in __init__
    self._connect(host, port, user, kerb_ticket, driver)
  File "io-hdfs.pxi", line 99, in pyarrow.lib.HadoopFileSystem._connect
  File "error.pxi", line 79, in pyarrow.lib.check_status
pyarrow.lib.ArrowIOError: HDFS connection failed
Run Code Online (Sandbox Code Playgroud)

所有必需的 python 库都安装在我的 Hadoop 集群中的每个节点上。我已经通过在 pyspark 每个节点上单独测试此代码来进行验证。

但无法通过集群模式下的spark-submit使其工作?

有任何想法吗?

香卡尔

pyspark spark-submit cluster-mode

5
推荐指数
0
解决办法
441
查看次数

运行 Spark 作业:Python 与 Spark.submit

运行 Spark 作业的常见方法似乎是使用 Spark-submit,如下所示(来源):

spark-submit --py-files pyfile.py,zipfile.zip main.py --arg1 val1
Run Code Online (Sandbox Code Playgroud)

作为 Spark 的新手,我想知道为什么第一种方法比从 python 运行它更受欢迎(示例):

python pyfile-that-uses-pyspark.py
Run Code Online (Sandbox Code Playgroud)

前一种方法在谷歌搜索该主题时会产生更多示例,但没有明确说明其原因。事实上,这是另一个堆栈溢出问题,其中一个答案(在下面重复)明确告诉OP不要使用python方法,但没有给出原因。

不要将 py 文件运行为: python filename.py 而是使用:spark-submit filename.py

有人可以提供见解吗?

python apache-spark pyspark spark-submit

5
推荐指数
1
解决办法
3354
查看次数

AWS EMR 添加步骤:如何在 --jars 和 --driver-class-path 选项中添加来自 s3 的多个 jar?

因此,我尝试Apache Spark在 AWS EMR 上cluster使用spark-submit. 如果我在类路径中只提供一个 jar,则它可以与使用--jar--driver-class-path选项的给定选项配合使用。我所需的所有依赖项 jar 都位于S3EMR 所需的存储桶中。为此,我在 EMR AWS 控制台上的 EMR 添加步骤选项中使用以下命令:

--class org.springframework.boot.loader.JarLauncher --jars s3://emrb/gson-2.8.4.jar --driver-class-path s3://emrb/gson-2.8.4.jar
Run Code Online (Sandbox Code Playgroud)

现在,我spark-submit optionsadd step. 但如果我想用同样的方式提供多个依赖的jar,就不会占用其他jar。我提供以下方式并尝试了各种选项,但找不到依赖的 jars:

 --jars s3://emrb/hadoop_jars/emrfs-hadoop-assembly-2.32.0.jar,s3://emrb/gson-2.8.4.jar --driver-class-path s3://emrb/hadoop_jars/emrfs-hadoop-assembly-2.32.0.jar,s3://emrb/gson-2.8.4.jar --class org.springframework.boot.loader.JarLauncher
Run Code Online (Sandbox Code Playgroud)

scala amazon-web-services amazon-emr apache-spark spark-submit

5
推荐指数
1
解决办法
2390
查看次数

使用spark-submit 执行spark/Scala jar 与使用java -jar 执行spark jar

我遇到一个有趣的问题,即从 Windows 开发环境提交 Spark 应用程序的不同方法。一般来说,我们可以使用提交spark作业spark-submit,也可以使用以下命令执行uber jar(用jar组装的依赖spark库)java -jar

  • 使用java -jar 命令: java -jar -Xmx1024m /home/myuser/myhar.jar
  • 使用 s Park-submit 命令: spark-submit --master local[*] /home/myuser/myhar.jar

因为我可以使用这两种方法执行作业,所以我观察到有时java -jar方法更快,有时spark-submit对于相同的数据集更快(例如 20000 行,其中有大量数据混洗登录)。spark-submit有更好的选择来使用命令行参数控制执行器和内存等,但是java -jar,我们需要在代码本身内部进行硬编码。如果我们运行具有大数据集的 jar,java -jar则会抛出内存不足异常,虽然spark-submit需要时间,但使用默认配置执行时不会出现错误。

我无法理解使用提交申请的区别spark-submitjava-jar因此我的问题是:

当我们使用 提交申请时,执行是如何发生的java-jar。它是否在内存本身内部执行jvm并且不使用任何 Spark 属性?

java performance scala apache-spark spark-submit

5
推荐指数
0
解决办法
1343
查看次数

如何使用 Spark-submit 和 Python 脚本访问 Docker 容器中的 Spark 集群?

我创建了一个 Spark 集群,其中包含一个主服务器和两个从服务器,每个集群都位于一个 Docker 容器上。我用命令启动它start-all.sh

我可以从本地计算机访问 UI localhost:8080,它显示集群已正常启动: Spark UI 的屏幕截图

然后我尝试使用以下命令从我的主机(而不是从 Docker 容器)提交一个简单的 Python 脚本:spark-submit:spark-submit --master spark://spark-master:7077 test.py

测试.py:

import pyspark
conf = pyspark.SparkConf().setAppName('MyApp').setMaster('spark://spark-master:7077')
sc = pyspark.SparkContext(conf=conf)
Run Code Online (Sandbox Code Playgroud)

但控制台向我返回了这个错误:

22/01/26 09:20:39 INFO StandaloneAppClient$ClientEndpoint: Connecting to master spark://spark-master:7077...
22/01/26 09:20:40 WARN StandaloneAppClient$ClientEndpoint: Failed to connect to master spark-master:7077
org.apache.spark.SparkException: Exception thrown in awaitResult: 
    at org.apache.spark.util.ThreadUtils$.awaitResult(ThreadUtils.scala:226)
    at org.apache.spark.rpc.RpcTimeout.awaitResult(RpcTimeout.scala:75)
    at org.apache.spark.rpc.RpcEnv.setupEndpointRefByURI(RpcEnv.scala:101)
    at org.apache.spark.rpc.RpcEnv.setupEndpointRef(RpcEnv.scala:109)
    at org.apache.spark.deploy.client.StandaloneAppClient$ClientEndpoint$$anonfun$tryRegisterAllMasters$1$$anon$1.run(StandaloneAppClient.scala:106)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.io.IOException: Failed …
Run Code Online (Sandbox Code Playgroud)

python docker apache-spark pyspark spark-submit

5
推荐指数
1
解决办法
4816
查看次数

带有 PEX 的 Databricks PySpark:如何使用 PEX 作为依赖项在 Databricks 上配置 PySpark 作业?

我尝试使用下面的 Spark-submit 参数(依赖项位于 PEX 文件上)通过 Databricks UI(使用 Spark-submit)创建 PySpark 作业,但出现 PEX 文件不存在的异常。据我了解, --files 选项将文件放入驱动程序和每个执行程序的工作目录中,所以我很困惑为什么会遇到这个问题。

配置

[
"--files","s3://some_path/my_pex.pex",
"--conf","spark.pyspark.python=./my_pex.pex",
"s3://some_path/main.py",
"--some_arg","2022-08-01"
]
Run Code Online (Sandbox Code Playgroud)

标准误

OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0
Warning: Ignoring non-Spark config property: libraryDownload.sleepIntervalSeconds
Warning: Ignoring non-Spark config property: libraryDownload.timeoutSeconds
Warning: Ignoring non-Spark config property: eventLog.rolloverIntervalSeconds
Exception in thread "main" java.io.IOException: Cannot run program "./my_pex.pex": error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at org.apache.spark.deploy.PythonRunner$.main(PythonRunner.scala:97)
    at org.apache.spark.deploy.PythonRunner.main(PythonRunner.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at …
Run Code Online (Sandbox Code Playgroud)

pex apache-spark pyspark databricks spark-submit

5
推荐指数
0
解决办法
413
查看次数