设为首页 加入收藏

TOP

HBase 中加盐之后的表如何读取:Spark 篇
2019-05-02 01:48:32 】 浏览:82
Tags:HBase 中加 之后 如何 读取 Spark篇

下面文章代码只贴了关键部分,访问 https://www.iteblog.com/archives/2514.html (点击下面阅读原文即可进入)获取全部代码。

《HBase 中加盐之后的表如何读取:协处理器篇》 文章中介绍了使用协处理器来查询加盐之后的表,本文将介绍第二种方法来实现相同的功能。


我们知道,HBase 为我们提供了 hbase-mapreduce 工程包含了读取 HBase 表的 InputFormat、OutputFormat 等类。这个工程的描述如下:

This module contains implementations of InputFormat, OutputFormat, Mapper, Reducer, etc which are needed for running MR jobs on tables, WALs, HFiles and other HBase specific constructs. It also contains a bunch of tools: RowCounter, ImportTsv, Import, Export, CompactionTool, ExportSnapshot, WALPlayer, etc.

我们也知道,虽然上面描述的是 MR jobs,但是 Spark 也是可以使用这些 InputFormat、OutputFormat 来读写 HBase 表的,如下:

640wx_fmt=png

上面程序使用 TableInputFormat 计算了 iteblog 表的总行数。如果我们想查询某个 UID 的所有历史记录如何实现呢?如果你查看 TableInputFormat 代码,你会发现其包含了很大参数设置:

640wx_fmt=png

其中 hbase.mapreduce.inputtable 就是需要查询的表,也就是上面 Spark 程序里面的 TableInputFormat.INPUT_TABLE。而 hbase.mapreduce.scan.row.start 和 hbase.mapreduce.scan.row.stop 分别对应的是需要查询的起止 Rowkey,所以我们可以利用这个信息来实现某个范围的数据查询。但是要注意的是,iteblog 这张表是加盐了,所以我们需要在 UID 之前加上一些前缀,否则是查询不到数据的。不过 TableInputFormat 并不能实现这个功能。那如何处理呢?答案是重写 TableInputFormat 的 getSplits 方法。

从名字也可以看出 getSplits 是计算有多少个 Splits。在 HBase 中,一个 Region 对应一个 Split,对应于 TableSplit 实现类。TableSplit 的构造是需要传入 startRow 和 endRow。startRow 和 endRow 对应的就是上面 hbase.mapreduce.scan.row.start 和 hbase.mapreduce.scan.row.stop 参数传进来的值,所以如果我们需要处理加盐表,就需要在这里实现。

另一方面,我们可以通过 RegionLocator 的 getStartEndKeys() 拿到某张表所有 Region 的 StartKeys 和 EndKeys 的。然后将拿到的 StartKey 和用户传进来的 hbase.mapreduce.scan.row.start 和 hbase.mapreduce.scan.row.stop 值进行拼接即可实现我们要的需求。根据这个思路,我们的代码就可以按照如下实现:

640wx_fmt=png

然后我们同样查询 UID = 1000 的用户所有历史记录,那么我们的程序可以如下实现:

640wx_fmt=png

我们编译打包上面的程序,然后使用下面命令运行上述程序:

640wx_fmt=png

得到的结果如下:

640wx_fmt=png

和前面文章使用 HBase Shell 输出结果一致。好了,到这里就介绍完如何在 Spark 中查询 HBase 加盐之后的表了,明天我会介绍如何在 MapReduce 中查询 HBase 加盐之后的表,敬请关注。


猜你喜欢

欢迎关注本公众号:iteblog_hadoop:

回复 spark_summit_201806下载 Spark Summit North America 201806 全部PPT

spark_summit_eu_2018下载 Spark+AI Summit europe 2018 全部PPT

回复 HBase_book 下载 2018HBase技术总结 专刊

0、回复电子书获取本站所有可下载的电子书

1、为什么不建议在 HBase 中使用过多的列族

2、Elasticsearch 6.3 发布,你们要的 SQL 功能来了

3、列式存储和行式存储它们真正的区别是什么

4、分布式原理:一致性哈希算法简介

5、分布式快照算法: Chandy-Lamport 算法

6、Kafka分区分配策略

7、分布式原理:一文了解 Gossip 协议

8、干货 | Apache Spark 2.0 作业优化技巧

9、HBase Rowkey 设计指南

10、HBase 入门之数据刷写详细说明

11、更多大数据文章欢迎访问https://www.iteblog.com及本公众号(iteblog_hadoop)12、Flink中文文档:http://flink.iteblog.com13、Carbondata 中文文档http://carbondata.iteblog.com

640wx_fmt=png

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇[HBase] LSM树 VS B+树 下一篇HBase Region恢复逻辑

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目