LinkedIn開源高可用Hadoop工具集Gradle
許多大科技公司都是開源事業的參與者和引領者,比如Google、Netflix、非死book等公司,它們開源后的工具被廣泛使用。現在,LinkedIn也加入了開源大家庭。LinkedIn的工程師創建了一個名為 Gradle 的項目,該項目包含了若干個可以在應用中簡化連接多個Hadoop Job的工作流工具。
創建運行在Hadoop集群上的應用的難點眾所周知,而Gradle則是一項十分有潛力的高效解決方案。適用于Apache Hadoop的LinkedIn Gradle插件(Hadoop插件)包含了同樣適用于Apache Hadoop的 LinkedIn Gradle DSL(Hadoop DSL) 。幾年前,LinkedIn公司就已采用Gradle作為其基礎軟件構建系統。Gradle使得Hadoop開發者能夠更高效地完成應用程序的編譯、測試和調配。Gradle還可以幫助開發者方便地使用多個Hadoop應用框架。不管在開發時使用了什么工具,Hadoop插件都可以讓開發者在一致的體驗下管理他們的項目。
在開發出Hadoop插件之前很久,LinkedIn的工程師們就意識到了編寫個人的Hadoop Job僅僅是有效使用Hadoop挑戰的一部分。LinkedIn上數據驅動的特征實際上是由幾十個 Azkaban 或 Apache Oozie 管理的Hadoop Job工作流產生的。理解工作流中各個Job之間的關系并且管理工作流手冊成為了一項難點。例如,為了指定LinkedIn上運行的一些處理大數據的工作流,需要用到非常多的Job文件,工程師為此寫了幾個內部開發的工具以便更簡單地處理工作流。然而這些工具都是使用了Ant、Maven和Ruby混合編成,這就阻礙了全公司上下全面采用Gradle的進程。隨著時間的推移,系統變得越來越脆弱,維護也變得越來越困難。為了解決以上問題,LinkedIn 開發了Hadoop DSL。
Hadoop DSL是一個基于特定領域的嵌入式 Groovy 語言,開發者可以在DSL中隨意使用Groovy或Java。它有著自然語言的結構,適用于特定的Job和諸如Azkaban、Apache Oozie等Hadoop工作流管理器。另外,DSL是靜態編譯的,因此也可以進行靜態檢查。靜態檢查器可以在編譯時檢查出工作流文件中的常見問題,這樣就避免了在運行Hadoop工作流幾個小時后才報出錯誤。
Gradle和Hadoop DSL已經成為了LinkedIn開發Hadoop工作流的標準工具。源代碼在 GitHub 上。