从集群外部访问hdfs

3j86kqsm  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(554)

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

我的集群和本地机器上都安装了hadoop2.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>

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

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

我发现了类似的问题,但没能找到解决办法。

t9eec4r0

t9eec4r01#

你用ssh连接那台机器怎么样?
我知道这是一个非常糟糕的主意,但要完成这项工作,你可以先在机器上用 scp 然后ssh到集群/主机中 hdfs dfs -put 在复制的本地文件上。
你也可以通过一个脚本来实现自动化,不过,这只是为了暂时完成工作。
等别人回答才知道正确的方法!

mdfafbf1

mdfafbf12#

我在运行hadoop fs-get时遇到了类似的问题,我可以解决它。只需检查是否所有数据节点都可以从本地主机使用fqdn(完全限定域名)进行解析。在我的例子中,nc命令成功地使用了数据节点的ip地址,但没有使用主机名。在下面运行命令:for i in cat /<host list file> ; do nc-vz$i 50010;done 50010是默认的数据节点端口
当您运行任何hadoop命令时,它会尝试使用fqdn连接到数据节点,这就是它给出这个奇怪npe的地方。
执行下面的导出并运行hadoop命令export hadoop\u root\u logger=debug,console
当npe试图连接到任何数据节点进行数据传输时,您将看到它的出现。
我有一个java代码,它也在使用API做hadoop fs-get,在那里,异常更加清晰
java.lang.exception:java.nio.channels.unsolvedAddressException
如果这对你有帮助,请告诉我。

相关问题