繁体   English   中英

从群集外部访问hdfs

[英]Access hdfs from outside the cluster

我在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>

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

SSH进入那台计算机怎么样?

我知道这是一个非常糟糕的主意,但是要完成工作,您可以先使用scp将文件复制到计算机上,然后SSH到该群集/主hdfs dfs -put上, hdfs dfs -put对复制的本地文件执行hdfs dfs -put

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

等待其他人回答以了解正确的方法!

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

当您运行任何hadoop命令时,它会尝试使用FQDN连接到数据节点,多数民众赞成在该地方给出了这个奇怪的NPE。

在下面执行以下操作,并运行hadoop命令export HADOOP_ROOT_LOGGER = DEBUG,控制台

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

我有一个Java代码,它也在使用API​​进行hadoop fs -get,那里更加清晰

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

让我知道这是否对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM