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

两个安全(kerberos)集群之间的Hadoop distcp,hadoop,mapreduce,cloud,cluster-computing,cloudera,Hadoop,Mapreduce,Cloud,Cluster Computing,Cloudera,我有两个Hadoop集群,它们都运行相同的Hadoop版本。我在两个集群中都有一个用户“testuser”(示例)(因此testuser键表在这两个集群中都存在) 我想使用hadoop distcp将一些文件从一个集群复制到另一个集群。示例:在源集群中,我有一个路径为“/user/testuser/temp/file-r-0000”的文件,在目标集群中,目标目录为“/user/testuser/dest/”。所以我想要的是将文件-r-0000从源集群复制到目标集群的“dest”目录 到目前为止,

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

我想使用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数据库中不存在主机地址(我没有这方面的确切日志)

那么,为了在它们之间使用discp,我是否需要以不同的方式配置kerberos?还是我在这里遗漏了什么


如有任何信息,将不胜感激。提前感谢。

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

kerberos设置的安全性目前如何-任何信息。关于这个?嗨,贾斯珀,我不知道它目前的设置如何。但一般来说,我会对上面的用户进行kinit(该用户有一个keytab文件:testuser.headless.keytab),到目前为止,所有服务都在这两个集群中工作。我认为kerberos与realm捆绑在一起,对吗?所以每个kerberos数据库都应该有关于其他域的信息,或者应该允许其他域?是的,应该正确设置跨域身份验证-这可能是问题所在。您可以禁用kerberos安全性并尝试一次,但我想这无论如何都会起作用。
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