Spark:并行多个spark-submit

Tao*_*a_k 11 hadoop cloudera hadoop-yarn apache-spark

我有关于Apache Spark的一般性问题:

我们有一些使用Kafka消息的spark流式脚本.问题:他们在没有特定错误的情况下随机失败......

当我手动运行它们时,某些脚本没有任何作用,其中一个脚本没有显示以下消息:

错误SparkUI:无法绑定SparkUI java.net.BindException:地址已被使用:服务'SparkUI'在16次重试后失败!

所以我想知道是否有一种特定的方法来并行运行脚本?

他们都在同一个罐子里,我和Supervisor一起运行.Spark安装在纱线上的Cloudera Manager 5.4上.

以下是我启动脚本的方法:

sudo -u spark spark-submit --class org.soprism.kafka.connector.reader.TwitterPostsMessageWriter /home/soprism/sparkmigration/data-migration-assembly-1.0.jar --master yarn-cluster --deploy-mode client
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助 !

更新:我更改了命令,现在运行它(现在停止显示特定的消息):

root@ns6512097:~# sudo -u spark spark-submit --class org.soprism.kafka.connector.reader.TwitterPostsMessageWriter --master yarn --deploy-mode client /home/soprism/sparkmigration/data-migration-assembly-1.0.jar
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/jars/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/jars/avro-tools-1.7.6-cdh5.4.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
15/09/28 16:14:21 INFO Remoting: Starting remoting
15/09/28 16:14:21 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkDriver@ns6512097.ip-37-187-69.eu:52748]
15/09/28 16:14:21 INFO Remoting: Remoting now listens on addresses: [akka.tcp://sparkDriver@ns6512097.ip-37-187-69.eu:52748]
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/jars/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/jars/avro-tools-1.7.6-cdh5.4.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Run Code Online (Sandbox Code Playgroud)

Sac*_*inJ 6

如果多个用户尝试同时启动Spark会话或现有的Spark会话未关闭属性,则会发生此问题

有两种方法可以解决此问题。

  • 如下所示在其他端口上启动新的Spark会话

    spark-submit --conf spark.ui.port=5051 <other arguments>`<br>`spark-shell --conf spark.ui.port=5051
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用4041至4056端口查找所有spark会话,并使用kill命令终止进程,netstat和kill命令可用于查找占用该端口的进程并分别终止该进程。这是用法:

    sudo netstat -tunalp | grep LISTEN| grep 4041
    
    Run Code Online (Sandbox Code Playgroud)

上面的命令将产生如下输出,最后一列是进程ID,在这种情况下,PID为32028

tcp        0      0 :::4040    :::*         LISTEN      32028/java
Run Code Online (Sandbox Code Playgroud)

找到进程ID(PID)后,您可以使用以下命令杀死spark进程(spark-shell或spark-submit)

sudo kill -9 32028
Run Code Online (Sandbox Code Playgroud)


小智 6

您还可以提高 的设置值spark.port.maxRetries

根据文档

绑定到端口时放弃之前的最大重试次数。当端口被赋予特定值(非 0)时,每次后续重试都会在重试之前将上次尝试中使用的端口增加 1。这本质上允许它尝试从指定的起始端口到端口 + maxRetries 的一系列端口。