Spring XD 1.1: 簡化大數據一如Spring之于Java EE

jopen 9年前發布 | 19K 次閱讀 Spring XD

原文  http://www.infoq.com/cn/news/2015/03/spring-xd-1.1


Pivotal最近發布了 Spring XD 1.1 GA 新功能包括使用Reactor、RxJava、Spark Streaming和Python進行流處理。此外,支持 Kafka 、批量處理和RabbitMQ壓縮, 以及支持運行在YARN上的容器組管理的功能。Spring XD項目為開發者提供了 應用示例 超過25個。

作為發布的一部分,Pivotal的產品經理 寫到 :“大數據應用的開發不應該如此耗時且復雜”。在 Spring XD: Data-Driven Connectivity Within a Unified Platform 一文中,Anandan強調可以通過命令行使用XD的高級DSL構建數據流,不再需要安裝IDE或者構建腳本。他還提到可以使用內置的管理界面實現遠程監控和管理流、批量任務和整個集群。

在宣布Spring XD發版后沒多久,Pivotal 開源了他們的大數據套件 。在此前的InfoQ的文章中,Abel Avram寫到:

相比早期進入大數據市場的HortonWorks、Cloudera和MapR,Pivotal姍姍來遲。但是現在,為解決大數據空間的“碎片化和供應商 鎖定(fragmentation and vendor lock-in)”問題,Pivotal已經決定從大數據套件中開源數個產品,包括命名為 Greenplum Database 的平行計算數據倉庫、 HAWQ --Hadoop查詢引擎上兼容ANSI的SQL, GemFire --分布式的NoSQL內存數據庫。

Software Development Times高級編輯Alex Handy在他的文章 Pivotal pivots to open source 中寫到:

Spring XD之于Hadoop就像Spring之于Java EE。

他接著說:

簡而言之,這意味著Spring XD簡化了配置和構建Map/Reduce和其他YARN查詢的樣板工作。曾經Spring為Java EE做了同樣的事情,Spring簡化了折磨企業應用的開發者十余年的、無盡的配置和XML文件。

Cameron Purdy在Pivotal的大數據套件和商業模式的開源許可上評論到:

根據EMC/VMWare的公開文件和評論,Pivotal一直以不可思議的速度虧損。以這樣的燒錢速度和EMC/VMWare和 GE的最初投資金額來說,Pivotal很可能在一年之內完蛋。Pivotal的商業模式是行不通的,而且似乎沒有人膽敢公開指出這是多么糟糕的商業模式 (以及VMware的收購者是多么的逗比)。

Purdy還提到:

我認為Groovy的撤資只是冰山一角。

為了了解關于這次發布的更多信息,InfoQ采訪了Spring XD的共同領導Mark Pollack和Mark Fisher,以及產品經理Sabby Anandan。

InfoQ: Spring XD是如何簡化大數據應用開發的?

DSL vs. API開發

Spring一直受到 Alan Kay 思想的鼓舞:“簡單事情簡單辦,復雜事情合理辦”,而Spring XD將這一思想上升到了一個全新的水平。它提供了多個分布式運行時選項,并且無需編碼即可支持寬泛的使用場景。使用Spring XD,無論通過HTTP還是HDFS采集數據都明顯地“簡單”,甚至對于可能會變得復雜的定制流處理的情況,開發者只專注于代碼并將其放入文件 夾,Spring XD模型會動態地將其添加到模塊的注冊表。隨即這部分就會在DSL中可用,就像任何開箱即用模塊一樣。Spring XD對處理邏輯和基礎結構的分離做得非常好。

InfoQ: 可以用代碼舉個現實生活中的例子嗎?

就拿剛說的數據采集為例吧,用戶只需通過XD shell、REST API或者web界面提交“http | hdfs”。對于自定義模塊一些例子,會涉及到代碼,可以從Spring XD示例庫: https://github.com/spring-projects/spring-xd-samples 上查看。

InfoQ: 1.1 GA版本的主題是流。是什么促使增加了對Reactor、RxJava和Spark支持?

我們想提供一種使用這些項目中提供的函數式API執行流處理的方式。現在,使用我們的模塊化架構,這些API就可以與流內的任何可用的或者將來可用的數據源或數據匯連接。

InfoQ: 對于剛剛提到的流處理庫來說,哪個是最容易集成的?哪個是最困難的?

首先要明確的是,我們的主要目標是確保開發者使用這些流處理庫的體驗盡可能簡單而且盡量保持一致。所以,對于Spring XD的內部實現,其本身與那些庫的集成就要努力地采用這樣的方式,以達到我們這里討論的這一目標。與Reactor和RxJava的集成比Spark更容 易。后者的集成超出了API層級,因為我們所委托的Spark集群的工作負載,涉及到還在不斷演進的自定義序列化機制和生命周期管理模型。因此,我們曾經 一度放棄多個對Spark項目的分支合并請求(pull request)的提交,我們為所做的貢獻感到自豪。與RxJava和Reactor集成的一個有趣的地方是如何將收到的消息分配給特定的流實例。我們可 以跨處理線程,將所有傳入的事件分配到單流實例,這樣你就可以計算出全局狀態,也可以分配事件到多流實例,每實例一處理線程,因為流實例不是線程安全的。 可以進一步將其拆分到更細粒度的流示例中,例如將流實例與Kafka分區ID匹配。在Kafka這個場景下,我們可以確保對于給定的分區中的所有事件使用 相同的線程來處理,因此,會保證執行的順序。

InfoQ: 根據最近的Typesafe報告,Scala社區對Apache Spark表現出濃厚的興趣(Spark的用戶有88%使用Scala,44%使用Java,22%使用Python)。我們有Scala的API,是否有大量的開發者在使用呢?

我們在Spring XD中提供了對Spark的processor或sink的支持。可以用于Java或Scala中,并且在這兩種情況下實現的是同一接口,以 DStream作為輸入、(可選地,比如sink)產生的DStream作為輸出。換言之,不存在對任何其他API的侵入,純粹針對Spark。1.1版 本開始支持Spark,對于這些模塊,預計大多數開發者會選擇Scala,因為正如你在問題中所指出的,這是Spark用戶最常見的選擇。我們還為 Spring集成和自定義模塊提供了Scala的DSL。考慮到支持Java 8的DSL也是基于lambda的,從而相當簡潔,因此會是一個留住用戶不去轉用Scala的因素。即便如此,實現自定義模塊的生產和消費消息的代碼是完 全隔離的,這對希望使用Scala的開發者來說很方便,相比總體不是基于Scala開發的其他系統而言,具有定義良好的擴展點。

InfoQ: Spring XD的未來有哪些規劃?

雖然我們相信更短的迭代和增量交付,但我們在2015年度有更遠大的目標。Spring XD是Pivotal Cloud Foundry上非常活躍的在制品,我們想通過開發者和devops的直接經驗拉近大數據和云計算之間的距離。有了Spring XD作為Pivotal Cloud Foundry的服務,可以建立特定領域的PaaS解決方案--“電信即服務”、“醫療保健即服務”等等。我們也在建立一個基于HTML5的畫布用戶界 面,通過拖拽來支持開箱即用的模塊進一步簡化開發者體驗,比如要增加度量和監控能力。Srping XD的Apache Ambari插件是我們排期中的另一個短期目標。

InfoQ: Spring XD入門的最佳實踐是什么?

Spring XD的入門花不了5分鐘時間。操作系統的不同選擇項會不同。OSX用戶可以使用homebrew安裝Spring XD。紅帽/ CentOS用戶可以使用yum倉庫安裝Spring XD。如果你喜歡直接下載二進制,你可以選擇手動設置環境變量。入門指南涵蓋了這些步驟和其他的一般要求。

想了解更多關于Spring XD的信息,可以參考Charles Humbles的這篇文章 Introducing Spring XD, a Runtime Environment for Big Data Applications

查看英文原文: Spring XD 1.1: Simplifying Big Data like Spring Did for Java EE

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!