我有两个Hadoop集群,两者都运行相同的Hadoop版本。我在两个集群中都有一个用户“testuser”(示例)(因此两者都存在testuser keytabs)。
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?或者我错过了什么?
任何信息都将受到高度赞赏。提前谢谢。
答案 0 :(得分:3)
在两个安全集群之间使用distcp需要跨域认证。它没有在这两个集群中配置。正确设置跨领域身份验证后,它可以正常工作。