hadoop集群之间的文件拷贝——distcp

来源:互联网 发布:c排序算法 编辑:程序博客网 时间:2024/05/29 12:46

    之前部门迁移hadoop,涉及到hive表的重建,以及hdfs上文件的迁移,还有oozie任务的修改。

    hive重建表比较简单,首先show create table tablename;然后把建表语句拷贝下来即可,这里要注意的是,最好把stored as XXX语句也加上。一开始我没加,还出了错,因为两个hadoop集群的hive建表时的默认的存储格式不一致。

    hdfs的数据迁移,有几种方式可以选择:

    1、如果数据在关系型数据库中也存在一份,可以直接使用sqoop命令导入新集群。

    2、如果表不是很多,可以先从hdfs上把数据get到本地,随后再load到新集群的hive表中,或直接put进相应的hdfs路径。

    3、使用hadoop distcp命令,这个命令是用于大规模集群内部和集群之间拷贝的工具。 它使用Map/Reduce实现文

件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部

分文件的拷贝。 由于使用了Map/Reduce方法,这个工具在语义和执行上都会有特殊的地方。

   下面是一个使用的例子:

    hadoop distcp -Dmapred.job.queue.name=xxx  -m 90 -update -skipcrccheck hftp://XXXX:50070/user/hive/warehouse/xxx.db/xxx/ user/hive/warehouse/xxx.db/xxx