两个安全(kerberos)集群之间的hadoop distcp

js81xvg6  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(1142)

我有两个hadoop集群,都运行相同的hadoop版本。两个集群中都有一个用户“testuser”(示例)(因此testuser keytab在这两个集群中都存在)。

Namenode#1 (source cluster): hdfs://nn1:8020
Namenode#2 (dest cluster): hdfs://nn2:8020

我想使用hadoop distcp将一些文件从一个集群复制到另一个集群。示例:在源集群中,我有一个路径为“/user/testuser/temp/file-r-0000”的文件,而在目标集群中,目标目录是“/user/testuser/dest/”。所以我想要的是将文件-r-0000从源集群复制到目标集群的“dest”目录。
我已经试过了:

hadoop distcp hdfs://nn1:8020/user/testuser/temp/file-r-0000 hdfs://nn2:8020/user/testuser/dest

hadoop distcp hftp://nn1:8020/user/testuser/temp/file-r-0000 hdfs://nn2:8020/user/testuser/dest

我相信我不需要使用“hftp://”,因为我有相同版本的hadoop。同样,我在这两个集群中也尝试了这些方法,但得到的只是一些与安全性相关的异常。
使用hftp从目标群集运行时:

14/02/26 00:04:45 ERROR security.UserGroupInformation: PriviledgedActionException as:testuser@realm cause:java.net.SocketException: Unexpected end of file from server
14/02/26 00:04:45 ERROR security.UserGroupInformation: PriviledgedActionException as:testuser@realm cause:java.net.SocketException: Unexpected end of file from server
14/02/26 00:04:45 INFO fs.FileSystem: Couldn't get a delegation token from nn1ipaddress:8020

从源群集运行时:

14/02/26 00:05:43 ERROR security.UserGroupInformation: PriviledgedActionException as:testuser@realm1 cause:java.io.IOException: Couldn't setup connection for testuser@realm1 to nn/realm2
With failures, global counters are inaccurate; consider running with -i
Copy failed: java.io.IOException: Call to nn1ipaddress failed on local exception: java.io.IOException: Couldn't setup connection for testuser@realm1 to nn/realm2

Caused by: java.io.IOException: Couldn't setup connection for testuser@realm1 to nn/realm2
    at org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:560)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1232)
    at org.apache.hadoop.ipc.Client$Connection.handleSaslConnectionFailure(Client.java:513)
    at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:616)
    at org.apache.hadoop.ipc.Client$Connection.access$2100(Client.java:203)
    at org.apache.hadoop.ipc.Client.getConnection(Client.java:1254)
    at org.apache.hadoop.ipc.Client.call(Client.java:1098)
    ... 26 more

它还显示kerberos数据库中不存在主机地址(我没有确切的日志)
那么,为了在kerberos之间使用discp,我需要以不同的方式配置kerberos吗?还是我在这里遗漏了什么?
如有任何信息,我们将不胜感激。提前谢谢。

blmhpbnm

blmhpbnm1#

在两个安全群集之间使用distcp需要跨域身份验证。在这两个集群中没有配置它。正确设置跨域身份验证后,它就工作了。

相关问题