栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

云平台发放的虚拟机无法提交spark任务到大数据集群上(双IP):Service ‘sparkDriver‘ failed after 16 retries...correct binding ...

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

云平台发放的虚拟机无法提交spark任务到大数据集群上(双IP):Service ‘sparkDriver‘ failed after 16 retries...correct binding ...

1 现象描述

部分异常: Service 'sparkDriver' failed after 16 retries.......correct binding address.

云平台发放的虚拟机包含两个IP,包含虚拟机内部实际的网络地址(ifconfig查看到的内网IP:192.168.xx.xx)和对方访问的IP(绑定的外网虚拟IP:11.11.xx.xx),想要在云平台外访问虚拟机需要使用外网IP经过一次网络地址转换,直接使用内部IP是无法访问的。

所以在当任务提交的时候实际使用的是内部IP提交任务到spark集群,当spark集群与客户端交互时,也是访问这个内部IP地址,这显然是不可达的。从而导致任务无法正常执行下去。

2 解决方法

手动在客户端的spark-default.conf文件上加两个配置,即在提交任务时使用内部IP,接收spark集群的信息时,使用外部IP:

--------

spark.driver.host 外部IP                  // spark.driver.host 11.11.xx.xx
spark.driver.bindAddress 内部IP     // spark.driver.bindAddress  192.168.xx.xx

3 分析原因

具体可以参考下面这段源码:
 (1)Driver绑定的地址:DRIVER_BIND_ADDRESS:
          优先获取顺序依次是:spark.driver.bindAddress-》spark.driver.host-》Utils.localHostName()
 (2)Driver对外宣称的地址:DRIVER_HOST_ADDRESS
          优先获取顺序依次是:spark.driver.host-》Utils.localHostName() 

-------

解释: DRIVER_BIND_ADDRESS默认会取/etc/hosts里配置的外网IP,如果不加上述spark.driver.bindAddress 的配置,那内部IP就无法获取到,而默认的外部IP没有转换是无法直接联通客户端的。

private[spark] def createDriverEnv(
      conf: SparkConf,
      isLocal: Boolean,
      listenerBus: LiveListenerBus,
      numCores: Int,
      mockOutputCommitCoordinator: Option[OutputCommitCoordinator] = None): SparkEnv = {
    
    assert(conf.contains(DRIVER_HOST_ADDRESS),
      s"${DRIVER_HOST_ADDRESS.key} is not set on the driver!")
    
    assert(conf.contains("spark.driver.port"), "spark.driver.port is not set on the driver!")
    
    val bindAddress = conf.get(DRIVER_BIND_ADDRESS)
    val advertiseAddress = conf.get(DRIVER_HOST_ADDRESS)
    val port = conf.get("spark.driver.port").toInt
    
    val ioEncryptionKey = if (conf.get(IO_ENCRYPTION_ENABLED)) {
      Some(CryptoStreamUtils.createKey(conf))
    } else {
      None
    }
    create(
      conf,
      SparkContext.DRIVER_IDENTIFIER,
      bindAddress,
      advertiseAddress,
      port,
      isLocal,
      numCores,
      ioEncryptionKey,
      listenerBus = listenerBus,
      mockOutputCommitCoordinator = mockOutputCommitCoordinator
    )
  }

【Spark内核源码】Spark执行环境,SparkEnv_lazy_moon的博客-CSDN博客

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/941463.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号