是否可以创建一个Hbase表作为Hbase查询的输出?假设我有一个巨大的hbase表,然后我使用过滤器查询hbase表。我想将结果存储回Hbase表中。这可能吗?
您可以对正在运行的Hbase表进行快照,并将其导出到HDFS。写Mapreduce来获取你想要的文件中的数据,然后Bulk Load到新的Hbase表中。您也可以直接将数据写入Hbase表。这样,在快照上运行MapReduce也不会影响实际的Hbase表。这就是你如何完成下面提到的所有步骤
创建快照snapshot 'HbaseTable','HbaseTableSnapshot'
导出快照到本地hdfs
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot HbaseTableSnapshot-copy-to /tmp -mappers 16
Driver Job Configuration to rum mapreduce on Hbase snapshot
String snapshotName="HbaseTableSnapshot";
Path restoreDir = new Path("hdfs://quickstart.cloudera:8020/tmp");
String hbaseRootDir = "hdfs://quickstart.cloudera:8020/hbase";
TableMapReduceUtil.initTableSnapshotMapperJob(snapshotName, // Snapshot name
scan, // Scan instance to control CF and attribute selection
DefaultMapper.class, // mapper class
NullWritable.class, // mapper output key
Text.class, // mapper output value
job,
true,
restoreDir);
同样在Hbase快照上运行mapreduce会跳过对Hbase表的扫描,也不会对区域服务器产生影响。
您可以使用hbase作为map reduce的源和汇。我希望这对你有帮助。参见7.2.4节。由于您将并行写入put作为输出,因此时间也得到了优化。
您可以编写一个作业,以keyValue对的形式从第一个表中读取,然后将其持久化到第二个表中。
如果你关心的是性能?然后你可以编写一个map reduce作业来完成这个任务。
您不能直接查询hbase并在其中创建另一个包含您的输出的表,但您可以编写map reduce来完成相同的操作。除了map reduce之外,如果你想在hbase上使用Apache Phoenix,你将能够编写一个查询来选择数据并将其存储到hbase表中。
好主意…
你可以使用HappyBase来完成这个任务,它是我们在生产服务中使用的python前端。
但是,如果你真的在谈论1亿个加上返回值-我不建议这样做。当有1000 - 2000万条记录时,您将获得良好的吞吐量(我们平均每秒插入8k条记录)。停机坪0.5M/min)