要使用spark庫,你首先必須了解的東西是spark package。它有點像spark的包管理器。當你給spark叢集送出job時,你可以到存放spark package的網站下載下傳任何package。所有package都存放在這個站點。
當你想用一個spark package時,可以在spark-submit指令或者spark- shell指令中增加包選項:
如果使用了--packages選項,spark package就會自動把它的jar包添加到你指定的路徑下。你不僅能在spark叢集上使用社群的庫,還能到公開釋出自己的庫。如果要把一個spark package釋出到這個托管服務下,必須遵守下列規則:
源代碼必須放在github上。
代碼庫的名字必須與包名相同。
代碼庫的主分支必須有readme.md檔案,在根目錄下必須有license檔案。
釋出spark包時必須提供如下資訊,應該把它們寫到build.sbt中:
spname——package的名稱。
sparkversion——package所依賴的spark版本。
sparkcomponents——package所依賴的spark元件清單,例如sql、mllib。
spshortdescription——package的一句話描述。
spdescription——關于package的完整描述。
sphomepage——用于描述package的web頁面的url。
在spark package站點上注冊了github賬号後,可以從“name”下拉菜單中選擇你的代碼庫。
上面的簡短描述和首頁最好與build.sbt中的描述和首頁url一緻。一旦你送出了package,驗證過程就開始了。這個過程通常需要幾分鐘。當驗證完成後,你會收到一封郵件,告訴你驗證是否成功。如果成功,就可以用前面描述的--package選項下載下傳你的package了。截至2015年11月,spark package站點上已經有153個package了。下一節将介紹一些庫,它們也是支援spark package形式的,即它們也以spark package格式分發。
盡管xgboost核心開發組不支援這個package,你還是可以使用sparkxgboost包體驗一下在spark上的xgboost的實作。
送出job的流程需要改進,因為對于非工程師來說,這項工作有點難。你需要了解如何用指令行或者其他unix指令去送出spark job。spark項目現在是使用cli來送出job的。spark-jobserver提供了一個restful api來管理送出到spark叢集的job。是以,這意味着可以在企業内部環境中将spark作為一個服務啟動。最簡單的使用spark-observer的方法就是啟動一個為之準備的docker容器。如果你的筆記本上已經有了docker環境,你需要做的就是輸入下面的指令:
執行這條指令,spark-jobserver的docker鏡像将被下載下傳,它會在docker上啟動spark-jobserver作為守護程序。可以通過8090端口檢視這個伺服器的狀态。啟動之後,可以看到下圖所示的web ui。
運作一個job,其過程如下:
(1)上傳應用的jar檔案。
(2)選擇運作在spark-jobserver上的主類。
送出job時不需要每次都編寫spark應用或者編譯它,即使你想與其他人共享。spark-jobserver會對如下對象持久化:
job狀态
job配置
jar
是以,一旦你設定了這些資訊,就不需要再次重新上傳。重要的是,可以通過spark-jobserver與同僚共享你的應用的代碼。可以用curl指令進行上傳:
如果收到上面資訊,就可以上傳你的jar。現在,是時候用輸入資料啟動你的應用了。
你的job應當成功地完成。得到的結果也能通過rest api下載下傳。
這就是一個使用spark-jobserver的程序。雖然這個庫仍然在開發中,但由于它是一個開源項目,是以可能很快就會被應用到實際場景。如果你打算在内部使用以處理日常資料,那麼spark-jobserver是一個不錯的選項。
想及時獲得更多精彩文章,可在微信中搜尋“博文視點”或者掃描下方二維碼并關注。