Hadoop源生实用工具之distcp

1 概览

DistCp(Distributed Copy)是用于大规模集群内部或者集群之间的高性能拷贝工具。 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝

备注:在工作中遇到部门间数据合作,夸不同集群版本或者同版本不同集群的数据copy是不同的。

2 实用

总体来说分两类:

1) 同版本集群间数据copy ;

2) 夸集群版本数据copy;

 同版本集群间数据copy 

比如:拷贝A集群(nn1的IP192.168.7.120)的A目录到B集群(nn2的IP192.168.8.120)的B1目录

1 hadoop distcp  hdfs://192.168.7.120:8020/cluster/A/    hdfs://192.168.8.120:8020/cluster/B1/

小结

a) 使用hdfs协议,其中192.168.7.120是A集群的namenode地址, 8020是A集群的rpc端口(hdfs-site.xml中可查看)。192.168.8.120是B集群的namenode IP地址

b) 这条命令会将A集群中的/A文件夹以及文件夹下的文件复制到B集群中的/B1目录下,即在B集群中会以/B1/A的目录结构出现。如果/B1目录不存在,则系统会新建一个。需要注意的是,源路径必须是绝对路径。包含前面的hdfs://ip:port

添加多个数据源,指定多个源目录 如:

1  hadoop distcp hdfs:
2 
3 //192.168.7.120:8020/cluster/A/a1 hdfs://192.168.7.120:8020/A/a2 hdfs://192.168.8.120:8020/cluster/B1/

或者使用-f选项,从文件里获得多个源:

 hadoop distcp -f hdfs://192.168.7.120:8020/src_A_list hdfs://192.168.8.120:8020/cluster/B1/

其中src_A_list 的内容是

    hdfs://192.168.7.120:8020/cluster/A/a1

    hdfs://192.168.7.120:8020/cluster/A/a2

当从多个源拷贝时,如果两个源冲突,distcp会停止拷贝并提示出错信息, 如果在目的位置发生冲突,会根据选项设置解决。 默认情况会跳过已经存在的目标文件(c处说明;比如不用源文件做替换操作)。每次操作结束时 都会报告跳过的文件数目,但是如果某些拷贝操作失败了,但在之后的尝试成功了, 那么报告的信息可能不够精确。

每个JobTracker必须都能够与源端和目的端文件系统进行访问和交互。

拷贝完成后,建议生成源端和目的端文件的列表,并交叉检查,来确认拷贝真正成功。 因为distcp使用Map/Reduce和文件系统API进行操作,所以这三者或它们之间有任何问题 可能影响拷贝。

值得注意的是,当另一个客户端同时在向源文件写入时,拷贝很有可能会失败。 尝试覆盖HDFS上正在被写入的文件的操作也会失败。 如果一个源文件在拷贝之前被移动或删除了,拷贝失败同时输出异常 FileNotFoundException。

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

实战案例:

案例要求 从/cluster/A1/ 和 /cluster/A2/ 到 /cluster/B1的拷贝,源路径包括:hdfs://192.168.7.120:8020/cluster/A1hdfs://192.168.7.120:8020/cluster/A1/a1hdfs://192.168.7.120:8020/cluster/A1/a2hdfs://192.168.7.120:8020/cluster/A2hdfs://192.168.7.120:8020/cluster/A2/a3hdfs://192.168.7.120:8020/cluster/A2/a1

如果没设置-update或 -overwrite选项, 那么两个源都会映射到目标端的 /cluster/B1/A1A2。 如果设置了这两个选项,每个源目录的内容都会和目标目录的 内容 做比较。distcp碰到这类冲突的情况会终止操作并退出。默认情况下,/cluster/B1/A1 和 /cluster/B1/A2 目录都会被创建,所以并不会有冲突。现在讲-update用法:
distcp -update hdfs://192.168.7.120:8020/cluster/A1 \ hdfs://192.168.7.120:8020/cluster/A2 \ hdfs://192.168.8.120:8020/cluster/B1

其中源路径/大小:hdfs://192.168.7.120:8020/cluster/A1  hdfs://192.168.7.120:8020/cluster/A1/a1  32 hdfs://192.168.7.120:8020/cluster/A1/a2  64 hdfs://192.168.7.120:8020/cluster/A2  hdfs://192.168.7.120:8020/cluster/A2/a3  64 hdfs://192.168.7.120:8020/cluster/A2/a4  32

和目的路径/大小:hdfs://192.168.8.120:8020/cluster/B1 hdfs://192.168.8.120:8020/cluster/B1/a1  32 hdfs://192.168.8.120:8020/cluster/B1/a2  32 hdfs://192.168.8.120:8020/cluster/B1/a3  128

会产生:hdfs://192.168.8.120:8020/cluster/B1 hdfs://192.168.8.120:8020/cluster/B1/a1  32 hdfs://192.168.8.120:8020/cluster/B1/a2  32 hdfs://192.168.8.120:8020/cluster/B1/a3  64hdfs://192.168.8.120:8020/cluster/A2/a4   32
   发现部分192.168.8.120的a2文件没有被覆盖(a3却覆盖)。如果指定了 -overwrite选项,所有文件都会被覆盖。

d) distcp操作有很多选项可以设置,比如忽略失败、限制文件或者复制的数据量等。直接输入指令或者不附加选项则可以查看此操作的使用说明。

附件distcp可以选配的参数:

夸集群版本数据copy

 

hadoop distcp  hftp://192.168.7.120:50070/cluster/A/    hdfs://192.168.8.120:8020/cluster/B1

  

需要注意的是,要定义访问源的URI中NameNode的网络接口,这个接口会通过dfs.namenode.http-address的属性值设定,默认值为50070 ,参考hdfs-site.xml:

 

3 实战出现的问题总结

a)ipc.StandbyException : //s.apache.org/sbnn-error

 

 

解决:

Dfs所链接的namenode的状态不是active的 处于standby状态不予链接,所以方法:换一个namenode, 保证新的namenode是active

 

b)   java.io.IOException:Check-sum mismatch 

分析:该问题很常见,能在网上查到,是因为不同版本hadoop 的checksum版本不同,老版本用crc32,新版本用crc32c;

解决:只要在distcp时增加两个参数(-skipcrccheck -update),忽略crc检查即可。注意-skipcrccheck参数要与-update同时使用才生效。

 c) java.net.UnknowHostException

 

原因分析:图中可以看到,distcp job已经启动了,map 0%,  但是报了UnknowHostException:pslaves55,可能的原因是在从datanode取数据时,用的是host pslave55, 而这个host是数据源集群特有的,目标集群不识别,所以报UnknowHostException.

解决办法:在目标集群中配置hosts文件,将数据源集群中所有的host和ip的对应关系追加到目标集群中的hosts文件中,使得目标集群在访问host名时(如pslave55)能成功映射到ip

4 总结

要实现跨集群拷贝,如拷贝A集群的数据到B集群,需要确认以下事情:

(1)确认B集群机器都能ping通A集群所有ip。

(2) 用的port 响应在各自节点上放开 iptables 不要“拦住”

(3)如果部门间的端口防火墙已经开通,但还是telnet不同,请确认A集群的iptables已经加入了B集群ip。

(4)如果在B集群有UnknowHostException,则需要将A集群的host与ip映射关系追加到B集群的hosts文件中。

附上常用端口port 对照:

其他配置参考官方:

http://hadoop.apache.org/docs/r2.7.6/hadoop-distcp/DistCp.html

 

转载于:https://www.cnblogs.com/jagel-95/p/10945317.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用spy ++ (How to use Spy ++)

一个网友在我的一篇随笔后问道,如何使用spy 查找要用到的窗体类名以及相关信息 现把相关作法整理如下 如果你装了vs.net,在vs.net的工具里面就可以看到spy 打开spy ,会以树状图显示当前系统所有的窗体信息,如下所示 然后找到…

PL/SQL Developer 9 注册机

软件下载:下载 注册机下载:下载 说明:测试版本--9.0.1.1613(无需替换文件,输入注册信息即可) 附图: 转载于:https://www.cnblogs.com/zhanqi/archive/2011/10/12/2208750.html

程序图片运行效果存在偏差问题

2019独角兽企业重金招聘Python工程师标准>>> 当图片放到高分辨率的文件夹下,运行程序的手机却是低分辨率时就会出现该问题。解决办法很容易,就是把图片换个文件夹。比如图片放到drawable-xhdpi下,而模拟器是480*800,图…

如何将android例子程序添加到Eclipse进行调试运行

website:http://blog.csdn.net/whwzm88/article/details/6342583 1、打开Eclipse,选择File->new->Android Project,如附图所示窗口: 2、选择Create project from existing source单选框,然后点击->Browse..., 找到想要查看的android例子目录: 备注&…

坦克大战 Java版

由于博客开通不久,以前没有博客,顺便把以前做的项目也介绍下 希望大家支持,谢谢 坦克大战 IDE:MyEclipse 9.0 语言:Java SE 数据库:由于是单机版,不需要较高的安全性,且数据量较小&a…

c# 扩展方法奇思妙用高级篇五:ToString(string format) 扩展

在.Net中,System.Object.ToString()是用得最多的方法之一,ToString()方法在Object类中被定义为virtual,Object类给了它一个默认实现: 1 publicvirtualstringToString()2 {3 returnthis.GetType().ToString();4 }.Net中原生的class…

PHP使用CURL抓取页面

cURL的基本原理 curl是利用URL语法在命令行方式下工作的开源文件传输工具&#xff0c;他能够从互联网上获得各种各样的网络资源。简单来说&#xff0c;curl就是抓取页面的升级版。 <?php//1.初始化&#xff0c;创建一个新cURL资源$ch curl_init(); //2.设置URL和相应的选…

Lync Server 2010迁移至Lync Server 2013故障排错 Part3 :内外网共享PPT提示证书问

最近在公司生产环境中部署Lync Server 2013并对公网发布后&#xff0c;发现公网未加域客户端在与内网用户共享PPT时&#xff0c;会报证书错误&#xff0c;如下图所示&#xff1a;但是内网是正确的&#xff0c;经过查询了一下Lync 客户端自身的日志信息后发现&#xff0c;公网客…

用WinInet开发Internet客户端应用指南

一&#xff1a;http://www.vckbase.com/document/viewdoc/?id545 二&#xff1a;http://www.vckbase.com/document/viewdoc/?id546 用WinInet开发Internet客户端应用指南&#xff08;一&#xff09; 编译/NorthTibet 一、概述一个Internet客户端程序的目的是通过Internet…

关于Android错误 View requires API level 14 (current...

2019独角兽企业重金招聘Python工程师标准>>> 问题描述&#xff1a;在界面配置文件main.xml中&#xff0c;可能用上某些控件&#xff08;例如GridLayout&#xff09;遇上下面所说的错误:View requires API level 14(current min is 8), 但将项目clear后&#xff0c;再…

javascript 基础 转

最近面试过一些人, 发现即使经验丰富的开发人员, 对于一些基础的理论和细节也常常会模糊. 写本文是因为就我自己而言第一次学习下面的内容时发现自己确实有所收获和感悟. 其实我们容易忽视的javascript的细节还有更多, 本文仅是冰山一角. 希望大家都能通过本文有所斩获.一. Jav…

2019春第二次课程设计实验报告

2019春第二次课程设计实验报告 一、实验项目名称 用数组实现反弹球消砖块 二、实验项目功能描述 利用键盘按键控制小球方向让小球碰到挡板后反弹上去消除砖块。 三、项目模块结构介绍 四、实现界面展示 五、代码托管链接 https://gitee.com/huangxuannn/events 六、实验总结 上…

nodejs+redis

为什么80%的码农都做不了架构师&#xff1f;>>> redis可以用来管理session http://www.csser.com/board/4f77e6f996ca600f78000936 然后使用的时候redis-server这个服务进程得开着&#xff0c;不然会悲剧的 转载于:https://my.oschina.net/kiloct/blog/137629

FxCAD 实验三 实现对象的【属性】事件

接着实验三&#xff0c;本次实验&#xff0c;实现鼠标右键点击【图形对象时】可以弹出一个【WinForm】属性界面 添加一个WindowsForm 界面&#xff0c;如图。类名字&#xff1a;FormBox 回到FxBox类文件 覆盖 SelectEvent 方法&#xff0c;添加上面的代码 运行程序&#xff0c;…

图像的灰度处理

图像的灰度处理的三种方法&#xff1a; 1.imread的方法将像素值修改为0 2.调用一个RGB转灰度的方法实现灰度转化&#xff08;cv2.COLOR_BGR2GRAY&#xff09; 3.R G B 的均值取灰度值来灰度转化&#xff08;原理&#xff09; 处理结果 如下: 转载于:https://www.cnblogs.com/Ja…

面向对象基础-委托与事件

首先举一个实例&#xff1a;创建一个控制台程序&#xff0c;需求是&#xff1a;有一只猫Tom&#xff0c;有两只老鼠Jerry和Jack&#xff0c;Tom只叫一声“喵&#xff0c;我是Tom”&#xff0c;两只老鼠就说“老猫来了&#xff0c;快跑”&#xff0c;我们来分析一下&#xff1a;…

linux下wget的用法

2019独角兽企业重金招聘Python工程师标准>>> Linux wget是一个下载文件的工具&#xff0c;它用在命令行下。对于Linux用户是必不可少的工具&#xff0c;尤其对于网络管理员&#xff0c;经常要下载一些软件或从远程服务器恢复备份到本地服务器。如果我们使用虚拟主机…

【传智播客】Libevent学习笔记(三):事件循环

目录 00. 目录01. event_base_loop函数02. event_base_dispatch函数03. event_base_loopexit函数04. event_base_loopbreak函数05. event_base_got_exit函数06. event_base_got_break函数07. event_base_dump_events函数08. event_base_dump_events函数09. 废弃的事件循环函数1…

Android的MVC框架

http://www.cnblogs.com/wanghafan/archive/2012/07/20/2600786.html MVC是当前比较流行的框架&#xff0c;随便Google下&#xff0c;就可以发现几乎所有的应用程序开发中都采用了MVC框架&#xff0c;例如&#xff1a;.NET&#xff0c;Java Spring&#xff0c;Java Struts&…

DVWA-SQL注入

SQL注入解题思路 寻找注入点&#xff0c;可以通过web扫描工具实现通过注入点&#xff0c;尝试得到连接数据库的用户名&#xff0c;数据库名称&#xff0c;权限等信息。猜解关键数据库表极其重要字段与内容。通过获得的用户信息寻找后台进行登录。利用后台上传webshell或一句话木…