我有一个在AWS EMR 5.28.0上运行的Spark流应用程序(Spark 2.4.4)。在主节点上的驱动程序应用程序中,除了设置Spark Streaming作业之外,我还正在运行可以查询驱动程序应用程序数据的http服务器(Akka-http 10.1.6),我将端口绑定到端口6161,如下所示:] >
val bindingFuture: Future[ServerBinding] = Http().bindAndHandle(myapiroutes, "127.0.0.1", 6161) try { bindingFuture.map { serverBinding => log.info(s"AlertRestApi bound to ${serverBinding.localAddress}") } } catch { case ex: Exception => { log.error(s"Failed to bind to 127.0.0:6161") system.terminate() } }
然后我开始火花流:
ssc.start()
当我在本地Spark上测试时,我可以访问http://localhost:6161/myapp/v1/data并从Spark Streaming中获取数据,到目前为止一切都很好。
但是,当我在AWS EMR中运行此应用程序时,我无法访问端口6161。我将SSH插入驱动程序节点并尝试卷曲我的URL,它给我错误消息:
[hadoop@ip-xxx-xx-xx-x ~]$ curl http://xxx.xx.xx.x:6161/myapp/v1/data curl: (7) Failed to connect to xxx.xx.xx.x port 6161: Connection refused
当我查看驱动程序节点中的日志时,确实看到端口已绑定(为什么主机显示0:0:0:0:0:0:0:0:0?我不知道,那是开发测试中的一种方法,并且有效,我看到相同的日志并能够访问该URL):
20/04/13 16:53:26 INFO MyApp: MyRestApi bound to /0:0:0:0:0:0:0:0:6161
所以我的问题是,我应该怎么做才能访问驱动程序节点上端口6161上的api?我知道可能会涉及到纱线资源管理器,但是我对纱线资源管理器一无所知,无法指出要在哪里进行调查。
请帮助。谢谢
我有一个在AWS EMR 5.28.0上运行的Spark流应用程序(Spark 2.4.4)。在主节点上的驱动程序应用程序中,除了设置Spark Streaming作业外,我还在运行http服务器(...
您提到主机名是127.0.0.1还是0.0.0.0?