HDP 上的 HBase 增量备份失败
HBase Incremental Backup failed on HDP
在 HBase 中创建了 "test" table 以测试 HDP 上的 incremetal 备份功能。
hbase(main):002:0> create 'test', 'cf'
0 row(s) in 1.4690 seconds
hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.1480 seconds
hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0070 seconds
hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0120 seconds
hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value4'
0 row(s) in 0.0070 seconds
hbase(main):010:0> scan 'test'
ROW COLUMN+CELL
row1 column=cf:a, timestamp=1317945279379, value=value1
row2 column=cf:b, timestamp=1317945285731, value=value2
row3 column=cf:c, timestamp=1317945301466, value=value4
3 row(s) in 0.0250 seconds
现在我已经成功地使用下面的方法进行了完整备份
hbase backup create full hdfs://12.3.4.56:8020/tmp/full test -w 3
现在我想测试上面 "test" table 上的 "incremetal" 备份。所以我做了什么:
put 'test', 'row123', 'cf:a', 'newValue'
现在当我在做下面的事情时,它就失效了
hbase backup create incremental hdfs://12.3.4.56:8020/tmp/full
错误:
Backup session finished. Status: FAILURE
2017-06-14 09:52:58,853 ERROR [main] util.AbstractHBaseTool: Error running command-line tool
org.apache.hadoop.ipc.RemoteException(java.lang.NullPointerException):
at org.apache.hadoop.hbase.backup.master.FullTableBackupProcedure.cleanupTargetDir(FullTableBackupProcedure.java:205)
at org.apache.hadoop.hbase.backup.master.FullTableBackupProcedure.failBackup(FullTableBackupProcedure.java:279)
at org.apache.hadoop.hbase.backup.master.IncrementalTableBackupProcedure.executeFromState(IncrementalTableBackupProcedure.java:164)
at org.apache.hadoop.hbase.backup.master.IncrementalTableBackupProcedure.executeFromState(IncrementalTableBackupProcedure.java:54)
at org.apache.hadoop.hbase.procedure2.StateMachineProcedure.execute(StateMachineProcedure.java:107)
at org.apache.hadoop.hbase.procedure2.Procedure.doExecute(Procedure.java:443)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execProcedure(ProcedureExecutor.java:934)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execLoop(ProcedureExecutor.java:736)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execLoop(ProcedureExecutor.java:689)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.access0(ProcedureExecutor.java:73)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.run(ProcedureExecutor.java:416)
更新:
在下面 link 中提到“备份和恢复应该 运行 作为 hbase 超级用户(默认情况下称为“hbase”)。这是什么意思?我只是运行从具有 root 访问权限的简单用户执行上述返回命令。请提出建议。
https://hortonworks.com/blog/coming-hdp-2-5-incremental-backup-restore-apache-hbase-apache-phoenix/
我尝试更改 hdfs 文件的权限 (tmp/full),但没有用。
我正在使用 Kerberos,所以在将 kinit 作为主体 运行 hbase 后,增量备份对我有用。
如果您没有使用 Kerberos,请先切换到 HBase 用户(例如 'su - hbase')。
在 HBase 中创建了 "test" table 以测试 HDP 上的 incremetal 备份功能。
hbase(main):002:0> create 'test', 'cf'
0 row(s) in 1.4690 seconds
hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.1480 seconds
hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0070 seconds
hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0120 seconds
hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value4'
0 row(s) in 0.0070 seconds
hbase(main):010:0> scan 'test'
ROW COLUMN+CELL
row1 column=cf:a, timestamp=1317945279379, value=value1
row2 column=cf:b, timestamp=1317945285731, value=value2
row3 column=cf:c, timestamp=1317945301466, value=value4
3 row(s) in 0.0250 seconds
现在我已经成功地使用下面的方法进行了完整备份
hbase backup create full hdfs://12.3.4.56:8020/tmp/full test -w 3
现在我想测试上面 "test" table 上的 "incremetal" 备份。所以我做了什么:
put 'test', 'row123', 'cf:a', 'newValue'
现在当我在做下面的事情时,它就失效了
hbase backup create incremental hdfs://12.3.4.56:8020/tmp/full
错误:
Backup session finished. Status: FAILURE
2017-06-14 09:52:58,853 ERROR [main] util.AbstractHBaseTool: Error running command-line tool
org.apache.hadoop.ipc.RemoteException(java.lang.NullPointerException):
at org.apache.hadoop.hbase.backup.master.FullTableBackupProcedure.cleanupTargetDir(FullTableBackupProcedure.java:205)
at org.apache.hadoop.hbase.backup.master.FullTableBackupProcedure.failBackup(FullTableBackupProcedure.java:279)
at org.apache.hadoop.hbase.backup.master.IncrementalTableBackupProcedure.executeFromState(IncrementalTableBackupProcedure.java:164)
at org.apache.hadoop.hbase.backup.master.IncrementalTableBackupProcedure.executeFromState(IncrementalTableBackupProcedure.java:54)
at org.apache.hadoop.hbase.procedure2.StateMachineProcedure.execute(StateMachineProcedure.java:107)
at org.apache.hadoop.hbase.procedure2.Procedure.doExecute(Procedure.java:443)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execProcedure(ProcedureExecutor.java:934)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execLoop(ProcedureExecutor.java:736)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execLoop(ProcedureExecutor.java:689)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.access0(ProcedureExecutor.java:73)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.run(ProcedureExecutor.java:416)
更新:
在下面 link 中提到“备份和恢复应该 运行 作为 hbase 超级用户(默认情况下称为“hbase”)。这是什么意思?我只是运行从具有 root 访问权限的简单用户执行上述返回命令。请提出建议。
https://hortonworks.com/blog/coming-hdp-2-5-incremental-backup-restore-apache-hbase-apache-phoenix/
我尝试更改 hdfs 文件的权限 (tmp/full),但没有用。
我正在使用 Kerberos,所以在将 kinit 作为主体 运行 hbase 后,增量备份对我有用。
如果您没有使用 Kerberos,请先切换到 HBase 用户(例如 'su - hbase')。