您的位置:首页 > 数据库

软件综合实习——基于NoSQL数据库的空间数据存储

2016-09-30 09:39 519 查看
前言:在“软件综合实习”这门实践课中选择了一个题目《基于NoSQL数据库的空间数据存储》,基于HBase的空间数据存储和查询。此博客是这次课程设计过程中的简单记录。

GitHub项目源代码

简介

RDBM在处理中小规模数据的时候没有压力,拥有严格的数学背景支撑,擅长处理事务。然而新千年之后进入互联网时代,此时数据量极速变大,RDBM在一些大数据场景开始力不从心,世界需要新的变革,等待新的科学与技术诞生。Google在2003,2004,2006年分别发布了三篇论文GFS, MapReduce, Bigtable,引领世界进入大数据时代。Hadoop的基石是就是上述三篇论的开源实现。HBase-Hadoop版本需要匹配

Operating system: deepin-15.3 (a beautiful desktop Linux distribution contributed by Chinese)

Programming language: Java

File system: HDFS-2.6.4 (pseudo-distribution mode)

Database: HBase-1.2.2

Spatial data: (x, y)

Rowkey: it will be 16 charecters

(x0, y0) —Hilbert curve—> hilbertCode. 6 charecters

assign an ID to (x0, y0). 10 charecters

rowkey = hilbertCode + ID. 16 charecters

HBase schema:

Column Family : Point

Qualifier : ID, X, Y

Time Stamp: system default

eg.a spatial point (222.222, 333.333), assigned an ID=1. Shoud put 3 records in HBase

RowkeyPoint:IDPoint:XPoint:Y
01234500000000011
0123450000000001222.222
0123450000000001333.333
Range query:

1. range (x1, y1)—(x2, y2)

2. stage one: coarse filter, scan by rowkey, determined by hilbert curve values of all blocks in range (x1, y1)—(x2, y2)

3. stage two: fine filter, single column value filter, determined by x1, x2, y1, y2;

遇到的问题

权限问题。在操作的时候,遇到了“权限不够”的问题。原来我下载hadoop,HBase的时候使用的是我的个人账户,然而我在运行hadoop,HBase之前,切换到了hadoop账户。此时此刻需要把hadoop,HBase下面的所有文件所有权都改成hadoop账户。总之文件所有权需要统一。

Error: JVM terminated, exit code = 1。我是在虚拟机里面操作的,操作系统使用deepin15.3,开了2G的内存空间。有一次当我试图打开Eclipse的时候,返回了一长串错误信息“Error: JVM terminated, exit code = 1……”。网上简单搜索了一下,感觉可能是因为内存不够用。打开deepin的资源管理器,果然此刻内存已经是1.8G了,很接近2G的上限了。我发现hdfs, yarn, hbase这当个东西同时打开起码耗费1G的内存。把这当个关掉之后,Eclipse就可以打开了。Eclipse也是一个吃内存的家伙,起码0.5G。虚拟机里面的linux内存我最终开到了4G。

scan的时候,我设置的SingleColumnValueFilter过滤的与我所期望的不一样,发现过滤了不该过滤的。蛋疼死了,问题最终解决了。Scanning HBase based on two cellsanother sample。后来发现,60 < 500,但是”60” > “500”。原来内部是按照byte array的字典排序的,于是在往HBase插入数据的时候,插入”060”,而不是”60”。还有其他地方的代码出现了下标和边界条件Bug

Hadoop的datanode无法启动。一个无法理解的奇葩问题,反正解决了。解决方案参考了这里,大概原因是namenode和datanode的clusterID不一样。解决方案是把datanode的clusterID改成和namenode的一样。

其他参考文献:

GeoHash核心原理解析

超酷算法:用四叉树和希尔伯特曲线做空间索引

Hilbert 曲线

张榆,马友忠,孟小峰,一种基于 HBase 的高效空间关键字查询策略,Journal of Chinese Computer Systems,2012年10月第10期,Vol.33 No.10

丁琛,基于HBase的空间数据分布式存储和并行查询算法研究_丁琛,南京师范大学,硕士学位论文

L. Wang, B. Chen, Y. Liu, Distributed Storage and Index of Vector Spatial Data Based on HBase, 2013 21st International Conference on Geoinformatics

K. Zheng, Y. Fu, Research on Vector Spatial Data Storage Schema Based on Hadoop Platform, International Journal of Database Theory and Application, 2013, Vol.6 No.5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐