测试工具——Distcp工具深入分析

发表于:2013-11-01 11:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:凡提    来源:51Testing软件测试网采编

  引言
  DistCp命令是hadoop用户最常使用的命令之一,它位于hadoop tools包中,代码不多,约1300多行,主要用于在两个HDFS集群之间快速拷贝数据。DistCp工具代码结构清晰易懂,通过分析该工具的代码有助于我们更好的理解MR编程框架,并可以对hdfs文件系统有一个初步的了解。
  用法
  DistCp使用方法如下表所示:
OPTIONS:
-p[rbugp]              Preserve status
r: replication number
b: block size
u: user
g: group
p: permission
-p alone is equivalent to -prbugp
-i                     Ignore failures
-log <logdir>          Write logs to <logdir>
-m <num_maps>          Maximum number of simultaneous copies
-overwrite             Overwrite destination
-update                Overwrite if src size different from dst size
-f <urilist_uri>       Use list at <urilist_uri> as src list
-filelimit <n>         Limit the total number of files to be <= n
-sizelimit <n>         Limit the total size to be <= n bytes
-delete                Delete the files existing in the dst but not in src
  这里-p、-m、-overwrite都是常用参数,大多数情况下我们期望拷贝后数据权限保持一致,通过-p参数来完成权限一致性,拷贝并行度则由-m参数来调节。至于-overwrite往往和-delete合用,用来起到dst和src的一个diff功能。至于-update是很不靠谱的参数,因为只有当源和目标文件的大小不一致时distcp才会覆盖拷贝,如果大小一致,虽然内容不同distcp也依然会跳过这个文件不做拷贝。
  源代码与过程分析
  DistCp实现了org.apache.hadoop.util.Tool这个接口,这个接口实际只有一个有用的方法声明,即“int run(InputStream in, OutputStream out, OutputStream err,String... arguments);”通过ToolRunner这个类调度运行。
  DistCp解析完参数后,首先通过源路径检测并获得文件系统句柄。然后进入setup方法:
  private static void setup(Configuration conf, JobConf jobConf,
  final Arguments args)
  该方法是DistCp做准备工作的地方,首先是结合一个随机数生成一个工作目录,并将该目录路径作为参数传递给Mapper,在这个目录下会生成两个文件“_distcp_src_files”和“_distcp_dst_files”,这两个文件都是SequenceFile,即Key/Value结构的序列化文件,这里将记录所有需要拷贝的源目录/文件信息列表。其中_distcp_src_files 的key是源文件的size,如果是目录则记录为0,value是自己实现的Writable接口类FilePair,记录目标节点的org.apache.hadoop.fs.FileStatus和路径。_distcp_dst_files的key是目标路径,和节点的FileStatus。这两个文件是DistCp工具的关键点,在setup方法中,DistCp通过递归遍历了要拷贝的所有源头数据列表,生成了这两个文件。
  随后,DistCp会以268435456字节(256MB)为切分单位计算map数,这个数值可以通过-sizelimit参数进行人为修改。DistCp构造了自己的InputSplit,将_distcp_src_files文件以刚才所说的值为单位进行切分,如果设定了-m参数,则会按照该参数设定的map数为基准进行切分。这里需要注意切分的map数不会恰好等于-m参数设定的值,由于不能整除的原因,总会或多或少的偏离一点设定值。
31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号