从集群外部访问 hdfs
Access hdfs from outside the cluster
我在 aws 上有一个 hadoop 集群,我试图通过 hadoop 客户端从集群外部访问它。我可以成功 hdfs dfs -ls
并查看所有内容,但是当我尝试 put
或 get
文件时,我收到此错误:
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 进入 cluster/master 并在复制的本地文件上执行 hdfs dfs -put
。
您也可以通过脚本自动执行此操作,但同样,这只是暂时完成工作。
等别人回答才知道正确方法!
运行ning hadoop fs -get 时我的集群遇到了类似的问题,我可以解决它。只需使用本地主机的 FQDN(完全限定域名)检查您的所有数据节点是否可解析。在我的例子中,nc 命令成功地使用了数据节点的 IP 地址,但没有使用主机名。
运行 下面的命令:
因为我在 cat /<host list file>
;执行 nc -vz $i 50010;完毕
50010 是默认数据节点端口
当你 运行 任何 hadoop 命令时,它会尝试使用 FQDN 连接到数据节点,这就是它给出这个奇怪的 NPE 的地方。
执行下面的导出和 运行 你的 hadoop 命令
导出 HADOOP_ROOT_LOGGER=调试,控制台
当它试图连接到任何数据节点进行数据传输时,你会看到这个 NPE。
我有一个 java 代码,它也在使用 API 执行 hadoop fs -get,异常更清晰
java.lang.Exception: java.nio.channels.UnresolvedAddressException
如果这对您有帮助,请告诉我。
我在 aws 上有一个 hadoop 集群,我试图通过 hadoop 客户端从集群外部访问它。我可以成功 hdfs dfs -ls
并查看所有内容,但是当我尝试 put
或 get
文件时,我收到此错误:
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 进入 cluster/master 并在复制的本地文件上执行 hdfs dfs -put
。
您也可以通过脚本自动执行此操作,但同样,这只是暂时完成工作。
等别人回答才知道正确方法!
运行ning hadoop fs -get 时我的集群遇到了类似的问题,我可以解决它。只需使用本地主机的 FQDN(完全限定域名)检查您的所有数据节点是否可解析。在我的例子中,nc 命令成功地使用了数据节点的 IP 地址,但没有使用主机名。
运行 下面的命令:
因为我在 cat /<host list file>
;执行 nc -vz $i 50010;完毕
50010 是默认数据节点端口
当你 运行 任何 hadoop 命令时,它会尝试使用 FQDN 连接到数据节点,这就是它给出这个奇怪的 NPE 的地方。
执行下面的导出和 运行 你的 hadoop 命令 导出 HADOOP_ROOT_LOGGER=调试,控制台
当它试图连接到任何数据节点进行数据传输时,你会看到这个 NPE。
我有一个 java 代码,它也在使用 API 执行 hadoop fs -get,异常更清晰
java.lang.Exception: java.nio.channels.UnresolvedAddressException
如果这对您有帮助,请告诉我。