我想在Spark集群上运行python应用程序,但是我的应用程序不一定在master容器内。以下是我的撰写yaml文件:
export default class ControlledExpansionPanels extends Component {
constructor(props){
super(props)
this.state = {expanded: false}
}
handleChange = panel => (event, isExpanded) =>{
if(isExpanded) {
this.setState({expanded: panel})
} else {
this.setState({expanded: false})
}
}
render() {
const classes = useStyles();
return (
<div className={classes.root}>
<ExpansionPanel
expanded={this.state.expanded === "panel1"}
onChange={() => this.handleChange("panel1")}
>
<ExpansionPanelSummary
expandIcon={<ExpandMoreIcon />}
aria-controls="panel1bh-content"
id="panel1bh-header"
></ExpansionPanelSummary>
<ExpansionPanelDetails></ExpansionPanelDetails>
</ExpansionPanel>
<ExpansionPanel
expanded={this.state.expanded === "panel2"}
onChange={() => this.handleChange("panel2")}
>
<ExpansionPanelSummary
expandIcon={<ExpandMoreIcon />}
aria-controls="panel2bh-content"
id="panel2bh-header"
></ExpansionPanelSummary>
<ExpansionPanelDetails></ExpansionPanelDetails>
</ExpansionPanel>
</div>
)
}
}
当我创建一个堆栈并在Swarm集群上运行这两个容器,并使用以下SparkSession配置运行我的python应用程序时,我收到version: '3'
services:
spark-master:
image: bde2020/spark-master
deploy:
placement:
constraints:
[node.hostname == master]
environment:
- INIT_DAEMON_STEP=setup_spark
ports:
- '6080:8080'
- '6077:7077'
- '6040:4040'
spark-worker-1:
image: bde2020/spark-worker
depends_on:
- 'spark-master'
environment:
- 'SPARK_MASTER=spark://spark-master:7077'
ports:
- '6081:8081'
- '6041:4040'
错误。
connection refused
另一方面,当我使用spark = SparkSession.builder \
.master("spark://PRIVATE_HOST_IP:6077") \
.appName("Spark Swarm") \
.getOrCreate()
在正常模式下运行那些容器时,具有相同SparkSession配置的相同python应用程序的运行就像一个超级按钮。显然,这不是可取的,因为我想有可能按比例放大和缩小。因此,我正在寻找一种以Swarm模式运行应用程序的方法。
关于我的问题,奇怪的是,我非常确定端口映射正确完成,因为在设置堆栈之后,我可以通过docker-compose up
端口连接到Spark UI,这是我所使用的端口已映射到6080
。
另一点是,我已经通过相同的方法(将那些容器的服务端口映射到主机端口,并连接到主机上的设置端口)成功地连接到了其他容器,如Cassandra和Kafka。为Spark容器工作。