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 最好了...
1
liprais 2018-09-28 00:33:45 +08:00 via iPhone
把你 hbase 的表对应成 spark 的 dataframe,然后让 spark 自己处理就好了
不过确实是去所有 region 里面扫一遍 |
2
sadhen 2018-09-28 00:40:38 +08:00
HBase 是实时集群,Spark 用在离线的,不要误用哦。
具体要做什么,要想清楚自己的技术选型。 |
4
kex0916 2018-09-28 09:53:32 +08:00 1
自己实现个 RDD,partition 按照你预分区的划分 200 个,一个 partition 对应一个预分区,每个分区都是计算该分区对应的预分区的数据,对应的 startrow=该分区对应的预分区号+2018092800 + 0000 + 0000 + 000000,endrow=该分区对应的预分区号+2018092899 + 0000 + 0000 +000000,这样 200 个 region 在资源允许的情况可以并发的读取,也方便后面使用 spark 的算子。
|