文档章节

通过distcp进行并行复制

超人学院
 超人学院
发布于 2015/03/16 16:31
字数 1118
阅读 35
收藏 0

前面的HDFS访问模型都集中于单线程的访问。例如通过指定文件通配,我们可以对一部分文件进行处理,但是为了高效,对这些文件的并行处理需要新写一个程序。Hadoop有一个叫distcp(分布式复制)的有用程序,能从Hadoop的文件系统并行复制大量数据。

distcp一般用于在两个HDFS集群中传输数据。如果集群在Hadoop的同一版本上运行,就适合使用hdfs方案:

1.  % hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar 

这将从第一个集群中复制/foo目录(和它的内容)到第二个集群中的/bar目录下,所以第二个集群会有/bar/foo目录结构。如果/bar不存在,则新建一个。我们可以指定多个源路径,并且所有的都会被复制到目标路径。源路径必须是绝对路径。

默认情况下,distcp会跳过目标路径已经有的文件,但可以通过提供的-overwrite选项进行覆盖。也可以用-update选项来选择只更新那些修改过的文件。

注意:使用-overwrite-update中任意一个(或两个)选项会改变源路径和目标路径的含义。这可以用一个例子清楚说明。如果改变先前例子中第一个集群的子树/foo下的一个文件,就能通过运行对第二个集群的改变进行同步:

1.  % 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的文件会被分成4map任务。如果数据很大,为限制带宽和集群的使用而限制映射的数量就变得很有必要。map默认的最大数量是每个集群节点(tasktracker)20个。例如,复制1000 GB的文件到一个100个节点的集群,会分配2000map(每个节点20map),所以平均每个会复制512 MB。通过对distcp指定-m参数,会减少映射的分配数量。例如,-m 1000会分配1000map,平均每个复制1 GB

如果想在两个运行着不同版本HDFS的集群上利用distcp,使用hdfs协议是会失败的,因为RPC系统是不兼容的。想要弥补这种情况,可以使用基于HTTPHFTP文件系统从源中进行读取。这个作业必须运行在目标集群上,使得HDFS RPC版本是兼容的。使用HFTP重复前面的例子:

1.  % hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar 

注意,需要在URI源中指定名称节点的Web端口。这是由dfs.http.address的属性决定的,默认值为50070

更多分享请关注:bbs.superwu.cn

© 著作权归作者所有

共有 人打赏支持
超人学院
粉丝 108
博文 335
码字总数 388917
作品 0
昌平
CTO(技术副总裁)
HDFS的Shell访问和Java API访问

Shell访问HDFS常用命令 1.shell 操作单个 HDFS 集群 下面列举出几个常用场景下的命令。 1、创建文件夹 HDFS 上的文件目录结构类似 Linux,根目录使用 "/" 表示。下面的命令将在 /middle 目录...

等待救赎
2015/10/19
97
0
[Hadoop]数据复制DistCp

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/54668028 1.需求 我们项目中需要复制一个大文件,最开始使用的是hadoop cp命令,...

sjf0115
2017/01/22
0
0
hadoop深入研究:(四)——distcp

转载请注明出处:http://blog.csdn.net/lastsweetop/article/details/9086695 我们前几篇文章讲的都是单线程的操作,如果要并行拷贝很多文件,hadoop提供了一个小工具distcp,最常见的用法就...

lastsweetop
2013/06/18
0
0
hdfs 集群间数据交换 - HdfsDataExchanger

背景 当前比较流行的hdfs间数据迁移工具有hadoop默认提供的distcp,阿里开源的DataX,这些工具能够满足常规的大部分需求,但是当时碰到hadoop版本不一致、keberos授权等场景时就行不通了。针...

SebastianHe
10/12
0
0
HBase数据导入工具总结

本文对HBase常用的数据导入工具进行介绍,并结合云HBase常见的导入场景,给出建议的迁移工具和参考资料。 HBase之间数据导入常用工具 HBase提供了几种数据迁移工具,其中基于API调用的有Cop...

_陆豪
2017/08/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Apache 流框架 Flink,Spark Streaming,Storm对比分析

1.Flink架构及特性分析 Flink是个相当早的项目,开始于2008年,但只在最近才得到注意。Flink是原生的流处理系统,提供high level的API。Flink也提供 API来像Spark一样进行批处理,但两者处理...

hblt-j
4分钟前
0
0
Dubbo/HSF在Service Mesh下的思考和方案

开头 Service Mesh这个“热”词是2016年9月被“造”出来,而今年2018年更是被称为service Mesh的关键之年,各家大公司都希望能在这个思潮下领先一步。今天我也分享阿里中间件在这方面的观点,...

Mr_zebra
5分钟前
0
0
用命令卸载Win8 IE9/IE10/IE11浏览器

首先打开,开始---运行-----框里输入cmd,进入命令提示框,将下面的命令复制粘贴到命令框里,然后按下Enter键执行。 执行完命令,必须重启电脑。 卸载IE9的命令: FORFILES /P %WINDIR%\ser...

JackFace
6分钟前
0
0
2018年产品设计协作领域最强黑马居然是它?

我发了一条朋友圈“感谢池子的秘密法宝,我今天终于吃上了女朋友做的晚饭了”并配上香香的绿豆汤,瞬间获得好几十条评论。 “同为设计师,为啥你会这么早回家?” “快扶我起来,我还能画两个...

mo311
7分钟前
0
0
linux安装jdk1.8(rpm方式)

1:下载JDK的URL地址,例如:http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm。这个地址可以去Orcale的官网找到。通过w......

苏牧影子
12分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部