hbase查询中的hbase表

8oomwypt  于 2021-06-03  发布在  Hadoop
关注(0)|答案(5)|浏览(360)

我们是否可以创建一个hbase表作为hbase查询的输出?假设我有一个巨大的hbase表,然后使用filter查询hbase表。我想把结果存储回hbase表。有可能吗?

wwwo4jvm

wwwo4jvm1#

您可以编写一个作业,将其作为键值对从第一个表中读取,然后将其持久化到第二个表中。
如果你关心表演的话?然后你可以写一个Map缩小作业来做这个。

iswrvxsc

iswrvxsc2#

不能直接查询hbase并在其中创建另一个包含输出的表,但可以编写map reduce来执行相同的操作。除了map reduce之外,如果您在hbase上使用apachephoenix,那么您将能够编写一个查询来选择数据并将其存储到hbase表中。

eivgtgni

eivgtgni3#

聪明又好的主意。。。
您可以使用happybase来实现这一点,happybase是我们在生产服务中使用的python前端。
然而,如果你真的在谈论1亿以上的返回值-我不建议这样做。高达1000-2000万条记录您可以获得良好的吞吐量(我们平均每秒插入8k条记录)。停机坪0.5m/min)。

xbp102n0

xbp102n04#

可以使用hbase作为map reduce的源和汇。我希望这对你有帮助。参见7.2.4节。由于您将编写put作为并行输出,因此时间也得到了优化。

gojuced7

gojuced75#

您可以拍摄正在运行的hbase表的快照并将其导出到hdfs。编写mapreduce以获取文件中所需的数据,然后批量加载到新的hbase表。您也可以直接将数据写入hbase表。这样,在快照上运行mapreduce也不会影响实际的hbase表。下面提到的所有步骤都是这样做的
创建快照

snapshot 'HbaseTable','HbaseTableSnapshot'

将快照导出到本地hdfs

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot HbaseTableSnapshot-copy-to /tmp -mappers 16

hbase快照上rum mapreduce的驱动程序作业配置

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表的扫描,并且不会影响区域服务器。

相关问题