闽公网安备 35020302035485号
测试和开发: 在开发和测试环境中,快照表使得可以在不影响生产环境的情况下创建和还原测试数据。
hbase> snapshot 'mytable', 'snapshot1'2.还原快照
hbase> disable 'mytable' hbase> restore_snapshot 'snapshot1' hbase> enable 'mytable'3.查看和删除快照
# 堆代码 duidaima.com hbase> list_snapshots hbase> delete_snapshot 'snapshot1'4.快照的存储
TableScanMR: 该类型适用于对HBase表进行大规模的扫描和查询。通过TableMapReduceUtil.initTableMapperJob初始化Mapper任务,可以在整个表上并行处理数据。
SnapshotScanMR: 与TableScanMR不同,SnapshotScanMR主要用于对HBase快照表的处理。通过TableMapReduceUtil.initSnapshotMapperJob初始化Mapper任务,能够在HBase快照上并行执行查询操作。
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableSnapshotInputFormat;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import java.io.IOException;
public class HBaseSnapshotScanMR extends Configured implements Tool {
public static class HBaseSnapshotMapper extends Mapper<ImmutableBytesWritable, Result, NullWritable, Text> {
@Override
protected void map(ImmutableBytesWritable key, Result value, Context context) throws IOException, InterruptedException {
// 处理每一行的数据,这里简单地将每行数据输出到MapReduce的输出
StringBuilder output = new StringBuilder();
for (Cell cell : value.rawCells()) {
output.append(Bytes.toString(CellUtil.cloneValue(cell))).append(",");
}
context.write(NullWritable.get(), new Text(output.toString()));
}
}
@Override
public int run(String[] args) throws Exception {
Configuration conf = getConf();
// HBase配置
Configuration hbaseConf = HBaseConfiguration.create(conf);
hbaseConf.set(TableInputFormat.SCAN, TableMapReduceUtil.convertScanToString(new Scan()));
// MapReduce作业配置
Job job = Job.getInstance(conf, "HBaseSnapshotScanMR");
job.setJarByClass(getClass());
// 设置HBase快照输入格式
TableMapReduceUtil.initTableSnapshotInput(job, args[0], new Path(args[1]), HConstants.HBASE_DIR);
// Mapper和Reducer配置
job.setMapperClass(HBaseSnapshotMapper.class);
job.setOutputKeyClass(NullWritable.class);
job.setOutputValueClass(Text.class);
// 提交作业
return job.waitForCompletion(true) ? 0 : 1;
}
public static void main(String[] args) throws Exception {
int exitCode = ToolRunner.run(new HBaseSnapshotScanMR(), args);
System.exit(exitCode);
}
}
在这个例子中: