und*_*ood 9 spring etl spring-batch spring-boot apache-spark
我已经使用Apache Spark + Scala超过5年了(学术和专业经验).我总是发现Spark/Scala是用于构建任何类型的批处理或流式ETL/ELT应用程序的强大组合之一.
但最近,我的客户决定在我们的两个主要管道中使用Java Spring Batch:
这个企业级决策令我感到非常困惑.我同意业内有更多的思想,但我无法理解采取这一行动的必要性.
我的问题是:
我无法绕过这些.所以,我想使用这个平台进行Spring Batch和Apache Spark之间的公开讨论.
Mic*_*lla 12
作为Spring Batch项目的领导者,我相信你会理解我有一个特定的观点.但是,在开始之前,我应该说我们所讨论的框架是针对两个非常不同的用例而设计的.Spring Batch旨在处理JVM上的传统企业批处理.它旨在应用在企业批处理中常见的易于理解的模式,并使它们在JVM的框架中方便.另一方面,Spark专为大数据和机器学习用例而设计.与传统的企业批处理系统相比,这些用例具有不同的模式,挑战和目标,这反映在框架的设计中.话虽这么说,这是我对你的具体问题的答案.
有人比较过Apache Spark和Java Spring Batch之间的表现吗?
没有人能真正为你回答这个问题.性能基准是一个非常具体的事情.用例很重要.硬件很重要.我鼓励您进行自己的基准测试和性能分析,以确定哪种方法最适合您的部署拓扑中的用例.
使用Spring Batch而不是Spark有什么好处?
与其他企业工作负载类似的编程模型企业
在制定架构决策时需要了解他们手头的资源.使用新技术X是否值得重新培训或招聘技术Y?在Spark vs Spring Batch的情况下,Spring Batch上现有Spring开发人员的增加非常少.我可以选择任何对Spring感到满意的开发人员,并使用Spring Batch快速完成工作.Spark为普通企业开发人员提供了更陡峭的学习曲线,这不仅是因为学习Spark框架的开销,还有所有相关技术来预测该生态系统中的Spark工作(HDFS,Oozie等).
无需专用基础架构
在分布式环境中运行时,您需要使用YARN,Mesos或Spark自己的群集安装来配置群集(在撰写本文时,可以使用实验性Kubernetes选项,但如上所述,它已标记为作为实验).这需要针对特定用例的专用基础架构.Spring Batch可以部署在任何基础架构上.您可以通过Spring Boot使用可执行JAR文件执行它,您可以将其部署到servlet容器或应用程序服务器中,并且可以通过YARN或任何云提供程序运行Spring Batch作业.此外,如果您使用Spring Boot的可执行JAR概念,即使在运行其他工作负载的同一个基于云的基础架构上运行分布式应用程序,也无需提前设置.
更多开箱即用的读者/编写者简化了创造就业机会
Spark生态系统专注于大数据用例.因此,它开箱即用的读取和写入组件专注于这些用例.诸如用于读取大数据用例中常用文件的不同序列化选项之类的东西是本地处理的.但是,处理事务中的块记录等事物不是.
另一方面,Spring Batch为声明性输入和输出提供了一整套组件.读取和写入平面文件,XML文件,数据库,NoSQL存储,消息队列,编写电子邮件......列表继续.Spring Batch提供所有开箱即用的产品.
Spark是为大数据而构建的...并非所有用例都是大数据用例
简而言之,Spark的功能特定于它为其构建的域:大数据和机器学习.Spark中不存在事务管理(或根本不涉及事务)之类的事情.如果没有自定义代码,则在发生错误时回滚的想法(据我所知)不存在.在框架级别不提供更强大的错误处理用例,例如跳过/重试.重新启动等事情的状态管理在Spark中要比Spring Batch重得多(持久化整个RDD与存储特定组件的琐碎状态).所有这些功能都是Spring Batch的原生功能.
Spring Batch"真正分布式"
Spring Batch的一个优点是能够将批处理过程从简单的顺序执行的单个JVM进程演变为完全分布式的集群解决方案,只需进行最少的更改.Spring Batch支持两种主要的分布式模式:
还有其他Stackoverflow答案可以更详细地讨论这些功能(与文档一样):
弹簧批的优点
弹簧批远程分块和远程分区之间的差异
Spring Batch文档
| 归档时间: |
|
| 查看次数: |
3171 次 |
| 最近记录: |