Hbase表从Hbase查询



是否可以创建一个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)

最新更新