忙着做hadoop 1.x 到 2.x 的数据迁移.
hadoop 系统提供 了一个 命令 distcp 可以跨版本 迁移数据.
具体的命令格式: 在新的hadoop 版本上执行 .
两个集群间的所有的主机hosts 文件里要把对方的集群节点的主机名配置上去. 因为是mapreduce 作业,不然会job 失败.
在 hadoop 2.x 上执行 .
hadoop distcp hftp://hadoop1.x-namenode:50070/xxxx/xxx/xxx* /path-to-hadoop2.x/xxx/xxx
注意这里用的hftp 协议 ,不是hdfs 协议, hdfs 协议两边不通的.
如果你 hadoop 2.x 是默认安装的 还有个地方需要修改 , 不然会报文件校验 checksum 报错. 无法复制.
hadoop 1.x 的文件校验用的crc32
hadoop 2.x 的文件校验用的CRC32C 两个版本的hadoop 的校验方法不同,会报错.无法迁移数据.
在hadoop 2.x hdfs-site.xml 里增加 一个配置.
<property>
<name>dfs.checksum.type</name>
<value>CRC32</value>
<description>
when transfer data from hadoop 1.x to hadoop 2.x the data block checksum in hadoop 1.x is crc32
and hadoop 2.x is crc32c . transfer data will fail .
</description>
</property>
然后就ok 了.