具有主服务发现的Spark Standalone模式

时间:2018-01-09 20:52:58

标签: apache-spark consul

我们有一个独立的火花,有2个主人。我们正在使用领事来发现我们所有的服务。因此,而不是写入工作程序配置,如: fun callIt(name: String) { val member = this::class.members.first { it.name == name } member.callBy(mapOf(member.instanceParameter!! to this)) }

我们只写

spark://172.40.101.1:7077,172.40.102.2:7077

问题是,如果例如172.40.101.1处于待机状态且172.40.102.2处于活动状态,并且在第一次工作人员将获得101.1,那么它将不会再次尝试。好像它是静态的。

现在我可以使用dig和linux解析,但我的问题是:

  1. 工作人员配置是否静态?
  2. 这个问题是否有最佳做法?

1 个答案:

答案 0 :(得分:1)

这个问题有两个部分。首先是如何识别活动(或待机)火花?第二个是如何使用该信息连接到正确的信息?

如果你可以通过web url get或者一个处于活动状态的进程操作,以及哪个处于备用状态,你可以根据它来创建服务/运行状况检查。谷歌搜索了一下,我看到火花领事服务,这是健康检查:

{
"service": {
  "name": "spark-master",
  "port": 7077,
  "checks": [
    {
      "script": "ps aux | grep -v grep | grep org.apache.spark.deploy.master.Master",
      "interval": "10s"
    }
  ]
}
}

此运行状况检查通过脚本查找java进程。如果找到该进程,则运行状况检查成功。此特定运行状况检查无论是活动还是待机,都不关心。您需要在具有不同名称的服务下进行运行状况检查,以确定spark节点是否处于活动状态。我对火花一无所知,但在网上看到我发现了这个spark-submit命令。如果这个命令按我想象的那样工作,那么这可能就是诀窍:

{
    "service": {
      "name":"spark-active"
      ,"port":7077
      ,"checks":[{"script": "curl --silent  http://127.0.0.1:8080/ | grep '<li><strong>Status:</strong> ALIVE</li>'| wc -l | awk '{exit (\$0 - 1) }'"
    }
}

然后你将使用:

进行连接
spark://spark-active.service:7077

您的健康检查也可以通过http连接。这里记录了领事服务检查:https://www.consul.io/docs/agent/checks.html

-g