引入Spring XD,这是大数据应用程序的运行时环境

介绍

Spring XD(极限数据)是Pivotal的大数据业务。 它加入Spring BootGrails ,成为Spring IO平台执行部分的一部分。 尽管Spring XD使用了许多现有的Spring项目,但它是一个运行时环境,而不是一个库或框架,它包含一个bin目录,其中包含您通过外壳启动并进行交互的服务器。 运行时可以在开发人员机器,客户端自己的服务器,AWS EC2和Cloud Foundry上运行。

Spring XD中的关键组件是Admin和Container服务器。 使用DSL ,您可以通过HTTP将所需处理任务的描述发布到Admin服务器。 然后,管理服务器将处理任务映射到处理模块:模块是执行单元,并作为Spring Application Context实现。

该产品具有两种操作模式-单节点和多节点。 第一个是负责所有处理和管理的单一过程。 这对于入门以及快速开发和测试应用程序很有用。 本文中的所有示例都旨在在单节点上工作。 第二种是分布式模式。 分布式集成运行时(DIRT)将处理任务分布在多个节点上。 除了将这些节点用作VM或物理服务器之外,Spring XD还允许您在Hadoop YARN集群上运行它们。

XD Admin服务器将处理任务分解成各个模块定义,并使用Apache ZooKeeper将每个模块分配给一个容器实例。 每个容器侦听已分配给它的模块定义并部署模块,从而创建一个Spring Application Context。 运行它。 值得观察的是,在撰写本文时,Spring XD并未随Zookeeper一起提供。 兼容版本为3.4.6,您可以从此处下载。

模块通过使用配置的消息传递中间件传递消息来共享数据。 传输层是可插入的,并支持其他两个Pivotal项目-RedisRabbit MQ-以及开箱即用的内存中选项。

用例

下图提供了Spring XD的高级概述:

Spring XD团队已将摄取,实时分析,工作流程编排和导出确定为创建大数据解决方案的四个主要用例:

数据提取提供了接受来自各种输入源的数据并将其传输到大数据存储(例如HDFS(Hadoop文件系统),Splunk或MPP数据库)的能力。 除了文件之外,数据源还可能包括来自移动设备的事件,支持MQ遥测传输(MQTT)协议的传感器以及诸如Twitter之类的社交流。

接收是通过对事件驱动的数据进行流处理,并通过批处理作业(MR,PIG,Hive,级联,SQL等)进行的,以进行其他类型的数据的接收。 这两个流和作业世界是截然不同的,但是Spring XD尝试使用通道抽象模糊两者之间的界限,例如,流可以触发批处理作业,而批处理作业可以发送事件,并且转,触发其他流。

对于流,通过称为“抽头”的抽象支持一些实时分析 ,例如收集指标和计数值。 从概念上讲,Taps允许您使用数据流,执行实时分析,以及可选地填充外部系统,例如GemFire,Redis或其他内存数据网格。

一旦将数据存储在大数据存储中,就需要某种工作流工具来协调处理。 编排是必要的,因为您编写的脚本或map-reduce作业通常会长时间运行,并采取具有多个步骤的事件链的形式。 理想情况下,例如,您希望能够在发生故障的情况下从给定的步骤重新启动,而不必从头开始。

最后,需要导出步骤以将数据导入更适合表示和可能进一步分析的系统中。 例如,从HDFS到RDBMS,您可以在其中使用更多常规的商业智能工具。

Spring XD旨在提供统一的,分布式的和可扩展的服务,以满足这些用例。 它不是从头开始,而是利用了许多预先存在的Spring技术。 例如,Spring Batch用于支持工作流程编排和导出用例,而Spring Integration支持流处理和各种Enterprise Application Integration模式。 Spring的其他主要产品包括用于NoSQL / Hadoop工作的Spring Data,以及Reactor,它提供了用于编写异步应用程序(尤其是使用LMAX Disruptor)的简化API。

安装Spring XD

在下一节中,我们将更详细地介绍每个用例。 您可能需要自己尝试一些示例。 入门非常简单。

首先,请确保您的系统至少安装了Java JDK 6或更高版本。 建议使用Java JDK 7。

对于OSX用户,请安装Homebrew(如果尚未安装),然后运行:
冲泡龙头
酿造安装springxd
这将安装到/usr/local/Cellar/springxd/1.0.0.M7/libexec (取决于Spring XD库)。

注意 :如果您随后想要安装更高版本,则brew升级springXD应该可以解决问题。

Red Hat / CentOS用户可以使用Yum进行安装。

Windows用户应下载当前的.zip文件,将其CD解压缩到该目录,然后将环境变量XD_HOME设置为安装目录。

您可以通过输入以下命令在单个节点中启动Spring XD:
xd单节点

打开第二个终端,然后输入以下命令启动外壳:
XD壳

您会看到以下内容:

要检查它是否有效,请创建一个快速流:
流创建-定义“时间|日志”-名称ticktock --deploy

在启动Spring XD的控制台窗口中,您应该看到类似以下内容:

您可以使用shell中的stream destroy命令删除流:

流销毁--name ticktock

资料撷取

在Spring XD中,基本流定义了事件驱动的数据从源到接收通过任何数量的处理器的接收器的摄取。

Spring XD shell通过管道和过滤器语法支持DSL,以进行流定义。 -来源| 处理器| 下沉

例如,诸如stream create --name filetest --definition“ file | log” --deploy之类的命令将记录文件的内容。

除了使用文件,Spring XD还支持许多其他来源,包括:

HTTP

命令 HTTP POST / streams / myStream“ http | file --deploy”-说“从HTTP消耗我的流并转到文件”。 这将默认为端口9000。您可以使用--port选项覆盖默认端口。 这是HTTP的唯一选项。

例如(从XD shell):
xd:> stream create --name infoqhttptest9010 --definition“ http --port = 9010 | file” --deploy
您可以通过将一些数据发布到新端口进行测试:
xd:> http post --target http:// localhost:9010 --data“ hello world”

您应该在控制台窗口中看到以下文本:
> POST(text / plain; Charset = UTF-8)http:// localhost:9010你好世界
> 200 OK

打开另一个终端实例,然后键入:

$ cd / tmp / xd /输出
$ tail -f infoqhttptest9010.out

您应该在输出中看到单词“ hello world”。

要发送二进制数据,请将Content-Type标头设置为application / octet-string:

$ curl --data-binary @ foo.zip -H'内容类型:application-octet-string'http:// localhost:9000

类型 流破坏infoqhttptest9010 清理。

邮件

邮件是用于接收电子邮件的源模块。 它可以通过轮询或接收可用的电子邮件来工作,具体取决于所使用的协议。

例如:
xd:> stream create --name infoqmailstream --definition“ mail --host = imap.gmail.com --username=charles@c4media.com --password = secret --delete = false | file” --deploy

注意 :delete选项在这里很重要,因为Spring XD的默认设置是在使用电子邮件后将其删除。 Spring XD也具有markAsRead选项,但是默认为false。 Spring Integration文档提供了对此的详细说明,但是主要问题是POP3协议仅知道在单个会话中读取的内容。 因此,当POP3邮件适配器运行时,电子邮件将成功使用,因为它们在每次轮询期间都可用,并且不会重复发送一封电子邮件。 但是,一旦重新启动适配器并开始新的会话,则可能会再次检索在上一个会话中已检索到的所有邮件。

如果您在控制台日志中看到错误,例如:

WARN task-scheduler-1 org.springframework.integration.mail.ImapIdleChannelAdapter:230-空闲任务发生错误
javax.mail.AuthenticationFailedException:连接失败,未指定密码?

尝试将URL中的@符号替换为URL编码版本: %40

流创建--name infoqmailstream-定义“ mail --host = imap.gmail.com --username = charles%40c4media.com --password = secret --delete = false | file” --deploy

打开另一个终端实例,然后键入:

$ cd / tmp / xd /输出
$ tail -f infoqmailstream.out

向您自己发送电子邮件以查看它是否出现在日志文件中。

Twitter搜索

Spring XD可以与Twitter搜索API(twittersearch)和Twitter的Streaming API中的数据一起使用

例如:
xd:> stream create --name twittersearchinfoq --definition“ twittersearch --outputType = application / json --fixedDelay = 1000 --consumerKey = afes2uqo6JAuFljdJFhqA --consumerSecret = 0top8crpmd1MXGEbbgzAwVJSAODMcbeAbhwHXLnsg --query ='infoq'
每隔1000毫秒使用twittersearch输出(格式为JSON),并使用令牌“ infoq”查询Twitter。 要运行此程序,您需要一个使用者密钥(Twitter发行的应用程序使用者密钥)及其相应的机密。

结果将通过管道传输到文件同步,该文件默认为/tmp/xd/output/[streamName].out。

打开另一个终端实例,然后键入:

$ cd / tmp / xd /输出
$ tail -f twittersearchjava.out

一段时间后,您会发现您超出了Twitter API搜索的限制,并且会在控制台窗口(在单个节点中启动XD的控制台窗口)中看到如下消息:

11:27:01,468 WARN task-scheduler-1 client.RestTemplate:581-GET请求“ https://api.twitter.com/1.1/search/tweets.json?q=infoq&count=20&since_id=478845525597237248”的结果为429 (客户端错误(429)); 调用错误处理程序
11:27:01,471错误task-scheduler-1处理程序。LoggingHandler:145-org.springframework.social.RateLimitExceededException:已超出速率限制。

类型流销毁twittersearchinfoq 清理。

其他输入流

GemFire :配置XD容器进程中的缓存和复制区域以及Spring Integration GemFire入站通道适配器,并由CacheListener支持,该CacheListener输出由该区域上的外部进入事件触发的消息。 还支持连续查询,它允许客户端应用程序使用对象查询语言(OQL)创建GemFire查询并注册一个CQ侦听器,该侦听器订阅该查询,并在每次查询结果集更改时得到通知。

Reactor IP :充当服务器,并允许远程方连接到XD并通过原始TCP或UDP套接字提交数据。 react-ip源与标准tcp源不同,因为它基于Reactor项目,并且可以配置为使用LMAX Disruptor RingBuffer库,以实现极高的摄取速率,引用速率约为1M / sec。

Syslog :提供了三个syslog源:reactor-syslog,syslog-udp和syslog-tcp。 Reactor-syslog适配器使用tcp并以Reactor项目中可用的功能为基础,并提供了比syslog-tcp适配器更高的吞吐量。

TCP :充当服务器,并允许远程方连接到XD并通过原始TCP套接字提交数据。

MQTT :连接到MQTT服务器并接收遥测消息。

水龙头

您可以在流中的任意位置插入一个水龙头-基于“电线水龙头”? 摘自Gregor Hohpe等人的《企业应用程序集成模式》一书。

从概念上讲,您将一个简单的收件人列表插入到将每个传入消息发布到主通道和辅助通道的通道中。 流不知道其管道上的任何分接头。 因此,删除流将不会自动删除分接头-必须将它们分别删除。 但是,如果重新创建被点击的流,则现有的分接头将继续起作用。

可以在流的任意点(或多个位置)插入水龙头。

处理器

流中的数据可以通过多种方式进行处理。

过滤器 :可用于确定是否应将消息传递到输出通道。 最简单的过滤器就是返回true或false的SpEL布尔表达式。 例如:

xd:> stream create --name filtertest --definition“ http | filter --expression = payload =='good'| log” --deploy

将记录有效负载为“ good”的所有内容??。 过滤器可能相当复杂。 Spring XD支持JSONPath评估和自定义Groovy脚本。

转换 :用于转换消息的内容或结构。 它支持简单的SpEL和Groovy脚本,以进行更复杂的转换。

拆分 :类似于Spring Integration中的拆分器概念,拆分器使用SpEL表达式,该表达式的结果为数组或集合,以将单个消息拆分为多个不同的消息。 您可以对这些使用JSON宣誓表达式,但不能使用自定义Groovy脚本。

聚合器 :与拆分器相对,将多个消息合并为一个有效负载。

最后, 脚本可以用作处理器步骤来调用特定的Groovy脚本。

水槽

最简单的接收器是日志和文件。 其他受支持的选项包括Hadoop(HDFS),JDBC,TCP,邮件,RabbitMQ,GemFire服务器,Splunk服务器和MQQT。 还有一个动态路由器选项,该选项允许基于SpEL表达式或Groovy脚本的评估将Spring XD消息路由到命名通道。 一个有点令人惊讶的遗漏是缺少通用的JMS接收器,尽管可以按此处所述构建自定义接收器模块。

实时分析

Spring XD支持使用各种类型的计数器和量规对各种机器学习评分算法进行实时评估以及简单的实时数据分析。 通过可添加到流中的模块提供分析功能。 从这种意义上讲,实时分析是通过与数据摄取完全相同的模型完成的。

虽然流的主要作用是执行实时分析,但添加水龙头以启动辅助流是很常见的,在该辅助流中,将分析(例如字段值计数器)应用于同一数据通过主要流被摄取。

Spring XD开箱即用地提供了一些简单的分析工具,实现为Abstract API,并具有内存和Redis的实现,如下所示:

  • 简单柜台
  • 字段值计数器:计算命名字段的出现。
  • 聚合计数器 :在Mongo和Redis等工具中很流行,这使您可以按分钟,小时,月,年等对数据进行时间片划分。
  • 量规:最后一个值
  • 富标尺 :上一个值,移动平均值,最小值/最大值

为了进行预测分析,Spring XD包括一个可扩展的类库,可以在其上构建实现。 GitHub上提供了一个示例PMML模块 ,该模块与JPMML-Evaluator库集成在一起,该库为多种模型类型提供支持,并且可以与从RRattleKNIMERapidMiner导出的模型互操作。

该产品还包括一些用于在流处理应用程序中实现分析模型的抽象。 在撰写本文时,仅支持预测模型标记语言(PMML),但Pivotal告诉InfoQ:

我们正在开展一个内部项目,以针对“欺诈检测”,“网络安全”等用例提供全面的分析解决方案。我们还对OSS库集成(例如“ stream-lib ”和“ graphlab ”)进行了设计调整。

Pivotal还明确表示,随着计划中的预测建模的额外支持,这是他们期望随着时间而发展的一个领域。

批处理作业,工作流程编排和导出

除了流之外,Spring XD还具有基于Spring Batch启动和监视批处理作业的功能,并且Spring Batch还用于支持工作流程编排和导出用例。

工作流的概念转化为批处理作业,可以将其视为步骤的有向图,每个步骤都是一个处理步骤:

步骤可以顺序执行,也可以并行执行,具体取决于配置。 他们可以从文件,数据库,MapReduce,Pig,Hive或Cascading作业中复制或处理数据,并与允许重新启动的检查点保持一致。 像流一样,作业支持单个节点,或者可以随数据分区一起分发。

Spring XD附带了少量预定义的作业,用于与Hadoop文件系统HDFS导出数据。 这些涵盖从FTP到HDFS,从HDFS到JDBC,从HDFS到MongoDB以及从JDBC到HDFS的过程。 还有一个将文件导出到JDBC的工作。 可以在/ libexec / xd / modules / job文件夹中找到它们。

Spring XD提供了一个相当基本的基于浏览器的GUI,该GUI当前允许您执行与批处理作业相关的任务。 启动Spring XD后,可在此处使用管理界面:

(点击图片放大)

从上面的屏幕截图可以看出,管理界面目前包含四个标签:

  1. 模块 :列出可用的批处理作业模块和更多详细信息(例如作业模块选项和模块XML配置文件)。
  2. 定义 :列出XD批处理作业定义,并提供用于部署或取消部署这些作业的操作。
  3. 部署 :列出所有已部署的作业,并提供启动已部署作业的选项。 部署作业后,也可以通过管理界面启动该作业。
  4. 执行 :列出批处理作业的执行,并提供一个选项,如果批处理作业可重新启动且已停止/失败,则重新启动。

结论

Spring XD目前正在开发中。 2013年6月发布了第一个里程碑版本,预计将于今年7月(2014年)发布GA版本。 它在Apache版本2下获得了许可。 源代码示例可在GitHub上获得。 您还可以在线找到Sonar代码指标

该产品可能是新产品,但正如我们所见,它基于成熟的基础-Spring Batch,Spring Integration和Spring Data以及Reactor项目,LMAX Disruptor和Apache Hadoop-并提供了轻便的运行时环境,该环境很容易通过DSL进行配置和组装,几乎不需要代码。 Spring XD为开发人员提供了一种开始构建大数据应用程序的便捷方法,并为构建和部署此类应用程序提供了“一站式服务”。

对于希望浏览产品的读者而言,有很多资源可供使用,包括主Wiki和涵盖实时分析的视频

关于作者

于2014年3月接任InfoQ.com编辑团队负责人,指导我们的内容创建,包括新闻,文章,书籍,视频演示和采访。 在InfoQ担任专职之前,Charles领导我们的Java工作,并曾担任PRPi Consulting的首席技术官,PRPi Consulting是一家重新研究的研究公司,于2012年7月被普华永道(PwC)收购。开发人员,架构师和开发经理。 在业余时间里,他的音乐创作是伦敦环境技术团体Twofish的 1/3。

翻译自: https://www.infoq.com/articles/introducing-spring-xd/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值