我有一个带有Spark的AWS EMR集群。我可以连接到它(火花):
但无法连接到它:
我已阅读this question的答案。我检查了所有节点上的文件夹权限和磁盘空间是否正常。我的假设是我正面临James Wierzba在评论中提出的类似问题。但是,我没有足够的声誉在此添加评论。另外,考虑到它是特定于AWS EMR的,这可能是一个不同的问题。
SSH连接到主节点后,连接工作正常。
# SSHed to master node
$ ssh -i ~/identityfile hadoop@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com
# on master node
$ /usr/lib/spark/bin/beeline -u 'jdbc:hive2://localhost:10001/default'
# it connects fine and I can run commands, for e.g., 'show databases;'
# Beeline version 1.2.1-spark2-amzn-0 by Apache Hive
从另一个EMR群集的主节点到该节点的连接也可以正常工作。
但是,无法从我的本地计算机(macOS Mojave),Metabase和Redash进行连接。
我的本地计算机:
# installed hive (for beeline)
$ brew install hive
# Beeline version 3.1.1 by Apache Hive
# connect directly
# I have checked that all ports are open for my IP
$ beeline -u 'jdbc:hive2://ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com:10001/default'
# ERROR: ConnectException: Operation timed out
#
# this connection timeout probably has something to do with spark accepting only localhost connections
# I have allowed all the ports in AWS security group for my IP
# connect via port forwarding
# open a port
$ ssh -i ~/identityfile -Nf -L 10001:localhost:10001 hadoop@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com
$ beeline -u 'jdbc:hive2://localhost:10001/default'
# Failed to connect to localhost:10001
# Required field 'client_protocol' is unset!
$ beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http'
# org.apache.http.ProtocolException: The server failed to respond with a valid HTTP response
我在ec2中设置了Metabase和Redash。
元数据库→使用数据源Spark SQL连接→结果为
java.sql.SQLException: org.apache.spark.SparkException: java.io.IOException: Failed to create local dir in /mnt/tmp/blockmgr*
重击→使用数据源Hive连接→导致相同错误。
答案 0 :(得分:0)
您需要更新附加到EMR主节点的安全组的入站规则。您将需要添加网络提供商的公共IP地址。您可以在以下网站上找到您的公共IP地址:
有关如何使用您的IP地址更新入站规则的更多详细信息,请参阅以下AWS文档:
Authorizing Inbound Traffic for Your Linux Instances
如果您在受限的网络环境中工作,还应该检查自己网络的出站规则。
因此,请确保您要访问的所有端口都在网络中具有出站访问权限,并且在EMR的主节点安全组中具有入站访问权限。