首页 / 新闻

04.

14

2017

关于StreamSQL中的Application隔离

技术博客

以往流处理应用的开发依靠Java或者Scala实现,要求分析者既要熟悉底层架构又要懂业务,才能实现高效的流应用。导致入门门槛高,开发速度慢。为了简化复杂的流应用开发过程,Transwarp创新性的引入了StreamSQL,使用户可以直接用SQL实现业务分析,甚至还可以利用PL/SQL实现更复杂的业务逻辑。

基于流的SQL引擎:StreamSQL(基础介绍)所介绍的,StreamSQL有三个核心的概念:Stream、StreamJob 和 Application。Stream是数据流,StreamJob是对一个或多个Stream进行计算并将结果写进一张表的任务,Application是一个或多个StreamJob的集合,用于实现资源的共享和隔离。本文将基于StreamSQL的使用基础,针对 StreamSQL的Application的隔离能力展开介绍。

Application的概念

Application是一组业务逻辑相关的StreamJob的集合。合理地使用Application划分StreamJob可以很好的实现用户之间的资源共享和隔离。

资源共享

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 WITH APPPROPERTIES(["key"="value"][,"key"="value"...]);

创建一个新的Application,可以用上述语法在APPPROPERTIES中指定任何需要对Application设置的参数。

  • 描述一个Application

DESCRIBE [|DESC] APPLICATION ;

描述指定Application的信息。

  • 显示当前的Application

SHOW CURRENT APPLICATION;

显示当前用户所在的Application。

  • 修改一个Application

ALTER APPLICATION SET APPPROPERTIES("key"="value");

通过SET APPPROPERTIES修改Application配置信息。

  • 显示所有Application

SHOW APPLICATIONS;

显示所有的Applications。

  • 删除一个Application

DROP APPLICATION ;

删除指定的Application。

Application级别管理

用户运行任何StreamJob之前需要进入对应的Application。默认情况下,当前的Application为default。

  • 进入Application

USE APPLICATION ;

  • 显示正在运行的Application

LIST APPLICATIONS;

关于Application隔离的应用实战

用户Emily作为一名新手刚刚开始接触Transwarp StreamSQL,老板希望Emily做一些试验性的任务。由于集群上已有应用投入生产,为了不随意影响当前正在运行的应用,Emily决定利用StreamSQL支持的Application实现资源隔离,保证现有任务不受新建Application的影响。

连接至Inceptor后,Emily通过如下语句查看当前所有正在运行StreamJob的Application:

发现当前一个名为production的Application有StreamJob正在运行。接着,她查询了当前所在的Application:

目前正处于一个名为default的Application里。

为了不影响正在production中运行的为生产所用的StreamJob,Emily向管理员申请创建新的Application。

为了允许Emily新建Application,管理员用hive用户登陆Inceptor,切换到ADMIN角色:

为用户Emily创建CREATE Application的权限:

现在Emily就可以开始创建自己的Application并使用它了:

首先Emily在testapp中新建了一个流和一张表:

然后启动StreamJob:

接着查看该StreamJob是否启动成功:

输出如下,发现该StreamJob确实存在于结果列表中,证明创建成功:

现在Emily再次查看有StreamJob正在运行的Application:

如果切换到default application然后查看正在运行的StreamJob:

Emily会发现,并不能获得production中启动的StreamJob。此时,如果使用production的用户查看production中正在运行的StreamJob,同样也不会看到Emily刚刚在testapp中启动的StreamJob。

最后,完成任务后,Emily停止testapp中所有的StreamJobs:先切换回testapp,然后停止其中的StreamJobs。

结语

StreamSQL支持并引入Application的概念,就是为了在流处理平台上实现面向用户的资源隔离。Application之间彼此独立,使不同Application中的StreamJob即使访问了同一个Input Stream,也对对方一无所知,从而构造出一种独立的环境。Application隔离方便了对于StreamJob的资源管理和分配,同时了加强了对信息的安全保障。各个应用平行运作,互不影响,有效的提升了开发效率。

对此篇文章如有任何问题,欢迎以邮件形式联系我们:bigdataopenlab@transwarp.io