hadoop 通过distcp进行并行复制
前面的HDFS访问模型都集中于单线程的访问。例如通过指定文件通配,我们可以对一部分文件进行处理,但是为了高效,对这些文件的并行处理需要新写一个程序。Hadoop有一个叫distcp(分布式复制)的有用程序,能从Hadoop的文件系统并行复制大量数据。
distcp一般用于在两个HDFS集群中传输数据。如果集群在Hadoop的同一版本上运行,就适合使用hdfs方案:
% hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar
这将从第一个集群中复制/foo目录(和它的内容)到第二个集群中的/bar目录下,所以第二个集群会有/bar/foo目录结构。如果/bar不存在,则新建一个。我们可以指定多个源路径,并且所有的都会被复制到目标路径。源路径必须是绝对路径。
默认情况下,distcp会跳过目标路径已经有的文件,但可以通过提供的-overwrite选项进行覆盖。也可以用-update选项来选择只更新那些修改过的文件。
注意:使用-overwrite和-update中任意一个(或两个)选项会改变源路径和目标路径的含义。这可以用一个例子清楚说明。如果改变先前例子中第一个集群的子树/foo下的一个文件,就能通过运行对第二个集群的改变进行同步:
% hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo
目标路径需要末尾这个额外的子目录/foo,因为源目录下的内容已被复制到目标目录下。(如果熟悉rsync,你可以想像-overwrite或-update项对源路径而言,如同添加一个隐含的斜杠。)
如果对discp操作不是很确定,最好先对一个小的测试目录树进行尝试。
有很多选项可以控制分布式复制行为,包括预留文件属性,忽略故障和限制复制的文件或总数据的数量。运行时不带任何选项,可以看到使用说明。
distcp是作为一个MapReduce作业执行的,复制工作由集群中并行运行的map来完成。这里并没有reducer。每个文件都由一个单一的map进行复制,并且distcp通过将文件分成大致相等的文件来为每个map数量大致相同的数据。
map的数量是这样确定的。通过让每一个map复制数量合理的数据以最小化任务建立所涉及的开销,是一个很好的想法,所以每个map的副本至少为256 MB。(除非输入的总大小较少,否则一个map就足以操控全局。)例如,1 GB的文件会被分成4个map任务。如果数据很大,为限制带宽和集群的使用而限制映射的数量就变得很有必要。map默认的最大数量是每个集群节点(tasktracker)有20个。例如,复制1000 GB的文件到一个100个节点的集群,会分配2000个map(每个节点20个map),所以平均每个会复制512 MB。通过对distcp指定-m参数,会减少映射的分配数量。例如,-m 1000会分配1000个map,平均每个复制1 GB。
如果想在两个运行着不同版本HDFS的集群上利用distcp,使用hdfs协议是会失败的,因为RPC系统是不兼容的。想要弥补这种情况,可以使用基于HTTP的HFTP文件系统从源中进行读取。这个作业必须运行在目标集群上,使得HDFS RPC版本是兼容的。使用HFTP重复前面的例子:
% hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar
注意,需要在URI源中指定名称节点的Web端口。这是由dfs.http.address的属性决定的,默认值为50070。
保持HDFS集群的平衡
向HDFS复制数据时,考虑集群的平衡相当重要。文件块在集群中均匀地分布时,HDFS能达到最佳工作状态。回顾前面1000 GB数据的例子,通过指定-m选项为1,即由一个单一的map执行复制工作,它的意思是,不考虑速度变慢和未充分利用集群资源,每个块的第一个副本会存储在运行map的节点上(直到磁盘被填满)。第二和第三个副本分散在集群中,但这一个节点并不会平衡。通过让map的数量多于集群中节点的数量,我们便可避免这个问题。鉴于此,最好首先就用默认的每个节点20个map这个默认设置来运行distcp。
然而,这也并不总能阻止一个集群变得不平衡。也许想限制map的数量以便一些节点可以被其他作业使用。若是这样,可以使用balancer工具(参见第10章)继续改善集群中块的分布
hadoop 通过distcp进行并行复制的更多相关文章
- Hadoop权威指南:通过distcp并行复制
Hadoop权威指南:通过distcp并行复制 distcp是一个分布式复制程序,改程序可以从Hadoop文件系统间复制大量数据,也可以将大量的数据复制到Hadoop中 distcp的典型应用是在两个 ...
- MySQL 5.7 并行复制实现原理与调优
MySQL 5.7并行复制时代 众所周知,MySQL的复制延迟是一直被诟病的问题之一,然而在Inside君之前的两篇博客中(1,2)中都已经提到了MySQL 5.7版本已经支持“真正”的并行复制功能, ...
- [MySQL] 号称永久解决了复制延迟问题的并行复制,MySQL5.7
一.缘由: 某天看到主从复制延时的告警有点频繁,就想着是不是彻底可以解决一下. 一般主从复制,有三个线程参与,都是单线程:Binlog Dump(主) ----->IO Thread (从) - ...
- mysql 5.6并行复制事件分发机制
并行复制相关线程 在MySQL 5.6并行复制中,当设置set global slave_parallel_workers=2时,共有4个复制相关的线程,如下: +----+------------- ...
- MySQL5.6 基于db的并行复制
slave的几个类结构: Master_info:用于IO线程的参数,包括连接master实例的信息. Relay_log_info:用于sql线程,表示relay log相关的信 ...
- mysql并行复制降低主从同步延时的思路与启示
一.缘起 mysql主从复制,读写分离是互联网用的非常多的mysql架构,主从复制最令人诟病的地方就是,在数据量较大并发量较大的场景下,主从延时会比较严重. 为什么mysql主从延时这么大? 回答:从 ...
- [转载自阿里丁奇]各版本MySQL并行复制的实现及优缺点
MySQL并行复制已经是老生常谈,笔者从2010年开始就着手处理线上这个问题,刚开始两三年也乐此不疲分享,现在再提这个话题本来是难免"炒冷饭"嫌疑. 最近触发再谈这个话题,是 ...
- MySQL 并行复制从库发生自动重启分析
并行复制从库发生自动重启分析 背景 半同步复制从库在晚上凌晨2点半发生自动重启,另一个异步复制从库在第二天凌晨3点也发生了自动重启. 分析 版本mysql 5.7.16 mysql> show ...
- mysql 原理 ~ 并行复制
一 概念1 MTS(Prepared transactions slave parallel applier) 主库在同一时间进入prepare状态的事务可以被从库并行回放2 传统与改进 ma ...
随机推荐
- 深入理解ES6之——代理和反射(proxy)
通过调用new proxy()你可以创建一个代理来替代另一个对象(被称为目标),这个代理对目标对象进行了虚拟,因此该代理与该目标对象表面上可以被当做同一个对象来对待. 创建一个简单的代理 当你使用Pr ...
- selenium中的setUp,tearDown与setUpClass,tearDownClass的区别
def setUpClass(cls): cls.driver = webdriver.Chrome() cls.driver.maximize_window() def setUp(self): s ...
- .NET Core 小程序开发零基础系列(2)——小程序服务通知(模板消息)
基于上一篇文件“.NET Core 小程序开发零基础系列(1)——开发者启用并校验牵手成功”的反映,个人觉得效果很不错,大家对公众号开发还是有很大需求的,同时也收到了很多同学的问题,后面我也会通过实战 ...
- 牛客网2016.4.11(两个数相加为sum/计数一个int型的二进制有多少个1/二叉树是否左右对称)
求最小的两个数相加为sum //求最小的两个数相加为sum public ArrayList<Integer> FindNumbersWithSum(int [] array,int su ...
- JDBC、Tomcat为什么要破坏双亲委派模型?
问题一:双亲委派模型是什么 如果一个类加载器收到了加载某个类的请求,则该类加载器并不会去加载该类,而是把这个请求委派给父类加载器,每一个层次的类加载器都是如此,因此所有的类加载请求最终都会传送到顶端的 ...
- 移动端 rem单位做适配的 媒体查询节点
@media screen and (min-width:300px){html,body,input{font-size:15px}}@media screen and (min-width:320 ...
- MapDB使用入门
背景 MapDB官网:http://www.mapdb.org 官方翻译之后的话:MapDB基于堆外存储.磁盘存储提供了Java的Maps.Sets.Lists.Queues等功能.它混合了Java集 ...
- 分布式日志收集系统 —— Flume
一.Flume简介 Apache Flume 是一个分布式,高可用的数据收集系统.它可以从不同的数据源收集数据,经过聚合后发送到存储系统中,通常用于日志数据的收集.Flume 分为 NG 和 OG ( ...
- 海量数据搜索---demo展示百度、谷歌搜索引擎的实现
在我们平常的生活工作中,百度.谷歌这些搜索网站已经成为了我们受教解惑的学校,俗话说得好,“有问题找度娘”.那么百度是如何在海量数据中找到自己需要的数据呢?为什么它搜索的速度如此之快?我们都知道是因为百 ...
- codeforces 486 D. Valid Sets(树形dp)
题目链接:http://codeforces.com/contest/486/problem/D 题意:给出n个点,还有n-1条边的信息,问这些点共能构成几棵满足要求的树,构成树的条件是. 1)首先这 ...