在集群之间进行分布式拷贝,增加数据移动的效率
Hadoop分布式拷贝distcp是在集群内部或者集群之间高效拷贝大量数据的工具。它实质上是使用MapReduce框架进行拷贝。使用MapReduce进行拷贝的好处包括并行化,错误处理,有处理日志,还有报告。distcp工具在开发,研究和生产集群中拷贝数据很有作用。
准备工作
目标集群与源集群必须能够相互访问。
源集群应该将map任务的预测执行关闭。可以在配置文件mapredsite.xml中配置mapred.map.tasks.speculative.execution为false来完成。这将阻止一些难以预料的行为当map任务失败时。
源集群和目标集群必须使用相同的RPC协议。通常情况下,这就意味着源集群和目标集群要安装相同的Hadoop集群。
完成步骤
1将集群A中的weblogs文件夹拷贝到集群B
hadoop distcp hdfs://namenodeA/data/weblogs hdfs://namenodeB/data/weblogs
2将集群A中的weblogs文件夹拷贝到集群B,覆盖已经存在的文件
hadoop distcp –overwrite hdfs://namenodeA/data/weblogs hdfs://namenodeB/data/weblogs
3将集群A中的weblogs文件夹与集群B的weblogs文件夹进行同步
hadoop distcp –update hdfs://namenodeA/data/weblogs hdfs://namenodeB/data/weblogs
工作原理
在源集群中,被拷贝的文件被当做一个大的文件。一个Map任务将被创建,他将完成集群之间的拷贝工作。在默认的情况下每个Map将被分配大文件中的256M进行处理。例如,假设weblogs文件夹的大小为10GB,40个map每个将获得大概256M进行拷贝。在distcp中可以控制map的数目:
hadoop distcp –m 10 hdfs://namenodeA/data/weblogs hdfs://namenodeB/data/weblogs
在上面举的例子中,有10个map,每个map将拷贝1GB。