大数据集群机房搬迁数据迁移

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/6be827b25cb1

【一、背景】

按照中心总体计划,目前部署在生产区的运营大数据集群需要搬迁至万国机房。

本次采用的搬迁的方案是通过万国机房的72台物理主机上新建运营大数据集群,老集群应用数据同步至新集群的方式,之后应用进行迁移。确保数据不丢失,应用无感知。

本次变更完成新集群的搭建以及存量数据的同步。本文只对数据同步方案进行展开。

【二、迁移思路】

1. 搭建新集群

2. 将老集群中的数据全量拷贝到新集群

3. 由于在进行全量拷贝过程中,老集群数据量较大,需要的时间比较长,老集群又会有新的数据被写入,因此需要进行增量拷贝

4. 增量拷贝的数据量相对比较少,需要的时间比较短。可以迭代多次增量拷贝,直到最终增量拷贝的时间到了一个可接受的时间范围。

5. 选择合适的时间点,老集群停止应用,确保没有新数据写入,进行增量拷贝。(这里如果存在应用数据补录机制,也可以通过数据补录功能,将数据进行完善)

6. 增量拷贝完成之后,理论上新老集群数据一致,进行数据一致性检查

7. 进行集群切换

8. 业务端可以重写最近几天的数据,以确保数据是正确的

【三、迁移方案】

运营大数据集群上的组件包括hdfs、hbase、hive、impala、spark,因此计划对HDFS和HBase数据进行分开迁移。

这里要提一下,似乎也可以使用hadoop distcp方式复制HDFS上整个/hbase目录以备份数据。但是不推荐这种方案,原因有三:

1、该操作在复制文件的过程中会忽略文件的状态;

2、用户可能在memstore的刷写操作过程中复制数据数据,这与会导致数据中混杂新旧多种文件;

3、该操作会导致用户忽略在内存中还没有被刷写的数据。

低层次复制操作只操作那些已经持久化的数据。一种解决办法是禁止对这张表的写操作,明确地刷写这张表的内存,然后再复制HDFS。然而禁止对表的操作无法保证对业务的无感透明,因此对hbase的迁移采用snapshot方案。

【snapshot介绍】

快照是对表当前元数据做一个克隆,因为不实际拷贝数据,所以整个过程是很快的。主要分三个步骤:

1、加锁:对象是regionserver的memstore,目的是禁用在创建快照过程中的DML操作;

2、刷盘:刷盘是将当前还在memstore中的数据刷写在HDFS上,以保证数据的完整性;

3、创建指针:创建对HDFS文件的指针,实际并不拷贝数据,snapshot只是对元数据信息进行克隆。

【四、操作步骤】

1、hdfs迁移

在新集群的的namenode中进入hdfs用户 su - hdfs

在老集群的namenode中使用命令 hadoop distcp -overwrite -i webhdfs://源集群cm节点ip:NameNode Web UI 端口/solr webhdfs://目标集群cm节点ip:NameNode Web UI 端口

2、hbase迁移

基本迁移思路是先使用snapshot在目标集群恢复出一个全量数据,再使用replication技术增量复制源集群的更新数据,等待两个集群数据一致后将客户端请求重定向到目标集群。

a、存量数据同步步骤

1)在源集群为表建立快照

hbase shell中执行snapshot,spanhost 'sourceTable','snapshotName'

hbase(main):018:0* snapshot 'tbl_common_his_trans','tbl_common_his_trans20190320'

0 row(s) in 16.7940 seconds

然后在/hbase根目录下会产生一个目录:/hbase/.hbase-snapshot/,子目录为各个表的快照。

查看快照

hbase(main):025:0* list_snapshots

hbase(main):001:0> list_snapshots

SNAPSHOT                                   TABLE + CREATION TIME                 

 AgentEvent0321                            AgentEvent (Thu Mar 21 14:37:29 +0800 2019)             

 AgentInfo0321                             AgentInfo (Thu Mar 21 14:37:29 +0800 2019)     

 AgentLifeCycle0321                        AgentLifeCycle (Thu Mar 21 14:37:29 +0800 2019)

 …………………………

snapshotStringMetaData", "snapshotTestTable", "snapshotTraceV2", "snapshotTraces", "test0321_back0321", "tsdb-meta-wallet0321", "tsdb-meta0321", "tsdb-tree-wallet0321", "tsdb-tree0321", "tsdb-uid-wallet0321", "tsdb-uid0321", "tsdb-wallet0321", "tsdb0321", "tsdb0322"]

2)使用ExportSnapshot工具可用将源集群的快照数据迁移到目标集群

ExportSnapshot是HDFS层面的操作,会调用MR进行数据的并行迁移,因此需要在开启MR的机器上进行迁移。HMater和HRegionServer并不参与这个过程。

因此不会带来额外的内存开销及GC开销。唯一可能会在数据拷贝阶段对带宽和I/O产生影响,这可以通过指定-bandwidth进行限制。

sudo -u hbase hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot tbl_common_his_trans20190320 -copy-to hdfs://目标namenode地址:8020/hbase -mappers 12 -bandwidth 10

…………

…………

这里提一句,直接在原表snapshot上执行export会影响集群性能,在业务场景对性能要求很高的情况下,可用先把老表clone成一个新表,再对新表进行迁移,以避免对原表的直接操作。

3)到目标集群恢复快照

restore_snapshot 'tbl_common_his_trans20190320'

当然,也可以在页面上执行操作:CM界面——>hbase>表浏览器——>选中目标表——>右侧选择——>从快照还原表

数据比对:

hbase(main):005:0> count 'StringMetaData'

Current count: 1000, row: \x00ysf-19.239.6.83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7F\xFF\xFE\x97\xEC\x0B=R\xFF\xFF\xFF\xFF                                          

……………………                                       

29413 row(s) in 1.2730 seconds

=> 29413

b、增量数据同步

add_peer:在源集群上设置向目标集群上replication数据。所有对于replication的shell操作,只对列族为REPLICATION_SCOPE=>"1"才有效。

hbase(main):007:0> add_peer 'bak','zk1,zk2,zk3:2181:/hbase'

hbase(main):008:0> list_peers

 PEER_ID CLUSTER_KEY ENDPOINT_CLASSNAME STATE TABLE_CFS

 bak zk1,zk2,zk3:2181:/hbase nil ENABLED nil

1 row(s) in 0.1260 seconds

hbase(main):009:0> disable 'test'

hbase(main):010:0> alter 'test',{NAME => 'cf',REPLICATION_SCOPE => '1'}

hbase(main):011:0> enable 'test'

【检查步骤】

1、HDFS一致性检查

HDFS的一致性检查,可以通过HDFS文件数目,以及大小两个维度确认数据的一致性。

文件数目比对

比对新老集群,拷贝的HDFS目录以及文件的数目是否一致。理论上,应该完全一致,否则应该排查是什么原因,进行解决。

文件数据量比对

逐一比对新老集群,拷贝的HDFS目录,文件的数据量大小。理论上应该完全一致。如果不一致,应该进行数据更新。

2、 Hive一致性检查

在完成数据拷贝之后,理论上新老集群两边的数据是一致的,这个时候,我们需要进行数据一致性的对比,来确认是否数据是一致的。挑选部分关键的表格进行抽查一致性比对,主要包含如下内容:

(1)数据量比对

挑选部分关键表格,比对新老集群数据量的大小,注意这里的数据量大小并不会完全一致,原因是因为两边hadoop,hive等组件的版本都不相同,在数据存储上面会有细微的变化,因此最终的数据量是不同的。这里主要比对的是数据量的量级是否一致。

(2)Hive表格条数比对

挑选部分关键表格 ,比对新老集群Hive表格记录数。记录数应该完全一致。如果不一致,则需要重新同步。

(3)关键SQL结果比对

挑选部分的关键SQL,或者编写部分SQL,分别在新老集群运行,运行结果应该完全一致。如果不一致,则需要分析原因,重新同步

(4)Hive表格数对比

对比拷贝列表中的hive表格数与实际新集群的hive表格数是否一致。

注意,由于本次大数据平台只迁移部分数据,因此两边的表格数可能不同,但是关键数据库的表格应该相同。

1、HDFS一致性检查

HDFS的一致性检查,可以通过HDFS文件数目,以及大小两个维度确认数据的一致性。

分别在新老集群下面执行如下命令

hadoop fs -du -h / # 统计文件大小

hadoop fs -count / # 统计文件数量,返回的数据是目录个数,文件个数,文件总计大小

hadoop fs -count /user 

hadoop fs -count /hdfs

hadoop fs -count /hbase

逐一比对新老集群,拷贝的HDFS目录,文件的数据量大小。

2、 Hive一致性检查

在完成数据拷贝之后,主要包含如下内容:

(1)数据量比对

主要比对的是数据量的量级是否一致。

登录CM界面,进入hive界面,选择数据库>库名>表格名,查看当前表格的rows数字是否一致。

或登录元数据库

mysql> use hive

select * from TBLS where TBL_NAME='各个应用的表格名';

(2)表格数对比

hive 分别进入新老集群的hive shell界面

show tables; 查看当前hive中有哪些表格,比对新老集群中的表格数目是否一致。

(3)Hive表格条数比对

挑选部分关键表格 ,比对新老集群Hive表格记录数。记录数应该完全一致。如果不一致,则需要重新同步。

挑选应用表格,例tbl_test

select count(*) from tbl_test;逐一对比新老集群的应用表格数据量是否一致。

(4)关键SQL结果比对

挑选部分的关键SQL,或者编写部分SQL,分别在新老集群运行,运行结果应该完全一致。如果不一致,则需要分析原因,重新同步

在新老集群中逐个表进行sql查询,检验数据是否一致。例如表名为tbl_test

select * from tbl_test limit 1; 检查两个集群反馈结果是否一致

也可联系应用发起一笔查询,检查返回结果是否正确。

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

推荐阅读更多精彩内容

  • Zookeeper用于集群主备切换。 YARN让集群具备更好的扩展性。 Spark没有存储能力。 Spark的Ma...
    Yobhel阅读 7,234评论 0 34
  • 【什么是大数据、大数据技术】 大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法在合理时间内通过传统的应...
    kimibob阅读 2,732评论 0 51
  • 大数据集群迁移这件事,不知道有多少同学做过。我说的不是把一个集群的数据备份到另一个集群上。我指的是整个数据平台与大...
    彩色蚂蚁阅读 1,936评论 0 5
  • 解读《水浒传》之武松 一、解读人物: 最早知道武松,是从老一辈的闲谈中,那时候,每当提到《水浒》,人...
    2016小鱼的梦阅读 1,106评论 0 5
  • 怀念下鲜花吐艳的季节
    GuoFuhui阅读 237评论 0 0