hbase跨集群迁移数据(实践检验版)

--数据迁移
步骤0:清理目标集群
    1>删除目标集群上要导入的表
        1.1>进入命令行 
        $HBASE_HOME/bin/hbase shell
        1.2>下线表
        disable '{tableName}'
        1.3>删除表
        enable '{tableName}'
    2>检查目标集群上的线程数
        $HADOP_HOME/etc/hadoop/hdfs-site.xml 如下配置,没有则要加入重启
        <property>
         <name>dfs.datanode.max.transfer.threads</name>
         <value>65536</value>
        </property>
    3>停止HBASE目标集群上的所有线程
        1.1>master上执行 
        $HBASE_HOME/bin/hbase-daemon.sh stop master
        1.2>regionserver上执行
        $HBASE_HOME/bin/hbase-daemon.sh stop regionserver
步骤1:在旧集群上创建快照
    1>进入命令行 
    $HBASE_HOME/bin/hbase shell
    2>创建快照
    hbase>snapshot '{tableName}', 'snapshot_{tableName}', {SKIP_FLUSH => true}
    3>查看快照
    hbase>list_snapshots
    *>如果出错可用以下命令 删除快照
    hbase>delete_snapshot 'snapshot_{tableName}'
步骤2:在旧集群上启动mapreduce任务将快照复制到新集群
$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -Dmapreduce.map.memory.mb=4096 -Dmapreduce.map.java.opts=-Xmx4096m -snapshot 'snapshot_{tableName}' -copy-to hdfs://{newHdfsMasterIp}:9000/hbase/ -mappers {node的个数}
    *问题处理:
    1>The auxService:mapreduce_shuffle does not exist.
        /opt/hadoop-2.7.5/etc/hadoop/yarn-site.xml文件中添加一下
        <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
        </property>
        执行distcp命令复制到hadoop各节点上(namenode+datanode),并且重启
    2>Error: Java heap space
        修改 -Dmapreduce.map.memory.mb=4096 -Dmapreduce.map.java.opts=-Xmx4096m 加大内存
        
    3>Error: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException): No lease o
        参加步骤0的2>检查目标集群上的线程数
    
    4>ERROR [VerifySnapshot-pool1-t5] snapshot.SnapshotReferenceUtil: Can't find hfile:
        参加步骤0的3>HBASE目标集群master线程会删除TTL过期hfile数据,应该先停止

步骤3、在新集群上恢复快照
    0>启动集群
        0.1>master上执行 
        $HBASE_HOME/bin/hbase-daemon.sh start master
        0.2>regionserver上执行
        $HBASE_HOME/bin/hbase-daemon.sh start regionserver
    1>进入命令行 
        $HBASE_HOME/bin/hbase shell
    2>如果目标表存在则删除表
        参加步骤0的1>
    2>恢复快照
        hbase>clone_snapshot 'snapshot_{tableName}', '{tableName}'
    3>检查数据
        enable '{tableName}'
        hbase>scan '{tableName}',{LIMIT=>5}

发布了55 篇原创文章 · 获赞 14 · 访问量 17万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章