【问题标题】:Spark : multiple spark-submit in parallelSpark : 多个 spark-submit 并行
【发布时间】:2015-12-25 12:34:12
【问题描述】:

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

我们有一些使用 Kafka 消息的 spark 流脚本。 问题:它们随机失败,没有特定错误...

当我手动运行某些脚本时,它们在工作时什么也不做,一个失败并显示此消息:

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

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

它们都在同一个 jar 中,我使用 Supervisor 运行它们。 Spark 安装在 Yarn 上的 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

感谢您的帮助!

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

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]

【问题讨论】:

  • 你不必担心绑定SparkUI地址的错误,因为spark会自动增加绑定的端口号SparkUI。你还有其他线索吗?也许分享完整的日志?
  • 不幸的是,我没有更多线索,除了我粘贴的错误之外,日志是正常的:(这就是为什么我在这里询问我们所做的是否正确......而且似乎是情况?
  • 好吧,您提交代码的一个问题是--master ...--deploy-mode 在jar 之后,它们将被忽略。你可以试试sudo -u spark spark-submit --class org.soprism.kafka.connector.reader.TwitterPostsMessageWriter --master yarn-cluster --deploy-mode client /home/soprism/sparkmigration/data-migration-assembly-1.0.jar
  • 我更新了我的帖子以添加您的建议和结果:)
  • 顺便说一句,您确定 unix spark 用户对 jar 具有读取权限吗?它位于另一个 unix 用户的主目录中。这些并不是应该产生的几乎所有日志。

标签: hadoop apache-spark cloudera hadoop-yarn


【解决方案1】:

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

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

  • 在不同的端口上启动新的 Spark 会话,如下所示

    spark-submit --conf spark.ui.port=5051 <other arguments>`<br>`spark-shell --conf spark.ui.port=5051
    
  • 使用从4041到4056的端口查找所有spark session并使用kill命令杀死进程,netstat和kill命令可以分别用于查找占用该端口的进程并杀死进程。用法如下:

    sudo netstat -tunalp | grep LISTEN| grep 4041
    

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

tcp        0      0 :::4040    :::*         LISTEN      32028/java

一旦你找到进程 id(PID),你就可以使用下面的命令杀死 spark 进程(spark-shell 或 spark-submit)

sudo kill -9 32028

【讨论】:

    【解决方案2】:

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

    根据docs

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

    【讨论】:

    • spark 默认为 16,这对于在客户端模式下运行许多 spark 应用程序的某些机器来说太低了。以上是正确答案。
    【解决方案3】:

    以上答案都是正确的。但是,我们不应该尝试更改spark.port.maxRetries 的值,因为它会增加同一服务器上的负载,这反过来会降低集群性能并可能将节点推入死锁情况。负载可以通过uptime 检查会话中的命令。

    此问题的根本原因是当您尝试通过--deploy-mode client 运行所有 spark 应用程序时。

    如果您的集群中有分布式容量,最好的方法是使用--deploy-mode cluster 运行它。

    这样,每次它都会在不同的节点上运行 spark 应用程序,从而减轻同一节点上的端口绑定问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 2016-07-20
      • 2016-09-04
      相关资源
      最近更新 更多