当前位置: 首页 > 知识库问答 >
问题:

在SparkSession中连接到远程Dataproc主机

巫马玉堂
2023-03-14

我在Google Cloud DataProc上创建了一个3节点(1个master,2个workers)的Apache Spark集群。当通过ssh与主服务器连接时,我可以向集群提交作业,但是我不能让它远程工作。我找不到任何关于如何做到这一点的文档,除了AWS上的一个类似问题,但这对我不起作用。

以下是我正在尝试的

import pyspark
conf = pyspark.SparkConf().setAppName('Test').setMaster('spark://<master-node-ip>: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

共有1个答案

胥英奕
2023-03-14

所以这里有一些东西要打开。

我想确保您理解的第一件事是,当您将分布式计算框架暴露给进入的流量时,您应该非常小心。如果Dataproc在端口7077上公开了Spark-Standalone群集,则需要确保锁定该入口通信量。听起来您知道,希望在共享的VPC上安装一个VM,但即使在测试是否打开防火墙时,这也是非常重要的。

不过,它看起来面临的主要问题是,您似乎试图连接,就像它是一个独立的Spark集群一样。Dataproc实际上在纱线上使用火花。要进行连接,您需要将Spark Cluster Manager类型设置为“YARN”,并正确配置本地计算机与远程YARN集群进行通信,方法是设置yarn-site.xml并让Hadoop_conf_dir指向它,或者通过spark-submit--conf直接设置YARN属性,如YARN.resourceManager.address

还要注意,如果您知道Dataproc使用Yarn:Scala Spark connect to remote cluster,这与此问题类似

 类似资料:
  • 我正在尝试使用JProfiler分析远程主机/服务器上的Web应用程序,但该过程似乎比我想象的要复杂。 我已经设法在我的开发工作副本上本地评测了,但结果在那里没有用处。 有没有一种方法可以将JProfiler连接到该服务器,而无需将其安装在远程机器/服务器上,因为这不是我拥有的选项。类似于远程调试,我在其中配置主机和端口并连接。 提前感谢!

  • 使用VisualVM,我可以看到两种类型来连接远程主机。 > jstatd 所以我正在尝试使用JMX,我学习了很多教程,但到目前为止还没有成功。 目前,有我的桌面和一个运行java服务器应用程序的linux盒子。我正在尝试在桌面上设置VisualVM客户端,以查看在linux Box上运行的java应用程序。 我为Linux上的java应用程序在start.sh脚本上添加了以下JAVA_OPTS脚

  • 问题内容: 我有以下骆驼对Redis进行投票: 而且效果很好。但是,当我将redisUri从 至 我收到以下错误: 我检查了通过telnet到并使用redis-cli可以访问elasticache。 连接到远程主机时出现此错误是什么? 我的本地redis和elasticache redis都运行2.8.24。运行骆驼2.17.1。 问题答案: 这是我的工作方式: 属性文件: 骆驼路线与以前相同。

  • 问题内容: 我在AWS中创建了一个3节点(1个主节点,2个工作人员)集群。我可以将作业从主服务器提交到群集,但是我无法使其在远程工作。 我可以从主人那里看到: 因此,当我从本地计算机执行时,它无法连接到: 但是,我知道如果将master设置为,它会起作用,因为那样它将在本地运行。但是,我希望客户端连接到该远程主服务器。我该怎么做?Apache配置外观文件。我什至可以远程登录到该公共DNS和端口,还

  • 感谢您抽出时间阅读我的问题-我正在使用EclipseIDE。我希望Jsoup连接https url-https://www.icegate.gov.in/使用 但它在线程“main”javax中给出了错误,而当我对其他https(如linkedin)使用相同的代码时,它就工作了。。。我不知道如何解决这个问题。 我获得了该网站的证书,并安装在我的jre/lib/security文件夹中,但它对我也没

  • 我正在尝试连接到SOAPendpoint。 使用上面的方法,我不断得到下面的错误 java.lang.Thread.run(未知来源)[na: 1.8。0_191]原因:com.sun.xml.messaging.saaj.SOAPExceptionImpl:消息发送失败com.sun.xml.messaging.saaj.client.p2p。HttpSOAPConnection.post(Ht