Java 连接到docker上托管的远程Spark群集

Java 连接到docker上托管的远程Spark群集,java,docker,apache-spark,Java,Docker,Apache Spark,我在Ubuntu服务器上安装了一个Spark cluster,它有3个工作节点(使用docker compose)。 您可以查看所有群集信息。也可以从我的电脑访问(web ui),如下所示: 现在,我想从java驱动程序中添加一个作业,它是这样的: SparkSession spark = SparkSession.builder() .master("spark://nodemaster:7077") .appName("MongoSpark

我在Ubuntu服务器上安装了一个Spark cluster,它有3个工作节点(使用docker compose)。

您可以查看所有群集信息。也可以从我的电脑访问(web ui),如下所示:

现在,我想从java驱动程序中添加一个作业,它是这样的:

SparkSession spark = SparkSession.builder()
            .master("spark://nodemaster:7077")
            .appName("MongoSparkConnectorIntro")
            .config("spark.network.timeout",2000000)
            .config("spark.driver.port","32772")
            .config("spark.driver.host","172.31.64.69")
            .config("spark.driver.bindAddress","172.18.0.2")
            .config("spark.mongodb.input.uri", "mongodb://")
            .config("spark.mongodb.output.uri", "mongodb://")
            .getOrCreate();

我在windows 10上使用Intellij IDE。 我还将我的IP添加到/etc/hosts


有什么帮助吗?

不清楚您为什么认为需要
spark.driver
配置。master在另一台服务器上运行。驱动程序从可用的从机中随机选择端口(和主机)。此外,我对Mesos做了一些非常类似的事情,并找到了一个很好的图表来解释所有端口。我相信你在Kubernetes上使用Spark会比Docker Compose更幸运,因为网络配置已经得到了处理。另外,为什么要在一台机器上运行3个小工作程序,而不是让一台机器成为一个大工作程序?这样运行它不会实现真正的并行性,因为每个容器都共享相同的CPU内核和内存。另外,您还添加了一个额外的网络,HOPVM具有独立的内存和CPU资源,但仍然在一台机器上共享物理硬件,对吗?您仍然必须在分离的物理主机上运行虚拟机,才能产生真正的并行性。另外,Spark会增加可配置数量的内存或cpu内核的执行器,因此它应该已经能够扩展到使用所有可用的主机内存。您可以为Spark设置一个单独的k8s群集,如果您已经熟悉该群集,但不清楚您为什么认为需要
Spark.driver
配置。master在另一台服务器上运行。驱动程序从可用的从机中随机选择端口(和主机)。此外,我对Mesos做了一些非常类似的事情,并找到了一个很好的图表来解释所有端口。我相信你在Kubernetes上使用Spark会比Docker Compose更幸运,因为网络配置已经得到了处理。另外,为什么要在一台机器上运行3个小工作程序,而不是让一台机器成为一个大工作程序?这样运行它不会实现真正的并行性,因为每个容器都共享相同的CPU内核和内存。另外,您还添加了一个额外的网络,HOPVM具有独立的内存和CPU资源,但仍然在一台机器上共享物理硬件,对吗?您仍然必须在分离的物理主机上运行虚拟机,才能产生真正的并行性。另外,Spark会增加可配置数量的内存或cpu内核的执行器,因此它应该已经能够扩展到使用所有可用的主机内存。您可以为Spark设置单独的k8s群集,如果您已经熟悉的话
org.apache.spark.SparkContext: Running Spark version 2.4.1
org.apache.spark.SparkContext: Submitted application: MongoSparkConnectorIntro
org.apache.spark.SecurityManager: Changing view acls to: $USER
org.apache.spark.SecurityManager: Changing modify acls to: $USER
org.apache.spark.SecurityManager: Changing view acls groups to:
org.apache.spark.SecurityManager: Changing modify acls groups to:
org.apache.spark.SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users  with view permissions: Set($USER); groups with view permissions: Set(); users  with modify permissions: Set($USER); groups with modify permissions: Set()
org.apache.spark.util.Utils: Service 'sparkDriver' could not bind on a random free port. You may check whether configuring an appropriate binding address.