Skip to content

windwinds/sparkDataProcess

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于HBase的分布式连续型数据存储策略

RowKey设计

Hbase实际存储为字节数组。采用Long代替String类型作为RowKey。

优点:

1.Long为8个字节,最大可以表示20位数,除去最高位,相当于19个字符,1个字符=1个字节,采用Long代替字符串存储能节省存储空间。

2.操作系统为64位,内存8字节对齐,能提高存取速度。 因此Rowkey总长度设置为19位,为:时间编码+省市编码+瓦片编码。


时间编码

原始时间格式:2015-10-10 01:00:00, RowKey中的时间编码设置为:将原始时间格式转换为10位的时间戳,能精确到秒级

19-10位:精确到秒级数据的时间戳


省市编码

为了保证RowKey的有序性,提高查询效率,将省、市名称映射为编号,其中:

9-8位:省,从01开始编号,采用00代表全国的污染物空间插值数据

7-6位:市,从01开始编号,采用00代表省级数据,例如0100为以省01作为空间插值的栅格数据

需要构建省市-编码表。

RowKey ColumnFamily:cf1 ColumnFamily:cf1
省市编号 eg:0101 Column:c1 Column:c2
---  | 省市名称,eg: 湖北省武汉市 | 经纬度范围

省市名称-编号可以缓存到内存中,提高查询效率,然后可根据缓存定位到编号,查询经纬度坐标等其它属性信息。


瓦片编码

采用Hilbert曲线对瓦片编码,保持瓦片空间上的临近性,提高批量读取连续的瓦片块效率。

5-1位:作为瓦片编号,00000-99999,因此一个连续型栅格数据最多只能划分为10W个瓦片;单个瓦片内的数据相似度较高,压缩存储,节省存储空间,降低磁盘读写时间。

Table2:核心瓦片数据表

RowKey | ColumnFamily:cf1 | ColumnFamily:cf2 | ColumnFamily:cfn | ColumnFamily:cf,此列族存储属性信息 ---|---|---|---|---|--- 时间编码+省市编码+瓦片编码 Long:2015101001-0101-00001 | Column:c1, 污染物1 | Column:c1, 污染物2 | Column:c1, 污染物n | Column:c1 Column:c2 Column:c3 Column:c4 --- | 压缩后的瓦片数据 | 压缩后的瓦片数据| 压缩后的瓦片数据 | 瓦片长宽 瓦片起始经纬度 像素尺度,即每个像素点的大小


查询:

1.省、市污染物数据查询 时间编码+省市编码组成RowKey查询,得到所有瓦片。

2.根据经纬度范围查询 方法一: 先查出所有的瓦片,和对应瓦片的经纬度,再将不在查询经纬度范围内的瓦片剔除,得到需要的瓦片值。

方法二:
需要算出待查询的经纬度范围经过哪些瓦片,再根据时间编码+省市编码+瓦片编号组成的RowKey,得到待查询范围相关的瓦片。

此方法需要建立经纬度-瓦片的映射表,经纬度需要采用GeoHash编码,结合时间、省市形成RowKey。

RowKey ColumnFamily:cf1
时间编码+省市编码+GeoHash编码 String:2015101001-0101-w4fv Column:c1
--- 瓦片编号

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages