HDFS的distcp命令

  Java API等多种接口对HDFS访问模型都集中于单线程的存取,如果要对一个文件集进行操作,就需要编写一个程序来执行并行操作。HDFs提供了一个非常实用的程序——distcp ,用来在Hadoop文件系统中并行地复制大数据量文件。distcp一般适用于在两个HDFS集群间传送数据的情况。如果两个集群都运行在同一个Hadoop版本上,那么可以使用HDFS模式:

  hadoop  distcp  hdfs://NameNode1/foo  hdfs://NameNode2/bar

  这条命令会将第一个集群中的/foo文件夹以及文件央下的文件复制到第二个集群中的/bar目录下,即在第二个集群中会以/bar/foo的目录结构出现。如果/bar目录不存在,则系统会新建一个。也可以指定多个数据源,并且所有的内容都会被复制到目标路径。需要注意的是,源路径必须是绝对路径。即 hdfs://NameNode1/foo

  默认情况下,虽然distcp会跳过在目标路径上已经存在的文件,但是通过-overwirte选项可以选择对这些文件进行覆盖重写,也可以使用,-update选项仅对更新过的文件进行重写

  distcp操作有很多选项可以设置,比如忽略失败、限制文件或者复制的数据量等。直接输入指令或者不附加选项则可以查看此操作的使用说明。即distcp。具体实现时,distcp操作会被解析为一个MapReduce操作来执行,当没有Reducer操作时,复制操作被作为Map操作并行地在集群节点中运行。因此,每个文件都可被当做一个Map操作来执行复制操作。而distcp会通过执行多个文件聚集捆绑操作,尽可能地保证每个Map操作执行相同数量的数据。那么,执行distcp时,Map操作如何确定呢?由于系统需要保证每个Map操作执行的数据量是合理的,来最大化地减少Map执行的开销,而按规定,每个Map最少要执行256MB的数据量(除非复制的全部数据量小于256MB)。比如要复制1GB的数据,那么系统就会分配4个Map任务,当数据量非常大时,就需要限制执行的Map任务数,以限制网络带宽和集群的使用率。默认情况下,每个集群的一个节点最多执行20个Map任务。比如,要复制1000GB数据到100节点的集群中,那么系统就会分配2000个Map任务(每个节点20个),也就是说,每个节点会平均复制512MB。 还可以通过调整distcp的-m参数来减少Map任务量,比如-m 1000就意味着分配1000个Maps,每个节点分配1GB数据量

  如果尝试使用distcp进行HDFS集群间的复制,使用HDFS模式之后,HDFS运行在不同的Hadoop版本之上,复制将会因为RPC系统的不匹配而失败。为了纠正这个错误,可以使用基干HTTP的HFTP进行访问。因为任务要在目标集群中执行,所以HDFS的RPC版本需要匹配,在HFTF模式下运行的代码如下:

  hadoop  distcp  hftp://NameNode1:50070/foo  hdfs://NameNode2/bar
  需要注惫的是,要定义访问源的URI中NameNode的网络接口,这个接口会通过dfs.http.address的属性值设定,默认值为50070.

时间: 2024-07-29 05:11:10

HDFS的distcp命令的相关文章

Hadoop的distcp命令出现Permission denied错误

Hadoop的distcp命令可以实现将文件从一个hdfs文件系统中拷贝到另外一个文件系统中,如下所示: $ bin/hadoop distcp -overwrite hdfs://123.123.23.111:9000/hsd/t_url hdfs://123.123.23.156:9000/data/t_url 正常情况下应该出现如下运行结果: Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared m

HDFS中的命令行

HDFS中的命令行 本文介绍了HDFS以命令行执行的时候.几个经常使用的命令行的作用和怎样使用~ 1. fs fs是启动命令行动作,该命令用于提供一系列子命令. 使用形式为hadoop fs –cmd <args> 当中,cmd是子命令,args是详细的命令操作. 比如hadoop fs –help 或者说fs是其余子命令的父亲.其余都是在"-cmd"的模式下的! 2. –cat 输出 hadoop fs –cat URI 将路径指定的文件输出到屏幕 3. –copyFro

hadoop系列二:HDFS文件系统的命令及JAVA客户端API

转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6391518.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6.4 上一篇:hadoop系列一:hadoop集群安装 二:HDFS的shell命令 上一章说完了安装HADOOP集群部分,这一张讲HDFS. 其实基本上操作都是通过JAVA API来操作,所以这里的s

HDFS的Shell命令

一.HDFS的Shell命令 我们都知道HDFS 是存取数据的分布式文件系统,那么对HDFS 的操作,就是文件系统的基本操作,比如文件的创建.修改.删除.修改权限等,文件夹的创建.删除.重命名等.对HDFS 的操作命令类似于lLinux 的shell 对文件的操作,如ls.mkdir.rm 等.我们在执行HDFS的shell操作的时候,一定要确定hadoop 是正常运行的,我们可以使用使用jps 命令确保看到各个hadoop 进程.我们可以执行命令hadoop fs,来查看HDFS的shell操

HDFS常用shell命令

HDFS 文件操作命令 [[email protected] sbin]$ hadoop fs Usage: hadoop fs [generic options] [-appendToFile <localsrc> ... <dst>] [-cat [-ignoreCrc] <src> ...] [-checksum <src> ...] [-chgrp [-R] GROUP PATH...] [-chmod [-R] <MODE[,MODE]...

HDFS块检查命令Fsck机理的分析

前言 在HDFS中,所有的文件都是以block块的概念而存在的,那么在这样海量的文件数据的情况下,难免会发生一些文件块损坏的现象,那么有什么好的办法去发现呢.答案是使用HDFS的fsck相关的命令.这个命令独立于dfsadmin的命令,可能会让部分人不知道HDFS中还存在这样的命令,本文就来深度挖掘一下这个命令的特殊的用处和内在机理的实现. Fsck命令 其实说到fsck命令本身,熟悉Linux操作系统的人,可能或多或少听到过或使用过这个命令.Fsck命令的全称为file system chec

Hadoop学习第五次:HDFS的Shell命令

调用文件系统(FS)Shell命令应使用 bin/hadoop fs 的形式.所有的FS shell命令使用URI路径作为参数.URI格式是scheme://authority/path.HDFS的scheme是hdfs,对本地文件系统,scheme是file.其中scheme和authority参数都是可选的,如果未加指定,就会使用配置中指定的默认scheme.例如:/parent/child可以表示成hdfs://namenode:namenodePort/parent/child,或者更简

Hadoop 系列(六)—— HDFS 常用 Shell 命令

1. 显示当前目录结构 # 显示当前目录结构 hadoop fs -ls <path> # 递归显示当前目录结构 hadoop fs -ls -R <path> # 显示根目录下内容 hadoop fs -ls / 2. 创建目录 # 创建目录 hadoop fs -mkdir <path> # 递归创建目录 hadoop fs -mkdir -p <path> 3. 删除操作 # 删除文件 hadoop fs -rm <path> # 递归删除

hadoop HDFS的shell命令

http://www.cnblogs.com/sunddenly/p/3981583.html hadoopshell实战 http://www.cnblogs.com/sunddenly/category/611923.html hadoop