软件综合实习——基于NoSQL数据库的空间数据存储
2016-09-30 09:39
519 查看
前言:在“软件综合实习”这门实践课中选择了一个题目《基于NoSQL数据库的空间数据存储》,基于HBase的空间数据存储和查询。此博客是这次课程设计过程中的简单记录。
GitHub项目源代码
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
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;
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 cells,another 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
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
Rowkey | Point:ID | Point:X | Point:Y |
---|---|---|---|
0123450000000001 | 1 | ||
0123450000000001 | 222.222 | ||
0123450000000001 | 333.333 |
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 cells,another 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
相关文章推荐
- 基于NoSQL数据库的空间数据存储(一)---Hadoop的构建
- 基于NoSQL数据库的空间数据存储(二)---HBase的构建
- SQL Servr 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储 推荐
- 基于ArcEngine+C#设计与开发国土资源一张图空间数据管理平台软件
- 《基于网络软件开发综合实习》实习过程
- 基于闪存存储原理的U盘数据安全测试和U盘数据保护软件
- 基于闪存存储原理的U盘数据安全测试和U盘数据保护软件
- SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储
- 基于ArcEngine的空间数据通用建库软件介绍
- SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储
- 国产备份软件Coinstor Backup Server基于IPSAN存储备份解决方案
- “文档被保存,但是语音识别的数据丢失,因为没有足够的空间存储这些数据。确保没有录音时关闭麦克风,并检查磁盘上的存储空间。”
- 基于ARM的嵌入式大容量数据存储解决方案
- ArcXML——基于INTERNET的空间数据描述语言
- 基于SQL Server 2005 Compact Edition的数据存储
- 基于树型结构数据的关系数据库存储与网页显示的研究 推荐
- 基于单片机USB接口的数据采集存储电路的设计
- 基于空间数据库的数据挖掘技术
- 使用户能够在USB设备上存储数据、应用软件、个人桌面的软件正在进入企业
- [原创]空间换速度,c实现自连接Hashtable实现高性能数据存储