spark任务shell运行_Python实现SparkStreaming任务监控

SparkStreaming任务监控

SparkStreaming实时计算引擎,在生产应用中为保证系统稳定性,减少事故发生,需做一些事前、事中、事后动作。监控是比不可少的一步,那如何去监控SparkStreaming任务运行状态、计算延迟?Spark监控说明介绍:http://spark.apache.org/docs/latest/monitoring.html

e27ab2734b41af0a8f873d71e9d1c7ee.png

01

▊ Python实现SparkStreaming任务监控

  • 支持 Spark On Yarn 任务运行状态监控,任务停止,执行应用启动脚本

  • 支持 SparkStreaming 任务计算延迟监控,设定延迟预警阀值,超时预警

本文主要介绍本公司内使用RestAPI方式通过Python监控运行指标,SparkStreaming 运行模式Spark On Yarn,Spark版本2.2.0,Python版本3.6.监控内容1.Spark On Yarn 任务运行状态,任务停止则进行预警,启动任务;任务运行中则进行计算延迟监控,设定延迟阀值,超过阀值进行预警。定时调度可使用linux crontab或公司内调度产品,执行频率随可容忍时效而定,目前我们是每5分钟1次。

crontab或公司内调度产品,执行频率随可容忍时效而定,目前我们是每5分钟1次。

import subprocessimport jsonimport urllib.requestimport sys# 规则:监控spark on yarn任务运行状态,监控sparkstreaming 任务运行延迟情况if __name__ == "__main__":    """    # 支持 调用脚本时,指定参数    argv = sys.argv    if len(argv) <= 1:        print('argv', str(argv))        print("argv exception! ")        sys.exit(1)        yarn_master = argv[1]    spark_appname = argv[2]    spark_task_name = argv[3]    delay_threshold = int(argv[4])    shell_app_start = argv[5]    """    # 变量定义    # yarn resourcemanager ip    yarn_master = "192.168.15.11"    # spark appname    spark_appname = "spark-app"    # spark on yarn task name,用于查看SparkOnYarn任务    spark_task_name = "SparkApplication"    # 计算延迟预警阀值    delay_threshold_min = 5    # spark应用启动脚本    shell_app_start = "sh /app/realtime/spark/start-app.sh"          shell_yarn_list = "yarn application -list 2>1 | grep {}".format(spark_task_name)    yarn_list = subprocess.getoutput(shell_yarn_list)    yarn_list_arr = yarn_list.split('\t')    # 判断任务是否运行    if yarn_list and yarn_list_arr[5].strip() == 'RUNNING':        # 监控任务运行情况        url = "http://{}:8088/proxy/{}/metrics/json".format(yarn_master, yarn_list_arr[0])        response = ''        try:            response = urllib.request.urlopen(url)        except Exception as e:            print("ERROR:访问URL异常", str(e), str(url))        if response == '':            # 告警            print("spark on yarn|sparkstreaming application:{}|task :{},url response is null,please check the exception ".format(                spark_appname,spark_task_name))        else:            metrics_data = json.load(response)            totalDelay_key = '{}.driver.{}.StreamingMetrics.streaming.lastCompletedBatch_totalDelay'.format(                yarn_list_arr[0], spark_appname)            totalDelay = metrics_data['gauges'][totalDelay_key]['value']            if totalDelay == '':                # 告警 - kill - start                print(                    "spark on yarn|sparkstreaming application:{}|task :{},totalDelay is null,please check the exception ".format(                        spark_appname,spark_task_name))            elif totalDelay >= delay_threshold_min * 60 * 1000:                # 告警                delayMin = totalDelay / 1000 / 60                print("spark on yarn|sparkstreaming application:{}|task :{},totalDelay {} min ".format(spark_appname,spark_task_name, delayMin))    else:        # 启动spark 任务        print(            "spark on yarn|sparkstreaming application:{}|task :{},task state is stod,next start the task.".format(spark_appname,spark_task_name))        state = subprocess.getoutput(shell_app_start)        print("state: "+state)

注:

[1]SparkStreaming RestAPI监控从spark2.2.0版本开始支持。

注:

[1]SparkStreaming RestAPI监控从spark2.2.0版本开始支持。

[2]预警操作需使用者调整添加,目前生产调用脚本输出信息触发预警接口。

c35cd17998f47cb5f834ad412ae1174e.gif

长按,扫码,关注

及时收看更多精彩内容

05e0ea99ce9562526ae1d42d75b5c23a.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值