阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop+Hbase集群数据迁移问题

223次阅读
没有评论

共计 2319 个字符,预计需要花费 6 分钟才能阅读完成。

数据迁移或备份是任何一个公司都有可能到遇到的一件事,有关 hbase 数据迁移,官网也给出了几种方案,这里比较推荐使用 Hadoop distcp 这种方式迁移。比较适合大数据量或者跨版本集群之间的数据迁移服务。

版本

Hadoop2.7.1

Hbase0.98.12

今天在迁移同版本的 hbase 数据时,在使用 Hadoop distcp 时发现下图的一个问题:

Hadoop+Hbase 集群数据迁移问题

这个错误时,是由于源文件的大小与目标文件大小不一致造成的,出现这个问题的原因不明确,然后在网上 google 查找类似错误,发现没有一样的例子,有的都是

关于 crc 文件校验和不匹配的问题,而上述错误,则是文件大小不一致,重试 3 次之后,都是类似错误,所以试着去 hadoop 的官网文档找答案,发现官网文档 distcp 里面

有个 update 的参数,官网解释如下:

Hadoop+Hbase 集群数据迁移问题

什么意思呢?

意思是如果再拷贝过程中,源文件和目标文件出现大小,块大小或者是校验和不一致的情况,会强制使用源文件替换目标文件,不到万不得己的

时候不要使用,使用这个需要谨慎,因为它可能会改变目标路径。

举个例子:

假设现在有 A 集群数据要迁移到 B 集群数据,并且 Hbase 的结构目录保持一致:

A 集群数据迁移的目录如下:

/data/01/a
/data/01/b
/data/01/c
/data/01/d
/data/01/e

理想情况下,B 集群迁移过去的目录是跟 A 集群的目录一致:

/data/01/a
/data/01/b
/data/01/c
/data/01/d
/data/01/e

但由于使用了 -update 之后,很有可能变成下面的目录结构:

/data/01
/data/a
/data/b
/data/c
/data/d
/data/e

出现这种情况,在 update 的文档已经描述了,因为使用这个命令时,会强制保留源文件的任何信息包括路径,这样以来才能 100% 保证拷贝过来的数据是不能发生任何变化的,虽然目录错位了,但是数据正确,可以通过一个小窍门解决这个问题,在拷贝的时候,如果已经知道某个 job 会出现这种情况,就提前将其目录的路径填写完整,这样就不用再手动移动文件到正确的目录里面了。比如原来我的迁移命令是这样的:

hadoop distcp hdfs://10.0.0.100:8020/hbase/data/default/ETLDB    hdfs://10.0.0.101:8020/hbase/data/default

可以正确迁移数据,但如果使用了 update 后,应该使用下面的路径,注意目标路径上加了表名,如果不存在,如果提前创建下

hadoop distcp -update  hdfs://10.0.0.100:8020/hbase/data/default/ETLDB    hdfs://10.0.0.101:8020/hbase/data/default/ETLDB

试想一个,如果你的 hbase 表有 10000 多个 region,那么则意味着,你需要处理这 10000 个错位的目录到正确的目录里面,虽然写个脚本也能自动化处理,但是这样的耗时也挺长,而且谁能保证,脚本不会出现问题,所以不推荐事后修补的方式。

迁移完成之后,启动 hbase 集群服务,并执行如下的两个命令,恢复元数据,否则 hbase 集群不会识别新迁移过来的表:

./hbase  hbck -fix
./hbase  hbck -repairHoles

总结:

(1)出现问题,不用紧张,可以先 google 找类似异常,如果没有则需要多看官网的 distcp 文档参数的介绍,注意文档的版本和你的 hadoop 的版本需要一致,否则有些参数可能已经废弃,过时,或者不支持。

(2)如果 distcp 一个很大的目录时,出现 xxx file not exist 的 IO 异常,可以试着减少拷贝的文件目录数量,如果还是不能通过,则需要回到 1 方式查找问题,大部分情况下,我们拷贝一个很少数量的目录时,是不容易出现问题的。

参考文档:

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

下面关于 Hadoop 的文章您也可能喜欢,不妨看看:

Ubuntu14.04 下 Hadoop2.4.1 单机 / 伪分布式安装配置教程  http://www.linuxidc.com/Linux/2015-02/113487.htm

CentOS 安装和配置 Hadoop2.2.0  http://www.linuxidc.com/Linux/2014-01/94685.htm

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-03/129533.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2319字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中