zoukankan      html  css  js  c++  java
  • 关于hbase的数据迁移

    场景:

    一套自己编译的Hbase集群 A

    一套自己通过cloudera平台搭建的Hbase集群 B

    注意:( 我的两套集群是同一个网段的)

    方式1:通过快照方式进行数据迁移(不需要提前建表)

    1):首先现在老集群A上进行快照制作(hbase命令行)

    hbase> snapshot '要快照的表名tableA' , '快照名称snapA'

    查看快照:list_snapshots

    删除快照:delete_snapshot '快照名称snapA'

    2):开始快照迁移(将集群A的快照迁移到集群B上)

    bin/hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot 快照名称snapA -copy-to hdfs://newCluster:8082/hbase

    3):登录新集群的hbase命令行,然后执行

    restore_snapshot 'snapA'

    但是执行第3)步时候报错:

    Caused by: java.lang.IllegalArgumentException: A clone should not have regions to restore

    发现其实自己编译的快照和cloudera平台的Hbase不兼容。so,这种方式不合适

    方式2:在老集群A上通过bulkload写入新集群B上(需要提前建表,别忘记预分区)

    1):在新集群B 提前将表创建好,例如:

    create 'renter_info',{NAME =>'MM', COMPRESSION => 'SNAPPY'}, SPLITS => ['19999999', '33333332', '4ccccccb', '66666664' , '7ffffffd' , '99999996' , 'b333332f' , 'ccccccc8' , 'e6666661']

    2):在老集群A 执行bulkload命令语句:

    bin/hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dcreate.table=no -DHbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=2014 hdfs://newCluster:8020/hbase/data/default/order_info

    依然执行不过去!

    因此上面的方式1、方式2其实是很依赖是否集群版本兼容问题

    方式3:hadoop distcp 方式

    1):通过hadoop distcp将集群A中要迁移的表数据 通过分布式copy方式,copy到集群B

    hadoop distcp hdfs://oldcluster:8020/hbase/data/default/order_info  hdfs://newCluster:8020/hbase/data/default/order_info

    2):修复元数据

    /opt/cloudera/parcels/CDH/lib/hbase/bin/hbase hbck -fixMeta

    3):重启Hbase

    解决!

  • 相关阅读:
    推荐一个采用方便程序员在线动画学习常用算法的良心网站
    你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧
    我在德国做SAP CRM One Order redesign工作的心得
    我做SAP CRM One Order redesign的一些心得体会
    一个最简单的WebSocket hello world demo
    推荐一个好用的以多tab标签方式打开windows CMD的工具
    SAP CX Upscale Commerce : SAP全新推出的电商云平台
    TCP socket和web socket的区别
    SAP 前端技术的演化史简介
    Fiori Fundamentals和SAP UI5 Web Components
  • 原文地址:https://www.cnblogs.com/niutao/p/11218549.html
Copyright © 2011-2022 走看看