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数据。

最新文章

  1. H5播放器
  2. 部署点评Cat监控项目(转)
  3. web框架--flask
  4. Xamarin Android中引用Jar包的方法
  5. [转]MVC3缓存之一:使用页面缓存
  6. How To Use DBLink In Oracle Forms 6i
  7. linux开发神器--Tmux
  8. php学习笔记:文件的上传(包含设置文件的上传大小限制)
  9. Vijos1901 学姐的钱包
  10. filesort
  11. AndroidSdk离线下载
  12. C#当中的多线程_线程基础
  13. java保留有效数字
  14. 【转】IGS相关
  15. 第23课 可变参数模板(4)_Optional和Lazy类的实现
  16. 洗礼灵魂,修炼python(47)--巩固篇—定义类的方法之@classmethod,@staticmethod
  17. php 中self,this的区别和实地操作
  18. 玩转mongodb(七):索引,速度的引领(全文索引、地理空间索引)
  19. Code Review Checklist and Guidelines for C# Developers
  20. vue测试安装和配置

热门文章

  1. spring boot 加载jsp
  2. 160524、Linux下如何启动、关闭Oracle以及打开关闭监听
  3. POJ 2374 Fence Obstacle Course(线段树+动态规划)
  4. HAPROXY简介
  5. Ajax 常用资源
  6. mysql导出成execl
  7. 转:Java并发编程与技术内幕:线程池深入理解
  8. Python3中的urlencode和urldecode
  9. docker安装入门
  10. java-mybaits-00402-Mapper-动态sql-if、where、foreach、sql片段