worker是如何知道master在哪台机器上的?在配置文件中也没有配。
配置文件如下:
export JAVA_HOME=/apps/jdk1.8.0_171 export SCALA_HOME=/apps/scala-2.11.7 #export HADOOP_HOME=/apps/hadoop-2.8.0/ #export HADOOP_CONF_DIR=/apps/hadoop-2.8.0/etc/hadoop #export SPARK_MASTER_IP=master.hadoop export SPARK_WORKER_MEMORY=512m export SPARK_WORKER_CORES=2 export SPARK_WORKER_INSTANCES=1 export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master.hadoop:2181,slave1.hadoop:2181,slave2.hadoop:2181 -Dspark.deploy.zookeeper.dir=/spark" |
start-all.sh启动的时候会调用另外的两个脚本,分别是start-master.sh和start-slaves.sh
start-master.sh是启动的本地的master
start-slaves.sh会根据slaves文件里面配置的主机名,通过ssh的方式启动这些机器上的Worker
master启动后会连zookeeper,因为在spark-env.sh中配置了SPARK_DAEMON_JAVA_OPTS。Worker也会连zookeeper,然后通过zookeeper知道master的地址。所以说Worker是间接地通过zookeeper知道master的位置的。