天天看點

關于Slipstream中的Application隔離

以往流處理應用的開發依靠Java或者Scala實作,要求分析者既要熟悉底層架構又要懂業務,才能實作高效的流應用。導緻入門門檻高,開發速度慢。為了簡化複雜的流應用開發過程,Transwarp創新性的引入了Slipstream,使使用者可以直接用SQL實作業務分析,甚至還可以利用PL/SQL實作更複雜的業務邏輯。

如基于流的SQL引擎:Slipstream(基礎介紹)所介紹的,Slipstream有三個核心的概念:Stream、StreamJob 和 Application。Stream是資料流,StreamJob是對一個或多個Stream進行計算并将結果寫進一張表的任務,Application是一個或多個StreamJob的集合,用于實作資源的共享和隔離。本文将基于Slipstream的使用基礎,針對 Slipstream的Application的隔離能力展開介紹。

Application的概念

Application是一組業務邏輯相關的StreamJob的集合。合理地使用Application劃分StreamJob可以很好的實作使用者之間的資源共享和隔離。

關于Slipstream中的Application隔離

資源共享

Application内使用同一個Input Stream的StreamJob将共享一組Receiver,Receiver用于源源不斷的從外部資料源擷取資料。例如上圖,Application 1中的StreamJob 2和StreamJob 3都以Input Stream 2為資料源,它們共享Application 1中為Input Stream 2啟動的Receiver。

資源隔離

不同Application中的StreamJob若使用同一個Input Stream,每個Application會為這些Input Stream分别啟動各自的Receiver。例如上圖,Application 1和Application 2中的StreamJob都通路了Input Stream 2,是以Application 1和Application 2将分别為Input Stream 2啟動一組Receiver。

Application相關文法

Application在靜态時隻是一個邏輯概念,主要用于幫助實作運作時的隔離和權限驗證。使用者可以對Application進行參數配置,且作用範圍僅限于此邏輯單元。使用者利用使用者名登入Shell(比如Beeline),在自己建立的Application下通過SQL編寫業務邏輯,并且可以對Application設定對應的權限(檢視/修改/執行),進而通過Application友善地對業務進行檢視管理。

關于Application的DDL

  • 建立一個Application
CREATE APPLICATION <app_name> WITH APPPROPERTIES(["key"="value"][,"key"="value"...]);

建立一個新的Application,可以用上述文法在APPPROPERTIES中指定任何需要對Application設定的參數。

  • 描述一個Application
DESCRIBE [|DESC] APPLICATION <app_name>;

描述指定Application的資訊。

  • 顯示目前的Application
SHOW CURRENT APPLICATION;

顯示目前使用者所在的Application。

  • 修改一個Application
ALTER APPLICATION <app_name> SET APPPROPERTIES("key"="value");

通過SET APPPROPERTIES修改Application配置資訊。

  • 顯示所有Application
SHOW APPLICATIONS;

顯示所有的Applications。

  • 删除一個Application
DROP APPLICATION <app_name>;

删除指定的Application。

Application級别管理

使用者運作任何StreamJob之前需要進入對應的Application。預設情況下,目前的Application為default。

  • 進入Application
USE APPLICATION <app_name>;
  • 顯示正在運作的Application
LIST APPLICATIONS;

關于Application隔離的應用實戰

使用者Emily作為一名新手剛剛開始接觸Transwarp Slipstream,老闆希望Emily做一些試驗性的任務。由于叢集上已有應用投入生産,為了不随意影響目前正在運作的應用,Emily決定利用StreamSQL支援的Application實作資源隔離,保證現有任務不受建立Application的影響。

連接配接至Inceptor後,Emily通過如下語句檢視目前所有正在運作StreamJob的Application:

關于Slipstream中的Application隔離

發現目前一個名為production的Application有StreamJob正在運作。接着,她查詢了目前所在的Application:

關于Slipstream中的Application隔離

目前正處于一個名為default的Application裡。

為了不影響正在production中運作的為生産所用的StreamJob,Emily向管理者申請建立新的Application。

為了允許Emily建立Application,管理者用hive使用者登陸Inceptor,切換到ADMIN角色:

關于Slipstream中的Application隔離

為使用者Emily建立CREATE Application的權限:

關于Slipstream中的Application隔離

現在Emily就可以開始建立自己的Application并使用它了:

關于Slipstream中的Application隔離

首先Emily在testapp中建立了一個流和一張表:

關于Slipstream中的Application隔離

然後啟動StreamJob:

關于Slipstream中的Application隔離

接着檢視該StreamJob是否啟動成功:

關于Slipstream中的Application隔離

輸出如下,發現該StreamJob确實存在于結果清單中,證明建立成功:

關于Slipstream中的Application隔離

現在Emily再次檢視有StreamJob正在運作的Application:

關于Slipstream中的Application隔離

如果切換到default application然後檢視正在運作的StreamJob:

關于Slipstream中的Application隔離

Emily會發現,并不能獲得production中啟動的StreamJob。此時,如果使用production的使用者檢視production中正在運作的StreamJob,同樣也不會看到Emily剛剛在testapp中啟動的StreamJob。

最後,完成任務後,Emily停止testapp中所有的StreamJobs:先切換回testapp,然後停止其中的StreamJobs。

關于Slipstream中的Application隔離