我想将数据从CDH3复制到CDH4(在不同的服务器上)。我的CDH4服务器设置为无法看到CDH3,因此我必须将数据从CDH3上游推送到CDH4。 (这意味着我无法从CDH4运行distcp命令来复制数据)。如何通过在较低版本CDH3 hadoop上运行命令将数据传输到CDH4'HDFS,或者这是不可能的?
答案 0 :(得分:2)
理想情况下,您应该能够使用distcp将数据从一个HDFS集群复制到另一个HDFS集群。
hadoop distcp -p -update "hdfs://A:8020/user/foo/bar" "hdfs://B:8020/user/foo/baz"
-p保留状态,-update覆盖数据,如果文件已存在但具有不同的大小。
实际上,根据您使用的Cloudera的确切版本,您可能会遇到不兼容问题,例如CRC mismatch errors。在这种情况下,您可以尝试使用HTFP而不是HDFS,或者将群集升级到最新版本的CDH4,并检查release notes以查看是否存在任何相关的已知问题和解决方法。
如果您仍然遇到使用distcp的问题,请随时创建一个新的stackoverflow问题,其中包含确切的错误消息,CDH3和CDH4的版本以及确切的命令。
答案 1 :(得分:1)
在传输b / w 2个不同版本的HDFS时,您必须使用distcp和以下命令(注意 hftp ):
hadoop distcp hftp :// Source-namenode:50070 / user / hdfs:// destination-namenode:8020 / user /
答案 2 :(得分:0)
DistCp仅限于群集内。
我知道的唯一方法是“fs -get”,“fs -put”表示适合本地光盘的每个数据子集。
答案 3 :(得分:0)
对于两个不同版本的Hadoop之间的复制,通常会使用HftpFileSystem。这是一个只读的FileSystem,因此必须在目标集群上运行DistCp(更具体地说,可以在可写入目标集群的TaskTrackers上运行)。每个源都指定为hftp:///(默认dfs.http.address为:50070)。