1)Distcp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。

2)distcp命令是以MR作业(没有R任务)的形式实现的,把文件和目录的列表作为M任务的输入。每一个文件是由一个M任务来拷贝的,distcp尽量把大小之和相同的各个文件导入到同一个M任务中。这样可以每个M任务拷贝的数据量大致相同。

3)集群之间的拷贝(HDFS版本相同):

bash$ hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020 /bar/foo

这个命令会把nn1集群的 /foo/bar 目录下的所有文件或目录名展开并存储到一个临时文件中,这些文件内容的拷贝工作被分配给多个M任务,然后每个TT分别执行从nn1到nn2的拷贝操作。【distcp使用绝对路径进行操作】

4) 多个源目录拷贝

bash$ hadoop distcp hdfs://nn1:8020/foo/a hdfs://nn1:8020/foo/b hdfs://nn2:8020/bar/foo

5) 更新-update和覆盖-overwrite

默认情况下,如果在拷贝的目的地同名文件已经存在,则会默认跳过这些文件。可以通过-overwrite选项指定覆盖掉同名文件,或者通过-update选项来更新同名文件。 关于distcp的更多用法,可以不加参数运行“hadoop distcp”命令来查看其用法。

6) 不同版本HDFS之间拷贝

如果两集群Hadoop版本不一致就不能使用hdfs标识符来拷贝文件了,因为两者的RPC系统是不兼容的。

  • 一种方法是使用基于只读的HTTP的HFTP文件系统来读取源数据(此命令在目标集群上执行,以确保RPC版本兼容),在命令中需要指定nn1的网络端口,它是由dfs.http.address指定的,默认为50070.
% hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar
  • 另一种方法是使用webhdfs协议(替换hftp协议),这样在拷贝的源和目的地都可以使用http而不用担心版本不兼容的问题:
% hadoop distcp webhdfs://namenode1:50070/foo webhdfs://namenode2:50070/bar

M任务的个数是按如下方式决定的:

1)     考虑到创建M任务的开销,每个M任务至少处理256MB的数据(如果总输入文件小于256MB,则把这些输入数据全部交给一个M任务执行)。例如,一个1GB大小的输入数据会被分配四个M任务来拷贝。

2)  如果待拷贝的数据实在很大,这时候就不能只按每个M任务256MB输入数据的标准来划分了,因为这样可能需要创建很多M任务。这时可以按每个DN有20个M任务来划分,例如,如果有1000GB的输入数据和100个节点,这是就会启动100*20=2000个M任务来拷贝数据,每个M任务拷贝512MB数据。同时我们也可通过-m选项指定要使用的M数,例如,-m 1000就会启动1000个M任务,每个M任务拷贝1GB数据。

HDFS并行复制Distcp的更多相关文章

  1. Hadoop权威指南:通过distcp并行复制

    Hadoop权威指南:通过distcp并行复制 distcp是一个分布式复制程序,改程序可以从Hadoop文件系统间复制大量数据,也可以将大量的数据复制到Hadoop中 distcp的典型应用是在两个 ...

  2. hadoop 通过distcp进行并行复制

    通过distcp进行并行复制 前面的HDFS访问模型都集中于单线程的访问.例如通过指定文件通配,我们可以对一部分文件进行处理,但是为了高效,对这些文件的并行处理需要新写一个程序.Hadoop有一个叫d ...

  3. MySQL 5.7 并行复制实现原理与调优

    MySQL 5.7并行复制时代 众所周知,MySQL的复制延迟是一直被诟病的问题之一,然而在Inside君之前的两篇博客中(1,2)中都已经提到了MySQL 5.7版本已经支持“真正”的并行复制功能, ...

  4. [MySQL] 号称永久解决了复制延迟问题的并行复制,MySQL5.7

    一.缘由: 某天看到主从复制延时的告警有点频繁,就想着是不是彻底可以解决一下. 一般主从复制,有三个线程参与,都是单线程:Binlog Dump(主) ----->IO Thread (从) - ...

  5. mysql 5.6并行复制事件分发机制

    并行复制相关线程 在MySQL 5.6并行复制中,当设置set global slave_parallel_workers=2时,共有4个复制相关的线程,如下: +----+------------- ...

  6. MySQL5.6 基于db的并行复制

    slave的几个类结构:      Master_info:用于IO线程的参数,包括连接master实例的信息.      Relay_log_info:用于sql线程,表示relay log相关的信 ...

  7. mysql并行复制降低主从同步延时的思路与启示

    一.缘起 mysql主从复制,读写分离是互联网用的非常多的mysql架构,主从复制最令人诟病的地方就是,在数据量较大并发量较大的场景下,主从延时会比较严重. 为什么mysql主从延时这么大? 回答:从 ...

  8. [转载自阿里丁奇]各版本MySQL并行复制的实现及优缺点

    MySQL并行复制已经是老生常谈,笔者从2010年开始就着手处理线上这个问题,刚开始两三年也乐此不疲分享,现在再提这个话题本来是难免"炒冷饭"嫌疑.    最近触发再谈这个话题,是 ...

  9. MySQL 并行复制从库发生自动重启分析

    并行复制从库发生自动重启分析 背景 半同步复制从库在晚上凌晨2点半发生自动重启,另一个异步复制从库在第二天凌晨3点也发生了自动重启. 分析 版本mysql 5.7.16 mysql> show ...

随机推荐

  1. 升级PHP版本导致zabbix无法访问解决办法

    故障现象:无法打开zabbix首页,提示缺少zabbix.conf配置文件 原因分析:升级yum安装php版本了,升级前卸载了原PHP5.4版本导致 解决办法: 重新安装zabbix yum inst ...

  2. win10系统下把Oracle卸载干净

    我和大家一样,遇到了一个问题,就是如何把Oracle从自己的电脑卸载干净,很多人都觉得很难把Oracle卸载干净,于是选择重装系统,因为解决不了Oracle没有卸载干净之后,重装不了的问题,有时候真的 ...

  3. Codeforces Round #426 (Div. 2)A题&&B题&&C题

    A. The Useless Toy:http://codeforces.com/contest/834/problem/A 题目意思:给你两个字符,还有一个n,问你旋转n次以后从字符a变成b,是顺时 ...

  4. iOS 10 获取相册相机权限

            AVAudioSession *audioSession = [[AVAudioSession alloc]init]; [audioSession requestRecordPerm ...

  5. registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped.

    最近在用maven整合SSH做个人主页时候,在eclipse里面使用tomcat7插件发布项目是没有问题的,但当打包成war之后,使用tomcat7单独发布项目,就出现了以下的错误. 严重: Cont ...

  6. 【Flask】在Flask中使用logger

    https://blog.csdn.net/yannanxiu/article/details/53557657 Flask在0.3版本后就有了日志工具logger,在Flask的官方文档中这么记载: ...

  7. Centos7下实现免密码登录

    一.生成密钥 [root@master ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to sa ...

  8. nginx日志配置(cookie,header,post等字段记录)

    如果你对nginx日志格式,有这样那样的要求. 那么就看一下说明吧. $remote_addr The remote host $remote_user The authenticated user ...

  9. visual studio 2015开发nodejs教程1搭建环境

    http://sailsdoc.swift.ren/ 这里有 sails中文文档 1 安装nodejsv6.10.3 下载地址  https://nodejs.org/dist/v6.10.3/nod ...

  10. UVA10763:Foreign Exchange&&UVA10340: All in All(水题)

    10763:水题不解释直接贴代码. #include <iostream> #include <string.h> #include <stdio.h> #incl ...