关于 Spark 读取预分区 Hbase 问题

2018-09-28 00:26:39 +08:00
 Nirlan

RT.

我有一张预分区的 Hbase 表, split key 是 000| 001| ... 199|这样,200 个分区.

我的 rowkey 是这样设计的 001|20180928001122+ 业务 ID + 6 位随机数

这样设计的话避免了 Spark 读取时数据倾斜啊,插入时数据热点问题.

但是我想用 Spark 读取某一天的数据,还想用 scan 操作的话,貌似很难实现.

比如我的 startrow=001|2018092800 + 0000 + 0000 + 000000 endrow=001|2018092899 + 0000 + 0000 +000000

我想读取完这一天的数据,难道得循环 200 个 region 吗?

单机多线程的话是可以这么做的,但是我想用 spark 分布式环境来操作.

我查阅了 TableSnapshotScanner 类,对其 regions 属性不甚理解,望高手给个思路(给个 demo 最好了...

3431 次点击
所在节点    Hadoop
6 条回复
liprais
2018-09-28 00:33:45 +08:00
把你 hbase 的表对应成 spark 的 dataframe,然后让 spark 自己处理就好了
不过确实是去所有 region 里面扫一遍
sadhen
2018-09-28 00:40:38 +08:00
HBase 是实时集群,Spark 用在离线的,不要误用哦。

具体要做什么,要想清楚自己的技术选型。
Nirlan
2018-09-28 09:32:10 +08:00
@sadhen #2 Hbase,是可以用于 OLAP 任务的吧...
kex0916
2018-09-28 09:53:32 +08:00
自己实现个 RDD,partition 按照你预分区的划分 200 个,一个 partition 对应一个预分区,每个分区都是计算该分区对应的预分区的数据,对应的 startrow=该分区对应的预分区号+2018092800 + 0000 + 0000 + 000000,endrow=该分区对应的预分区号+2018092899 + 0000 + 0000 +000000,这样 200 个 region 在资源允许的情况可以并发的读取,也方便后面使用 spark 的算子。
Nirlan
2018-10-09 14:38:58 +08:00
@kex0916 #4 感谢提供思路
kex0916
2018-10-09 17:34:49 +08:00
@Nirlan ^_^

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/493372

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX