hadoop distcp hftp hdfs跨集群拷贝常见问题归总

在工作中遇到部门间数据合作,需跨不同版本集群拷贝数据,从hadoop 2.6.0-cdh5.7.0 拷贝数据到hadoop 2.7.1, 记录所碰到的问题及解决方案。

distcp基础用法

比如拷贝A集群(src集群)的A1目录到B集群(dest集群)的B1目录,

1.同版本集群拷贝(hdfs协议)

在dest集群(目标集群)运行命令:

hadoop distcp  hdfs://10.190.11.303:3333/user/common/liming/A1/    hdfs://10.120.20.22/user/zhangsan/B1/

其中10.190.11.303是src集群的namenode地址, 3333是src集群的rpc端口(hdfs-site.xml中可查看)。10.120.20.22是dest集群的namenode IP地址

2.跨集群版本拷贝(hftp协议)

同样在dest集群(目标集群)运行命令:

hadoop distcp hftp://10.190.11.303:50070/user/common/liming/A1/  hdfs://10.120.20.22/user/zhangsan/B1/

类似hdfs,但是目标集群的开头要用hftp, 而且端口要变为http端口(hdfs-site.xml中可查看,如果未配置,则需要配置)。

注意:如果集群间版本跨度不大,比如hadoop 2.6.0和hadoop2.7.0则也可以使用hdfs协议。

问题一:Java.net.SocketTimeoutException: connect timed out

原因分析:日志显示连接超时, 我们用的是hftp协议拷贝,需要连接src集群10.190.11.303 的50070端口,而此时连接超时,说明相关权限未开通。

解决办法:联系运维开通dest集群到src集群所有namenode 的50070端口的防火墙。如果防火墙开通了,还是出现此问题,可以修改src集群的iptables,将dest集群的所有机器加入iptables。

问题二: org.apache.hadoop.ipc.StandbyException : //s.apache.org/sbnn-error

原因分析:搜索"s.apache.org/sbnn-error", 发现它是个网站,顺便访问了一下“ http://s.apache.org/sbnn-error ” , 自动跳转到apache的wiki页面, 显示:

3.17. What does the message "Operation category READ/WRITE is not supported in state standby" mean?

In an HA-enabled cluster, DFS clients cannot know in advance which namenode is active at a given time. So when a client contacts a namenode and it happens to be the standby, the READ or WRITE operation will be refused and this message is logged. The client will then automatically contact the other namenode and try the operation again. As long as there is one active and one standby namenode in the cluster, this message can be safely ignored.

大意是说,DFS的客户端不知道哪一个namenode是活跃(active)的,所以当客户端连接一个备用的(standby)namenode时,读或写操作会被拒绝,所以打出这个日志。客户端会自动连接另一个namenode,重新操作。

但事实上,在我们这并没有自动连接另一个namenode,我也不知道为什么。

解决办法:换一个namenode, 保证新的namenode是活跃的。即用 hadoop distcp hftp://活跃的namenode:50070/path ....

问题三:java.net.UnknowHostException

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

解决办法:在dest集群中配置hosts文件,将src集群中所有的host和ip的对应关系追加到dest集群中的hosts文件中,使得dest集群在访问host名时(如pslave55)能自动映射到ip。

问题四: map 100%之后连接超时Java.net.SocketTimeoutException: connect timed out

错误的分析:map 100% 完成了,说明数据读取完毕,但是没有写进目标集群,说明写目标集群有问题。

正确分析:由于在网上没找到相关资料,我下载了hadoop源码, 查看了RetriableFileCopyCommand.java的源码,报错的位置是302行,如下图。

继续查看代码,getInputStream方法中有可能报连接超时的就是fs.open(path)这一行代码。继续研究相关源码,以及在源码中增加调试信息,运行得知,该文件系统fs已经初始化完毕,正是HftpFileSystem,其他的变量,如path等均正确。所以是文件系统open src集群上的文件时连接超时,还有相关的端口没有打开。

在执行distcp时,用tcpdump 抓取实际运行map的机器到src集群 host的tcp连接情况,如下图,也能发现数据length =0 , 没有真正的拷贝数据。

解决方案:开通dest集群到src集群所有datanode的http相关端口(默认为50075)。

(在本次项目中,我们误打误撞开通了dest集群到src集群所有datanode的控制端口50010, 然后运行hdfs协议就能跨集群版本拷贝数据了,所以没有再开通50075端口。)

问题五: java.io.IOException:Check-sum mismatch 

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

When we run distcp between source and destination clusters with different versions, we may get the below exception. This is because, distcp using MRV2(YARN) from older version to newer version, may fail with these checksum error messages. Each hadoop versions use different checksum versions. Older one uses CRC32 and newer versions use CRC32C.

来自:http://www.catchdba.com/2014/03/18/distcp-between-two-different-versions-of-hadoop/

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



总结

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

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

(2)按需开通如下端口的防火墙,如使用hdfs协议需要开通1,2项;如使用hftp协议至少需要开通1,3,4项。

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

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

(5)如果出现org.apache.hadoop.ipc.StandbyException, 换一个活跃的namenode试一试。

完。

附:常用HDFS端口配置

参考网页:

distcp 官方文档:https://hadoop.apache.org/docs/r1.0.4/cn/distcp.html  ,           https://hadoop.apache.org/docs/r1.2.1/distcp.html 

hdfs端口配置: http://www.cnblogs.com/ggjucheng/archive/2012/04/17/2454590.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容