简介
Spring XD(eXtreme Data,极限数据)是Pivotal的大数据产品。它结合了Spring Boot和Grails,组成Spring IO平台的执行部分。尽管Spring XD利用了大量现存的Spring项目,但它是一种运行时环境,而不是一个类库或者框架,它包含带有服务器的bin目录,你可以通过命令行启动并与之交互。运行时可以运行在开发机上、客户端自己的服务器上、AWS EC2上或者Cloud Foundry上。
Spring XD中的关键组件是管理和容器服务器(Admin and Container Servers)。使用一种DSL,你可以把所需处理任务的描述通过HTTP提交给管理服务器。然后管理服务器会把处理的任务映射到处理模块(每个模块都是一个执行单元,作为Spring应用程序上下文实现)中。
该产品具有两种操作模式:-single和multi-node。第一种是由单独的进程负责所有处理和管理的工作。这对于入门很有用,同样适合于应用程序的快速开发和测试。本文中的所有实例都被设计为在单一节点模式下工作。第二种是一种分布式模式。分布式集成运行时(Distributed Integration Runtime,DIRT)会在多个节点之间分发处理的任务。除了可以拥有VM或者物理服务器作为这些节点之外,Spring XD还让你可以在Hadoop YARN集群上运行。
XD管理服务器会把处理的任务切分成彼此独立的模块定义,并把每个模块分配给使用Apache ZooKeeper的容器实例。每个容器都会监听分配给它的模块定义,然后部署模块,创建Spring应用程序上下文来运行它。需要注意的是,在我撰写这篇文章的时候,Spring XD中还不会自带Zookeeper。兼容的版本是3.4.6,你可以从这里下载。
模块通过使用配置好的消息中间件传递消息来共享数据。传输层是可插拔的,并且支持其他两种Pivotal项目——Redis和Rabbit MQ——以及现成可用的内存数据库。
用例
下图让你可以对Spring XD有个总体上的了解。
Spring XD团队认为,对于创建大数据解决方案来说,创建的主要用例有四种:数据吸纳、实时分析、工作流调度以及导出。
数据吸纳提供了一种能力,可以从各种输入源接收数据,并把它传输给大数据存储库,像HDFS(Hadoop文件系统)、Splunk或者MPP数据库。和文件一样,数据源可能包括来自于移动设备、支持MQ遥感传输协议(MQTT)的传感器以及像Twitter之类的社交流的事件。
吸纳过程会贯穿事件驱动数据的处理,以及针对其他类型数据的批处理(MR、PIG、Hive、Cascading、SQL等等)。流和作业的两个世界截然不同,但是Spring XD试图使用通道抽象(channel abstraction)来模糊二者之间的边界,从而让流可以触发批处理作业,而批处理作业也可以发送事件从而触发其他流。
对于流来说,会通过叫做“Taps”的抽象来支持某些实时分析,像获取指标和计数值。从概念上,Taps让你可以介入到流中,执行实时分析,并有选择地为外部系统生成数据,像GemFire、Redis或者其他内存数据网格。
一旦你在大数据仓库中拥有数据,那么就需要某种工作流工具来对处理进行调度。调度非常必要,因为你编写的脚本或者map-reduce作业通常会长时间运行,并采用带有多个步骤的事件链的方式。理想状况下,你需要在事件失败的时候,能够从特定的步骤重新启动,而不是完全从头来过。
最后还需要导出步骤,从而把数据放到更适合展现的系统中,可能还会做进一步的分析。例如从HDFS到RDBMS(关系型数据库管理系统),在那里你可以使用更为传统的商业智能工具。
Spring XD想要提供一种统一、分布式和可扩展的服务来满足这些用例。它没有从头开始,而是利用了大量已经存在的Spring技术。例如,它使用了Spring Batch来支持工作流调度和导出用例,使用Spring Integration来支持流处理,此外还使用了各种各样的企业应用程序集成模式。其他关键的Spring产品包括:使用Spring Data处理NoSQL/Hadoop工作,使用Reactor为编写异步程序提供简化的API,特别是在使用LMAX Disruptor的时候。
安装Spring XD
在接下来的部分,我们会详细看一下每个用例。你可能想要自己来试验一下这些例子。起步非常简单。
为了开始,你要确保系统至少安装了Java JDK 6或者更新的版本。我推荐使用Java JDK 7。
对于OSX用户,如果还没有Homebrew的话,请安装,然后运行: