【问题标题】:Error arise when trying to access HDFS file on AWS from local machine尝试从本地计算机访问 AWS 上的 HDFS 文件时出现错误
【发布时间】:2017-09-05 16:13:33
【问题描述】:

我已经按照this tutorial 在 AWS EC2 上成功安装了 hadoop 和 spark。 我可以从 AWS 上的 spark 访问 HDFS。

但是,当我尝试从本地计算机访问 HDFS 文件时

val lines = sc.textFile("hdfs://namenode_public_DNS:9000/datasets/wikipedia/wikipedia.dat")
lines.first()

我明白了

17/04/10 16:35:41 WARN BlockReaderFactory: I/O error constructing remote block reader.
org.apache.hadoop.net.ConnectTimeoutException: 60000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=/datanode_ip:50010]

我该如何解决这个问题?

提前致谢。


  1. 所有 AWS 实例都设置为允许所有流量。
  2. 我只有 1 个名称节点和 1 个数据节点

【问题讨论】:

  • Namenode返回给Client的datanode IP是私网IP,本地机器无法访问。

标签: amazon-web-services hadoop apache-spark amazon-ec2 hdfs


【解决方案1】:

您用于 hdfs 的端口应该可以从外部访问。 尝试在本地机器上运行此命令。

$telnet namenode_public_DNS 9000

并检查天气,您可以访问您的 hdfs 端口。

【讨论】:

  • 输出是connected to namenode_public_DNS,Escape character is '^]'. 但是还是连接不上数据集。
  • 还为所有数据节点中的 50010 端口启用防火墙。
【解决方案2】:

请检查您是否为您的 EC2 实例正确配置了 Security Groups。默认情况下,您的 EC2 实例的安全组配置将不允许入站流量。您可以通过应用http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html#adding-security-group-rule 中给出的过程并为端口9000 添加入站流量来向您的安全组添加新规则(您不需要对出站执行任何操作,因为安全组是有状态的)。

【讨论】:

  • 我已检查所有实例都设置为允许所有流量。
  • 为了测试,能不能在本地安装Hadoop,这样你可以试试hadoop fs -ls hdfs://namenode_public_DNS:9000/datasets/wikipedia/wikipedia.dat?看看是否至少可以列出文件?
猜你喜欢
  • 2018-12-02
  • 2020-08-03
  • 2010-11-29
  • 2015-08-10
  • 1970-01-01
  • 2015-01-19
  • 2014-02-03
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多