存档

文章标签 ‘数据迁移’

【Hadoop】跨版本在不同的hadoop集群之间迁移数据,以及一些错误的解决

2016年12月23日 评论已被关闭

在不同的hadoop集群之间迁移数据主要靠的是distcp命令,涉及到不同版本还要用到hftp协议传输。在这个过程中会有一系列的问题。

概述

distcp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。 由于使用了Map/Reduce方法,这个工具在语义和执行上都会有特殊的地方。 这篇文档会为常用distcp操作提供指南并阐述它的工作模型。

基本使用方法

distcp最常用在集群之间的拷贝:

hadoop distcp hdfs://master1:8020/foo/bar hdfs://master2:8020/bar/foo

如果集群的版本不一样,就不能用hdfs了,需要用hftp(HftpFileSystem), 这是一个只读文件系统,所以distcp必须运行在目标端集群上(更确切的说是在能够写入目标集群的TaskTracker上)。

例如下:

hadoop distcp hftp://master1:50070/foo/bar hdfs://master2:8020/bar/foo

需要注意的不是简单用hftp替换hdfs,hdfs后跟的是namenode的fs.default.name,而hftp后面是dfs.http.address,两者可以在hadoop安装目录的conf下的core-site.xml和hdfs-site.xml配置文件中看到。一般前者默认9000后者50070。