Hadoop配置分配主从节点流程及Spark集群作业节点分配机制问询
Hadoop节点分配工作流程
Hadoop的Master、Worker节点角色是通过静态配置预定义的,不存在运行时动态分配的逻辑,完整流程如下:
- 配置阶段
- 所有节点的
core-site.xml中统一配置fs.defaultFS参数,指定HDFS Master(NameNode)的访问地址,例如hdfs://192.168.1.10:9000 - 所有节点的
yarn-site.xml中统一配置yarn.resourcemanager.address参数,指定YARN Master(ResourceManager)的访问地址 - 仅在Master节点的
conf/workers(旧版本为slaves)文件中逐行写入所有Worker节点的IP/主机名 - 对应角色节点单独配置存储路径:NameNode配置
hdfs-site.xml的dfs.namenode.name.dir,Worker节点配置dfs.datanode.data.dir与yarn.nodemanager.local-dirs
- 所有节点的
- 启动阶段
- 在Master节点执行
start-dfs.sh、start-yarn.sh启动脚本时,脚本会读取本地workers文件的节点列表,通过SSH免密登录到所有列表内的节点,分别启动DataNode(HDFS Worker)和NodeManager(YARN Worker)进程,未在列表内的节点不会被纳入集群
- 在Master节点执行
- 注册阶段
- Worker节点的进程启动后,会主动向配置文件中指定的NameNode、ResourceManager发送心跳请求,Master节点验证通过后将其纳入可用资源池,后续才会给该节点分配存储、计算任务
Spark集群节点分配与spark-submit处理流程
节点与VM的绑定逻辑
Spark的Master、Worker和VM的绑定同样为静态预配置,分两种部署场景:
- Standalone独立部署模式:在Master节点的
conf/workers文件中写入所有作为Worker的VM的IP/主机名,conf/spark-env.sh中配置SPARK_MASTER_HOST指定Master所在VM的地址。启动集群时Master会通过SSH启动对应VM上的Worker进程,Worker启动后主动向Master注册心跳完成绑定 - YARN托管模式:无需单独配置Spark节点,直接复用YARN集群的ResourceManager(Master)和NodeManager(Worker VM)资源,Spark自身不负责节点分配
spark-submit提交作业时的资源分配流程
Standalone模式
- 执行
spark-submit时通过--master spark://<master-ip>:7077指定Master地址,作业提交请求首先发送到Master节点 - Master根据你提交时指定的
--executor-memory、--executor-cores、--num-executors参数,筛选当前已注册、剩余资源满足要求的Worker(对应VM) - Master向选中的Worker发送启动Executor的指令,对应VM上启动Executor进程后反向和作业Driver通信,后续任务由Driver直接调度到Executor执行
YARN模式
- 执行
spark-submit时指定--master yarn,请求首先发送到YARN的ResourceManager - ResourceManager先分配第一个Container启动Spark Driver:如果是
--deploy-mode cluster,Driver运行在随机选中的Worker VM上;如果是client模式,Driver运行在提交作业的本地机器上 - Driver启动后向ResourceManager申请Executor资源,ResourceManager从可用NodeManager(Worker VM)中分配符合要求的Container,通知对应NodeManager启动Executor,后续任务调度逻辑和Standalone模式一致
内容的提问来源于stack exchange,提问作者Patrick Schulz
相关产品推荐
相关产品推荐

