hdfs集群间数据迁移

1、同版本的集群或集群内数据迁移(直接运行以下命令几乎不会有错误出现)

hadoop distcp hdfs://namenodeip:9000/user/root hdfs://namenodeip:9000/user/root

2、不同版本的集群数据迁移

hadoop distcp hftp://namenodeip1:50070/user/root hdfs://namenodeip2:9000/user/root

此命令与集群间的迁移不同,采用http协议,http协议的默认端口50070,即hftp://namenode1:50070

如果新集群与老集群之间不是所有集群都可以ssh无密码登录,则会报错,如下



15/01/14 10:30:10 INFO mapreduce.Job:  map 50% reduce 0%
15/01/14 10:30:10 INFO mapreduce.Job: Task Id : attempt_1421143152073_0009_m_000001_0, Status : FAILED
Error: java.io.IOException: File copy failed: hftp://192.168.80.31:50070/user/wp/test.txt --> hdfs://192.168.210.10:8020/user/wp1/wp/test.txt
    at org.apache.hadoop.tools.mapred.CopyMapper.copyFileWithRetry(CopyMapper.java:262)
    at org.apache.hadoop.tools.mapred.CopyMapper.map(CopyMapper.java:229)
    at org.apache.hadoop.tools.mapred.CopyMapper.map(CopyMapper.java:45)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:784)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.io.IOException: Couldn't run retriable-command: Copying hftp://192.168.80.31:50070/user/wp/test.txt to hdfs://192.168.210.10:8020/user/wp1/wp/test.txt
    at org.apache.hadoop.tools.util.RetriableCommand.execute(RetriableCommand.java:101)
    at org.apache.hadoop.tools.mapred.CopyMapper.copyFileWithRetry(CopyMapper.java:258)
    ... 10 more
Caused by: org.apache.hadoop.tools.mapred.RetriableFileCopyCommand$CopyReadException: java.net.SocketTimeoutException: connect timed out
    at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.getInputStream(RetriableFileCopyCommand.java:277)
    at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.copyBytes(RetriableFileCopyCommand.java:227)
    at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.copyToTmpFile(RetriableFileCopyCommand.java:164)
    at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.doCopy(RetriableFileCopyCommand.java:118)
    at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.doExecute(RetriableFileCopyCommand.java:95)
    at org.apache.hadoop.tools.util.RetriableCommand.execute(RetriableCommand.java:87)
    ... 11 more
Caused by: java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:158)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:411)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:525)
    at sun.net.www.http.HttpClient.(HttpClient.java:208)
    at sun.net.www.http.HttpClient.New(HttpClient.java:291)
    at sun.net.www.http.HttpClient.New(HttpClient.java:310)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:987)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:923)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:841)
    at sun.net.www.protocol.http.HttpURLConnection.followRedirect(HttpURLConnection.java:2156)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1390)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
    at org.apache.hadoop.hdfs.web.HftpFileSystem$RangeHeaderUrlOpener.connect(HftpFileSystem.java:370)
    at org.apache.hadoop.hdfs.web.ByteRangeInputStream.openInputStream(ByteRangeInputStream.java:120)
    at org.apache.hadoop.hdfs.web.ByteRangeInputStream.getInputStream(ByteRangeInputStream.java:104)
    at org.apache.hadoop.hdfs.web.ByteRangeInputStream.(ByteRangeInputStream.java:89)
    at org.apache.hadoop.hdfs.web.HftpFileSystem$RangeHeaderInputStream.(HftpFileSystem.java:383)
    at org.apache.hadoop.hdfs.web.HftpFileSystem$RangeHeaderInputStream.(HftpFileSystem.java:388)
    at org.apache.hadoop.hdfs.web.HftpFileSystem.open(HftpFileSystem.java:404)
    at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:766)
    at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.getInputStream(RetriableFileCopyCommand.java:273)
    ... 16 more

原因是在拷贝数据的时候,老集群与新集群的sockt不同,都设置ssh无密码登录即可

再次运行,会报第二个错误

Error: java.io.IOException: File copy failed: hftp://192.168.210.23:50070/test/input/test.txt --> hdfs://192.168.210.10:8020/user/wp1/input/test.txt
    at org.apache.hadoop.tools.mapred.CopyMapper.copyFileWithRetry(CopyMapper.java:262)
    at org.apache.hadoop.tools.mapred.CopyMapper.map(CopyMapper.java:229)
    at org.apache.hadoop.tools.mapred.CopyMapper.map(CopyMapper.java:45)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:784)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.io.IOException: Couldn't run retriable-command: Copying hftp://192.168.210.23:50070/test/input/test.txt to hdfs://192.168.210.10:8020/user/wp1/input/test.txt
    at org.apache.hadoop.tools.util.RetriableCommand.execute(RetriableCommand.java:101)
    at org.apache.hadoop.tools.mapred.CopyMapper.copyFileWithRetry(CopyMapper.java:258)
    ... 10 more
Caused by: java.io.IOException: Check-sum mismatch between hftp://192.168.210.23:50070/test/input/test.txt and hdfs://192.168.210.10:8020/user/wp1/.distcp.tmp.attempt_1421143152073_0011_m_000000_0. Source and target differ in block-size. Use -pb to preserve block-sizes during copy. Alternatively, skip checksum-checks altogether, using -skipCrc. (NOTE: By skipping checksums, one runs the risk of masking data-corruption during file-transfer.)
    at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.compareCheckSums(RetriableFileCopyCommand.java:190)
    at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.doCopy(RetriableFileCopyCommand.java:125)
    at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.doExecute(RetriableFileCopyCommand.java:95)
    at org.apache.hadoop.tools.util.RetriableCommand.execute(RetriableCommand.java:87)
    ... 11 more

是因为check-sum类型不对所致,

修复方式:修改hdfs-site.xml增加如下配置

错误即修复

你可能感兴趣的:(hadoop)