大数据GIS技术
空间大数据内涵
空间大数据依然具有大数据的相关特征,例如数据体量大、数据种类多、数据变化快以及价值密度低等,这些特点为用户处理空间大数据带来了诸多困难。如何在大体量的空间大数据中,通过高效的挖掘工具或者挖掘方法实现价值提炼,是用户非常关注的话题。在解决该问题之前,有必要对空间大数据进行重新的认识和解读。
如上图所示,是一个非常经典的DIKW金字塔模型,我们普遍称之的空间大数据就是金字塔最基础的数据层(Data),这一层也是体量最为庞大,种类最为繁多,数据价值密度最低的一层。将原始大数据素材经过加工处理后,得到的有逻辑的数据就是我们所说的信息(Information),例如我们常说的测绘4D产品、倾斜摄影数据等。通过对信息的组织就形成了知识(Knowledge),当知识实现应用就产生了智慧(Wisdom),智慧可以提供预测和决策的指导。
所谓大数据的挖掘就是从最基础的大数据中挖掘信息、提炼知识、产生智慧的过程。所以空间大数据的内涵就是带有(隐含的)空间位置,具有体量大、变化快、种类多和价值密度低的特点,而且常规软件工具无法进行有效处理,需要借助于更加先进的技术才能实现价值提炼,同时具备更强的决策力、洞察力和流程优化能力的数据资产。
在大数据时代,空间大数据是指带有(隐含的)空间位置且具有体量大、变化快、种类多和价值密度低等特点的数据。其区别于海量空间数据,后者不具有变化快、价值密度低的特点,只是随着时间积累数据在不断增加,而具有数据量大的特征。空间大数据也包括大量的外延类型,它们具有时空标记能力,能够描述个体行为,如手机信令数据、车船位置数据、社交媒体数据、电商交易数据、导航轨迹数据、搜索关键词、公交地铁刷卡数据等。这些数据为用户进一步定量理解社会环境、进行社会感知提供了一种新的手段。
空间大数据支撑技术
主流的大数据技术都基于Linux操作系统,这需要GIS基础软件支持跨平台技术,同时在基础云计算环境中也能为大数据存储和计算提供资源的管理和运维能力。
跨平台GIS技术
跨平台主要是指程序语言、软件或硬件设备可以在多种作业系统或不同硬件架构的电脑上运作。即在一个熟悉的平台上面开发的软件或者程序,直接可以在其他平台上正常的运行显示而不需要对其原始文件或者原始代码进行修改。基于跨平台技术的软件产品能够满足不同的技术环境、行业应用和用户需求。
云端一体化技术
云计算的出现,带来了弹性伸缩、按需访问、资源池化、可实例化和成本低廉的计算资源,为解决当今时代GIS面临的挑战提供了新的思路,使得云GIS技术逐渐成为当前GIS领域的研究热点。云GIS指的是由地理空间科学驱动并通过时空原则进行优化的云计算模式,使分布式计算环境中的地理空间科学发现和云计算成为可能。其实质是将GIS的平台、软件和地理空间信息方便、高效地部署到以云计算为支撑的“云”基础设施之上,以弹性的、按需获取的方式提供最广泛的基于Web的服务。
空间大数据核心技术
空间大数据核心技术通过先进的IT大数据技术与GIS内核技术进行深度融合,为空间大数据实现分布式存储、计算的能力,同时大幅度提升海量空间数据的管理和计算能力。空间大数据核心技术包括空间大数据存储技术、空间大数据计算技术、流计算技术及空间大数据可视化技术。
空间大数据存储
面临问题
随着信息技术发展,互联网快速普及,全球数据呈现爆发增长、海量集聚的特点,对经济发展、社会治理、国家管理、人民生活都产生了重大影响。如何实现对类型多样、标准不一的空间大数据的有效管理,提高数据应用效率,成为GIS面临的一大难题。
空间大数据存储是汇总不同来源、不同格式、不同行业的数据,并通过数据引擎和数据处理对其实现一体化、全流程的管理。近几年,从传统的结构化数据如矢量数据、影像数据到非结构化数据如三维数据、视频数据等,从更新频度较少的静态数据到动态实时产生的流数据等,空间数据的数据量迅猛增长,空间数据类型逐渐增多,数据的时效性也不断增强。随着数据的爆发式增长,数据存储和应用问题不断产生。
- 大数据存储问题
以前传统GIS处理的多为静态数据,随着技术手段的发展,动态数据越来越多。面临着不断累积的数据存量和仍然不断增加的数据增量,用户面临的数据量已经从GB级、TB级向PB级发展。其中,很多大数据还处于模态多样、杂乱无章、标准不统一、时空尺度不统一、精度不统一的阶段。如何存储和管理如此庞杂的数据,成为空间大数据应用的首要问题。
传统关系型数据库一直都是GIS数据存储的首选,它的概念易于理解、使用比较方便,同时便于维护。但是随着数据量的不断增加,数据类型的多样化,关系型数据库很难应对单表亿级以上记录的查询和分析,同时也无法很好的解决流数据的处理需求,特别是在扩展性和高可用性方面能力也比较弱,成本又相对较高。
- 价值密度低
现有的空间大数据价值还没有充分发挥出来,深度挖掘空间大数据价值仍在路上,大数据本身不等于价值,它是“贫矿”,只有挖掘出它的价值,才是“金子”。所以,GIS技术并不仅仅要解决空间大数据的存储问题,更重要的是如何从空间大数据中,通过GIS技术去实现数据挖掘,通过GIS的空间分析、空间查询和空间可视化等技术优势为用户提供指导和决策。
存储类型
数据存储主要涉及所有的空间数据格式以及大数据技术体系中常用的数据存储技术,如Oracle、HDFS、MongoDB集群等等,它们既可以利用存储的数据进行数据分析,也可以用于存储分析产生的中间数据和最终成果数据。
在空间大数据时代,GIS平台不仅需要接入传统测绘所支持的数据如矢量数据和影像数据,也需要接入新型测绘数据如倾斜摄影模型、BIM模型等相关数据。特别是随着移动互联网的高速发展,产生了大量的手机信令数据、移动社交数据、导航终端数据等,这些数据80%都包含地理位置,而且类别繁杂且数据变化越来越快,这就需要对传统空间数据引擎进行扩展,也需要通过实现对分布式文件系统、分布式数据库的支持来提升对空间大数据的存储和管理能力。
传统关系型数据库一直都是GIS应用的首选,它的概念易于理解、使用比较方便,同时便于维护。但是随着数据量的不断增加,关系型数据库很难应对单表亿级以上记录的查询和分析,而随着用户并发持续递增,硬盘读写也会成为一个瓶颈,且无法很好的解决流数据的处理需求,特别是在扩展性和高可用性方面能力也比较弱,成本又相对较高。基于以上分析,关系型数据库已经很难满足空间大数据的存储需求。分布式数据库的分布式技术架构可以很好的解决上述问题。它可以实现横向扩展(Scale-Out),通过集群的分布式处理方式对大数据量进行如水平拆分(将数据均匀分布到多个数据库节点中)的操作,这样相比较每个数据库节点的数据量会变小,相关的存储管理性能也自然提升。此外,主流的分布式数据库的分布式能力对用户透明,而且无缝顺应用户的SQL操作习惯,让用户在使用和管理上更加地简单便捷。
如今在空间大数据存储方面,业界主要利用以下的技术:基于Hadoop的HDFS实现非结构化数据存储;通过对Postgres-XL分布式数据库的支持对海量空间大数据提供存储管理;通过对MongoDB分布式数据库的支持对海量二维或者三维的瓦片数据提供存储管理;通过对Elasticsearch分布式数据库的支持对流数据提供存储管理等;基于分布式架构的HBase是分布式空间数据存储和管理的首选。
空间大数据计算
空间大数据分析计算技术的核心是对传统地理空间分析算子扩展其分布式计算处理能力,也就是希望通过业界主流的分布式计算框架与GIS平台基础内核实现深度融合。目前主流的大数据计算框架以Hadoop的MapReduce和Spark为主。
数据计算模式演变
- 传统计算模式
数据计算极大地增强了人们从事科学研究的能力,大大地加速了把科技转化为生产力的过程,深刻地改变着人类认识世界和改造世界的方法和途径,正推动着当代科学与技术向纵深发展。为了提高计算速度(单机受物理速度限制无法满足)、提高计算精度(加密、计算网格等)以及满足实时计算需求(数值天气预报等),数据计算模式不断发展变化,已由传统的串行运算向并行运算,CPU计算向GPU计算转变。
- 多进程并行计算
多线程并行计算技术可将一项任务分解为多个线程。这些线程可由多颗CPU内核并行运行,能够更充分和更加高效地利用多核计算资源,降低单个问题的求解时间,节省成本,也能够支撑更大规模或更高精度要求的问题求解。
下图对比了串行与并行。当一个任务被划分为A、B、C三个子任务时,串行需要依次执行三个子任务,而多线程并行则可以通过三个线程同时执行三个子任务,从而提高任务的执行效率。
在GIS中,除了一般的SQL查询,还有网络分析、缓冲区分析、淹没分析、填挖方分析等耗时多的计算密集型功能。随着数据采集、传输、处理技术的不断发展,大范围、高分辨率的地理空间数据使得传统串行算法难以满足性能要求。尤其在跨Web的分析服务中,PC端所能承担的分析时间,是Web端、移动端用户所不能接受的,网络环境下的等待更容易产生延迟、提交失败等问题。单节点的资源配备已不能满足计算需要,依靠粗放地增加硬件资源节点也不能解决上述问题。这就要求GIS软件具有并行计算的能力,利用多核环境下的计算资源达到提升性能的目的。
- 内存计算
内存计算相比传统的方法的优势是:充分发挥多核的能力,可以对数据并行的处理,并且内存读取的速度成倍数加快,数据按优化的列存储方式存放在内存里面。从而,内存计算可对大规模海量的数据做实时分析和运算,不需要事先的数据预处理和数据建模。例如,以任何维度去分析上亿条数据,实时建立模型,实时完成分析处理,可能从几天缩短为几秒钟就处理完。
- GPU计算
GPU 加速计算是指同时利用图形处理器 (GPU) 和 CPU来加快应用程序的运行速度。GPU 加速计算可以提供非凡的应用程序性能,能将应用程序计算密集部分的工作负载转移到 GPU,同时仍由 CPU 运行其余程序代码。从用户的角度来看,应用程序的运行速度明显加快。CPU 由专为顺序串行处理而优化的几个核心组成,而 GPU 则拥有一个由数以千计的更小、更高效的核心(专为同时处理多重任务而设计)组成的大规模并行计算架构。
GPU除了在图形加速方面的能力以外,其在通用计算技术,如浮点运算、并行计算等方面,也引起业界不少的关注,很多实际案例也证明了,GPU在浮点运算、并行计算等部分计算方面,可以提供数十倍乃至于上百倍于CPU的性能。在串行计算环境下GIS空间分析算法几乎已经达到理论上的时间复杂度的极限,如何进一步提升海量空间数据的分析处理运算速度,GPU在并行计算上的卓越能力成为GIS分析性能的一把利器。
- 分布式计算MapReduce
MapReduce最早是由Google公司研究提出的一种面向大规模数据处理的并行计算模型和方法。基于该框架用户能够容易地编写应用程序,而且程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的、具有容错能力的方式并行处理TB级的海量数据集。可以说MapReduce是第一代的大数据处理框架,也在大数据应用的初期应用在很多生产环境中。
MapReduce是Hadoop生态体系的一部分。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。如下图MapReduce工作原理所示:
MapReduce计算模型主要由三个阶段构成:Map、shuffle、Reduce。
Map是映射,负责数据的过滤分法,将原始数据转化为键值对;Reduce是合并,将具有相同key值的value进行处理后再输出新的键值对作为最终结果。为了让Reduce可以并行处理Map的结果,必须对Map的输出进行一定的排序与分割,然后再交给对应的Reduce,而这个将Map输出进行进一步整理并交给Reduce的过程就是Shuffle。
- 分布式计算Spark
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab(加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架。Spark拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
- Spark 集群
整个 Spark 集群中,分为Master节点与worker节点。在Spark计算框架中,提交一个Spark任务之后,这个任务就会启动一个对应的Driver进程。而Driver进程会向资源管理集群,申请运行Spark作业需要使用的资源,这里的资源指的就是Executor进程。如下图Spark工作原理所示:
在申请到任务执行所需的资源之后,Driver进程就会开始调度和执行代码。Driver进程会将Spark任务代码分拆为多个stage,每个stage执行一部分代码片段,并为每个stage创建一批Task,然后将Task分配到各个Executor进程中执行。
一个stage的所有Task都执行完毕之后,会在各个节点本地的磁盘文件中写入计算中间结果,然后Driver就会调度运行下一个stage。下一个stage的Task的输入数据就是上一个stage输出的中间结果。如此循环往复,直到将代码全部执行完,并且计算完所有的数据。
- YARN集群
Hadoop YARN集群是一个通用的资源管理平台,可为各类计算框架提供资源的管理和调度。其核心是通过一个全局的资源管理器来实现分离资源管理与作业调度/监控。Hadoop YARN具有更高的可靠性,通过结合Zookeeper技术,可以实现分布式计算集群的高可用。同时,Hadoop YARN支持动态的资源调度,当没有新的分析作业时,会自动释放占用的计算资源,更节省计算资源。
MapReduce与Spark的对比{#MapReduce&Spark-compare}
MapReduce出现时间更早,虽然能很好的解决分布式编程的问题,但也逐步暴露出其不足的地方,包括:
- 计算的中间结果需要写入到硬盘中,导致反复迭代计算的性能较为低下;
- 仅提供Map和Reduce两种操作,较为复杂的计算模型则需要处理较多底层逻辑,开发难度大;
- 批量处理的实时性不高,无法满足实时数据处理的需要。
Spark吸取了MapReduce的经验教训,充分利用内存,避免反复无效的磁盘I/O写入与读取,大大提高程序运行效率;设计RDD(分布式弹性数据集)作为数据抽象层,把操作分为变换(Transformation)和行动(Action)两种类型,并分别提供丰富的具体算子,使得应用逻辑无需再纠结于底层逻辑,大大降低开发难度;以及提供诸如Spark Streaming、SparkSQL、MLlib等多个扩展库,分别满足实时流计算、SQL查询和机器学习能方面的需要。
毫无疑问,Spark计算框架的优势让其成为主流的GIS平台的不二之选。Spark结合了MapReduce的优势也解决并弥补了MapReduce的诸多不足,产生了一个简洁、灵活、高效的大数据分布式处理框架。它可以很好地满足具有数据类型多样、来源广泛,复杂计算较多等特点的空间数据的计算分析,特别是可以更好地支持实时流计算。
流数据处理
云计算、物联网以及移动互联网的普及和推广,促使了海量空间数据的产生。如何从海量的空间数据中快速挖掘和发现知识,成为了研究者和企业的重要关注点。在Web2.0时代,众多的应用会实时地产生大量包含空间位置的数据流,新型流式数据的处理也成为了很大的挑战。这种新的空间数据呈现形式导致在处理的过程中必须要面临几个大的问题:数据仅能访问一次、计算资源有限、处理的近实时性。因此,在对大量流式数据进行数据挖掘处理时,如何利用有限的计算资源对实时的数据流信息进行快速的处理是一个很大的挑战和难点。
由于产生的设备众多,数据传输协议也丰富多样,同时实时数据处理还需要支持两种应用场景,第一种需要支持实时数据的接收并直接转发,保证多终端空间数据的实时性,第二种需要支持数据的高效低延迟的实时数据处理,例如属性或者空间过滤、地理围栏以及数值比较等。当然用户也需要对实时数据进行统一存储管理,实现历史存档分析等数据挖掘能力支持。这就需要对流数据处理从输入、输出的多样支持,到核心处理的高效稳定,以及实时数据类型的高效存储提供技术支持。
如上图基于Spark Streaming的流数据处理所示,主流的空间数据流处理都采用Spark Streaming作为首选技术方案,Spark Streaming 是构建Spark的流计算框架,扩展了Spark流式大数据处理能力,可以实现高吞吐量的、具备容错机制的流数据的处理,也适合流数据与历史存档数据混合处理的场景。
Spark Streaming包含流处理主程序(Spark Driver),支持从多种数据源获取数据,包括Kafka、Flume、ZeroMQ以及TCP sockets。从数据源获取数据之后,可以使用诸如map、reduce、join等高级函数进行复杂算法的处理。最后还可以将处理结果存储到分布式文件系统、数据库和现场仪表盘。GIS基础软件可以基于Spark Streaming的基础能力实现扩展,扩展实时GIS需要的接收和输出支持文件、传输协议和支持类型,同时可以实例化扩展更多的关于空间数据的过滤、转换等相关能力。
空间大数据可视化
空间大数据既包括了传统的静态的地理空间数据,例如:林地、水系、城市区划等,还涵盖了通过GPS或者传感网络采集的实时动态位置数据。在巨大的数据量面前,更直观更高效的实现地理可视化是一项重要的关键技术。
传统GIS主要针对矢量和影像数据提供了不同的显示技术。影像数据通过压缩以及建立金字塔等手段提高了显示效率,而矢量数据尽管有很多优化手段但依然受浏览数据的数据量、精度和符号风格等因素所限。这些都是在大数据阶段进行可视化要解决的问题。
空间大数据的地理可视化要根据静态数据和动态数据提供不同的可视化方案,而最直观的问题往往都会集中在性能和效果上。静态数据的可视化在大数据应用中的需求会涉及数据的全貌显示,如下图出租车数据10亿个点的全量显示所展示的地图,在进行缩放、平移等操作时,浏览了上千万甚至上亿个空间对象。
基于传统的显示方式,可视化的性能要依赖的数据库的查询效率、显示硬件的效率等等都无法保证空间大数据正常的显示。这种情况下,需要GIS软件具备快速查询和栅格化的能力,即在服务端根据浏览的范围和比例尺等信息快速地在大量空间数据中进行查询,并快速地渲染为栅格图片,以WebGIS的方式发布并最终呈现给用户。要支持这种能力,就需要基于上节介绍的空间大数据分析处理技术,并行地进行查询和栅格化出图的任务。这基本解决了静态的空间大数据的显示性能问题。
实时动态数据的可视化依靠的是显示端的性能优化方案。在这方面传统的方案都是优化对内存的利用策略来提高显示效率,由于动态显示的对象对内存的消耗较大,所以在资源有限以及保证运动流畅平滑的前提下显示的对象数量往往有所限制。而现在的技术已经可以将实时动态的数据可视化依靠GPU强大的图形运算能力来解决。
空间大数据除了显示的性能约束要突破以外,还需要将各种空间大数据统计分析的结果以多种专题图风格进行可视化展示。这既包括传统的单值专题图、范围分段专题图、点密度专题图等类型,也包括结合地统计等分析模型加入的如图所示的热力图、迁徙图、流向图、聚类图、麻点图等多种类型的可视化效果。
空间大数据可视化在依靠GIS基础软件的可视化展现能力的同时,还不断地和更专业的数据可视化技术进行融合,创新更丰富的可视化方式。其中就包括和Leaflet、OpenLayers、Mapbox GL、3D-WebGL的结合。
回顾空间大数据的可视化技术发展过程,可以发现在面向大数据量和实时显示的应用领域,GIS与各种技术不断融合实现技术创新,包括利用分布式集群所提供的更多的资源,发挥GPU、大内存等单机设备的高效的运算能力,不断突破系统硬件资源的限制来提高空间大数据的可视化性能,同时支撑更加丰富的可视化展现效果,融合更多的可视化手段。