什么是spark.local.ip,spark.driver.host,spark.driver.bindAddress和spark.driver.hostname?

xyz*_*ala 6 apache-spark

这些将有什么区别和用途?

  • spark.local.ip
  • spark.driver.host
  • spark.driver.bindAddress
  • spark.driver.hostname

如何在Spark独立集群中将计算机修复为驱动程序?

cda*_*int 6

精简版

ApplicationMaster 通过 spark.driver.host 连接到 spark Driver

spark 驱动程序绑定到客户端机器上的 bindAddress

通过例子

1 端口绑定示例

.config('spark.driver.port','50243')
Run Code Online (Sandbox Code Playgroud)

然后netstat -ano在窗户上

TCP    172.18.1.194:50243     0.0.0.0:0              LISTENING       15332
TCP    172.18.1.194:50243     172.18.7.122:54451     ESTABLISHED     15332
TCP    172.18.1.194:50243     172.18.7.124:37412     ESTABLISHED     15332
TCP    172.18.1.194:50243     172.18.7.142:41887     ESTABLISHED     15332
TCP    [::]:4040              [::]:0                 LISTENING       15332
Run Code Online (Sandbox Code Playgroud)

集群172.18.7.1xx中的节点与我的开发机器在同一网络中,172.181.1.194因为我的网络掩码是255.255.248.0

2 从 ApplicationMaster 到 Driver 指定 ip 的例子

.config('spark.driver.host','192.168.132.1')
Run Code Online (Sandbox Code Playgroud)

然后 netstat -ano

TCP    192.168.132.1:58555    0.0.0.0:0              LISTENING       9480
TCP    192.168.132.1:58641    0.0.0.0:0              LISTENING       9480
TCP    [::]:4040              [::]:0                 LISTENING       9480
Run Code Online (Sandbox Code Playgroud)

但是ApplicationMaster无法连接并报错

Caused by: java.net.NoRouteToHostException: No route to host
Run Code Online (Sandbox Code Playgroud)

因为这个ip是我开发机器上的VM桥

3 ip绑定的例子

.config('spark.driver.host','172.18.1.194')
.config('spark.driver.bindAddress','192.168.132.1')
Run Code Online (Sandbox Code Playgroud)

然后 netstat -ano

TCP    172.18.1.194:63937     172.18.7.101:8032      ESTABLISHED     17412
TCP    172.18.1.194:63940     172.18.7.102:9000      ESTABLISHED     17412
TCP    172.18.1.194:63952     172.18.7.121:50010     ESTABLISHED     17412
TCP    192.168.132.1:63923    0.0.0.0:0              LISTENING       17412
TCP    [::]:4040              [::]:0                 LISTENING       17412
Run Code Online (Sandbox Code Playgroud)

详细版本

在详细解释之前,只有这三个相关的conf变量:

  • spark.driver.host
  • spark.driver.port
  • spark.driver.bindAddress

像变量spark.driver.hostnamespark.local.ip。但有IS称为环境变量SPARK_LOCAL_IP

在解释变量之前,首先我们要了解申请提交过程

电脑的主要作用:

  • 开发机
  • 主节点(YARN / Spark Master)
  • 工作节点

每个应用程序都有一个ApplicationMaster,负责处理来自集群的资源请求和作业(阶段)的状态监控

ApplicationMaster 总是在集群中。

火花驱动器的位置

  • 开发机:客户端模式
  • 集群内:集群模式,与ApplicationMaster同处

假设我们正在谈论客户端模式

spark应用可以从开发机提交,开发机既是应用的客户端,也可以是集群的客户端。

spark 应用程序也可以从集群内的节点(主节点或工作节点或只是没有资源管理器角色的特定机器)提交

客户端机器可能与集群不在同一个子网中,这是这些变量试图处理的一种情况。想想您的互联网连接,通常不可能像 google.com 一样从全球任何地方访问您的笔记本电脑。

在申请提交过程开始时,客户端的spark-submit会将必要的文件上传到spark master或yarn,并协商资源请求。这一步客户端连接到集群,集群地址就是客户端尝试连接的目的地址。

然后 ApplicationMaster 在分配的资源上启动。

ApplicationMaster 分配的资源默认是随机的,不能由这些变量控制。如果您对此感到好奇,它由集群的调度程序控制。

然后 ApplicationMaster 尝试将BACK连接到 spark Driver。这是这些 conf 变量生效的地方。