如何从主机以Swarm模式连接到Spark Master

时间:2019-08-27 07:35:18

标签: python docker apache-spark pyspark docker-swarm

我想在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容器工作。

0 个答案:

没有答案