streamsets任务批量管理尝试

2 篇文章 0 订阅

使用 streamsets 处理导数据,可以做到在页面拖拉拽创建一个pipeline,就能打通数据通道
在需要接入的业务系统很多的情况下,我们就会创建很多的pipeline,用来导数据
在大量使用全量导入,做T+1数据的情况下,如何管理 streamsets 各个导数据的pipeline的执行会是个比较重要的问题
在此尝试了两种方式来管理 streamsets pipeline 的批量执行

方式一: 使用python直接调streamsets API 的方式

思路简介
  1. 将需要按时调用的pipeline用文本记录下来或记录到数据库,作为配置文件供python解析和使用
  2. 使用python模拟streamsets登录,登陆后,调用对应api查看pipeline运行状态并判断是否需要启动
  3. 调用api启动目标流程,目标流程可以设置回调,调用python服务接口
  4. python服务根据回调的结果设置定时运行的状态
操作方式

以下代码只验证了可行性,使用的streamsets版本为3.17

import json
import requests


def run():
    # 1.模拟登录并获取对应的cookie
    login_url = 'http://192.168.23.45:18630/j_security_check'
    login_param = {
        'j_username': 'admin',
        'j_password': 'admin',
        'basePath': '/',
    }

    login_resp = requests.post(login_url, params=login_param)
    redirect_cookie = login_resp.cookies

    jsessionid = ''
    for k, v in redirect_cookie.items():
        if 'JSESSIONID' in k:
            jsessionid = v
            break

    # 2. 使用该cookie调用streamsets的api
    pipelines_url = 'http://192.168.23.45:18630/rest/v1/pipelines?orderBy=LAST_MODIFIED&order=ASC&label=system:allPipelines&offset=0&len=50&includeStatus=true'
    header = {
        'Accept': 'application/json, text/plain, */*',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'en-US,en;q=0.9',
        'Connection': 'keep-alive',
        'Cookie': f'JSESSIONID_18630={jsessionid}; NG_TRANSLATE_LANG_KEY=en',
        'Host': '192.168.23.45:18630',
        'Referer': 'http://192.168.23.45:18630/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36',
        'X-Requested-By': 'Data Collector'
    }
    content_resp = requests.get(pipelines_url, headers=header)
    print(content_resp.status_code)
    print(content_resp.content.decode('utf8'))


if __name__ == '__main__':
    run()

方式二: 使用streamsets提供的CronScheduler源来辅助管理

思路简介
  1. 在页面使用 CronScheduler 创建 pipeline
  2. 在这个 pipeline 中使用 start pipelines 的 processor 来启动需要管理的pipeline
  3. 对于需要启动的导数 pipeline ,注意设置为完成后恢复到原始状态就可以重复调用了
操作方式
  1. 定时pipeline的大致流程见下图
    在这里插入图片描述
  2. 在 cron scheduler 组件中设置好定时调用的时间,这个格式和linux的crontab表达式差不多,当然也可以在页面上直接选
    在这里插入图片描述
  3. 在 starts pipelines 组件中设置好对应的 pipeline参数
    在这里插入图片描述
  4. 启动后让pipeline一直执行,就会开始定时调用
  5. 注意导数 pipeline 需要的事件处理器中,需要设置恢复初始设置,这样才可以重复调用。在开始定时管理前,需要先将pipeline验证好
    在这里插入图片描述

两种方式的比较

操作方式APICronScheduler
工作量前期较多,会有服务代码开发,后续少
管理范围较大,可以管理多个独立的 streamsets 服务比较局限,如果有多个 streamsets 服务,每个服务都要去对应的 streamsets 界面创建对应的 cron scheduler pipeline
管理有序性较好,做成python的web服务并提供界面后,可以一次性看到每个pipeline的执行时间和执行状态较差,一个cron只能提供一个时间的启动管理,导数据的流程不能同时启动的话(一般都不能),需要配置多个cron的pipeline,且需要自己比较清楚哪些pipeline在哪个流程里面,pipeline越多,维护成本越高
上下游灵活性强,像导入hive这种,如果不加partition又是全量覆盖的话,python可以通过操作hive管理整个过程弱,只能管streamsets,对其它上下游组件没有直接操作方式

以上是两种管理pipelines方式的探索,有更好的(免费版)的方式的欢迎分享

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值