从群集外部访问hdfs

时间:2016-02-10 18:33:33

标签: hadoop amazon-web-services amazon-ec2 hdfs hadoop2

我在aws上有一个hadoop集群,我试图通过hadoop客户端从集群外部访问它。我可以成功hdfs dfs -ls并查看所有内容,但当我尝试putget文件时,我收到此错误:

Exception in thread "main" java.lang.NullPointerException
    at org.apache.hadoop.fs.FsShell.displayError(FsShell.java:304)
    at org.apache.hadoop.fs.FsShell.run(FsShell.java:289)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    at org.apache.hadoop.fs.FsShell.main(FsShell.java:340)

我的群集和本地计算机都安装了hadoop 2.6.0。我已将群集的conf文件复制到本地计算机,并在hdfs-site.xml中提供了这些选项(以及其他一些选项)。

<property>
    <name>dfs.client.use.datanode.hostname</name>
    <value>true</value>
</property>
<property>
    <name>dfs.permissions.enable</name>
    <value>false</value>
</property>

我的core-site.xml在群集和客户端中都包含一个属性:

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://public-dns:9000</value>
  <description>NameNode URI</description>
</property>

我发现了类似的问题,但无法找到解决方案。

2 个答案:

答案 0 :(得分:0)

你怎么用SSH连接到那台机器?

我知道这是一个非常糟糕的想法,但为了完成工作,您可以先使用scp在计算机上复制该文件,然后通过SSH连接到该群集/主服务器并执行{ {1}}复制了本地文件。

您也可以通过脚本自动执行此操作,但这只是为了让您现在完成工作。

等待别人回答才知道正确的方法!

答案 1 :(得分:0)

运行hadoop fs -get时,我的群集出现了类似的问题,我可以解决它。只需使用本地主机的FQDN(完全限定域名)检查所有数据节点是否可解析。在我的情况下,nc命令成功使用数据节点的IP地址但不使用主机名。 在命令下运行: 我在cat /<host list file>;做nc -vz $ i 50010; DONE 50010是默认的datanode端口

当你运行任何hadoop命令时,它会尝试使用FQDN连接到数据节点,那就是它给出了这个奇怪的NPE。

执行以下导出并运行hadoop命令 export HADOOP_ROOT_LOGGER = DEBUG,console

当您尝试连接到任何数据节点进行数据传输时,您会看到此NPE。

我有一个java代码,它也使用API​​做hadoop fs -get,在那里,异常更清晰

java.lang.Exception:java.nio.channels.UnresolvedAddressException

如果这有助于您,请告诉我。