--數據遷移
步驟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}