Apache spark 在SparkSession中连接到远程Dataproc主机

Apache spark 在SparkSession中连接到远程Dataproc主机,apache-spark,hadoop,google-cloud-dataproc,Apache Spark,Hadoop,Google Cloud Dataproc,我在googleclouddataproc上创建了一个3节点(1个主节点,2个工作节点)的apachespark集群。当通过ssh与主机连接时,我能够将作业提交到集群,但是我无法远程使其工作。我找不到任何关于如何做到这一点的文档,除了AWS上的a,但这对我不起作用 这就是我正在尝试的 import pyspark conf = pyspark.SparkConf().setAppName('Test').setMaster('spark://<master-node-ip>:7077

我在googleclouddataproc上创建了一个3节点(1个主节点,2个工作节点)的apachespark集群。当通过ssh与主机连接时,我能够将作业提交到集群,但是我无法远程使其工作。我找不到任何关于如何做到这一点的文档,除了AWS上的a,但这对我不起作用

这就是我正在尝试的

import pyspark
conf = pyspark.SparkConf().setAppName('Test').setMaster('spark://<master-node-ip>:7077')
sc = pyspark.SparkContext(conf=conf)
导入pyspark
conf=pyspark.SparkConf().setAppName('Test').setMaster('spark://:7077'))
sc=pyspark.SparkContext(conf=conf)
我得到了错误

19/11/13 13:33:49 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
19/11/13 13:33:53 WARN StandaloneAppClient$ClientEndpoint: Failed to connect to master <master-node-ip>:7077
org.apache.spark.SparkException: Exception thrown in awaitResult: 
        at org.apache.spark.util.ThreadUtils$.awaitResult(ThreadUtils.scala:226)
        at org.apache.spark.rpc.RpcTimeout.awaitResult(RpcTimeout.scala:75)
        at org.apache.spark.rpc.RpcEnv.setupEndpointRefByURI(RpcEnv.scala:101)
        at org.apache.spark.rpc.RpcEnv.setupEndpointRef(RpcEnv.scala:109)
        at org.apache.spark.deploy.client.StandaloneAppClient$ClientEndpoint$$anonfun$tryRegisterAllMasters$1$$anon$1.run(StandaloneAppClient.scala:106)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Failed to connect to /<master-node-ip>:7077
        at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:245)
        at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:187)
        at org.apache.spark.rpc.netty.NettyRpcEnv.createClient(NettyRpcEnv.scala:198)
        at org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:194)
        at org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:190)
        ... 4 more
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: /<master-node-ip>:7077
        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
        at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:323)
        at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:633)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459)
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
        at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
        ... 1 more
Caused by: java.net.ConnectException: Connection refused
19/11/13 13:33:49警告NativeCodeLoader:无法为您的平台加载本机hadoop库。。。在适用的情况下使用内置java类
使用Spark的默认log4j配置文件:org/apache/Spark/log4j-defaults.properties
将默认日志级别设置为“警告”。
要调整日志记录级别,请使用sc.setLogLevel(newLevel)。对于SparkR,使用setLogLevel(newLevel)。
2013年11月19日13:33:53警告StandaloneAppClient$ClientEndpoint:无法连接到主机:7077
org.apache.spark.SparkException:结果中引发的异常:
位于org.apache.spark.util.ThreadUtils$.awaitResult(ThreadUtils.scala:226)
位于org.apache.spark.rpc.RpcTimeout.awaitResult(RpcTimeout.scala:75)
位于org.apache.spark.RpcEnv.setupEndpointRefByURI(RpcEnv.scala:101)
位于org.apache.spark.rpc.RpcEnv.setupEndpointRef(RpcEnv.scala:109)
位于org.apache.spark.deploy.client.StandaloneAppClient$ClientEndpoint$$anonfun$tryRegisterAllMasters$1$$anon$1.run(StandaloneAppClient.scala:106)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
运行(Thread.java:748)
原因:java.io.IOException:无法连接到/:7077
位于org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:245)
位于org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:187)
位于org.apache.spark.rpc.netty.nettyrpcev.createClient(nettyrpcev.scala:198)
位于org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:194)
位于org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:190)
... 4更多
原因:io.netty.channel.AbstractChannel$AnnotatedConnectionException:连接被拒绝:/:7077
在sun.nio.ch.socketchannel.checkConnect(本机方法)
位于sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
位于io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:323)
位于io.netty.channel.nio.AbstractNioChannel$AbstractNIOSafecure.finishConnect(AbstractNioChannel.java:340)
位于io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:633)
在io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized处(NioEventLoop.java:580)
位于io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497)
位于io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459)
位于io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
位于io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
... 还有一个
原因:java.net.ConnectException:连接被拒绝
我添加了一个防火墙规则,允许tcp:7077上的入口流量。但这并不能解决问题

实际上,我想在compute engine上设置一个VM,该VM可以在通过内部ip地址(在我创建的VPC中)连接时运行此代码,以便在dataproc上运行作业,而无需使用
gcloud dataproc jobs submit
。我在内部和外部IP上都试过了,但都不起作用


有人知道我怎样才能让它工作吗?

所以这里有一些东西需要解开

我想确保您了解的第一件事是,当您的分布式计算框架暴露于入侵流量时,您应该非常小心。如果Dataproc在端口7077上公开了Spark独立群集,则需要确保锁定该入口流量。听起来你知道这一点,因为你希望在共享VPC上有一个虚拟机,但即使在测试是否打开防火墙时,这一点也非常重要

不过,看起来你面临的主要问题是,你似乎在试图连接,好像这是一个问题。Dataproc实际使用的是。要连接,您需要将Spark Cluster Manager类型设置为“纱线”,并正确配置您的本地机器以与远程纱线群集通信,通过设置
warn site.xml
并让
HADOOP\u CONF\u DIR
指向它,或者通过
spark submit--CONF
直接设置
warn.resourcemanager.address

另请注意,一旦您知道Dataproc使用纱线,这与此问题类似: