--数据迁移
步骤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}