开源项目推荐 - 巨鲸任务调度平台(Spark、Flink)
# Big Whale
巨鲸任务调度平台为美柚大数据研发的分布式计算任务调度系统,提供Spark、Flink等批处理任务的DAG执行调度和流处理任务的状态监测调度,并具有重复应用检测、大内存应用检测等功能。
服务基于Spring Boot 2.0开发,打包后即可运行。[[Github]](https://github.com/MeetYouDevs/big-whale)[[Gitee]](https://gitee.com/progr1mmer/big-whale) # 部署
## 1.准备
* Java 1.8+
* Mysql 5.1.0+
* 下载项目或git clone项目
* 为解决 github README.md 图片无法正常加载的问题,请在hosts文件中加入相关域名解析规则,参考:[hosts](https://github.com/MeetYouDevs/big-whale/blob/master/doc/hosts)
## 2.安装
* 创建数据库:big-whale
* 运行数据库脚本:[big-whale.sql](https://github.com/MeetYouDevs/big-whale/blob/master/script/big-whale.sql)
* 根据Spring Boot环境,配置相关数据库账号密码,以及SMTP信息
* 配置:[big-whale.properties](https://github.com/MeetYouDevs/big-whale/blob/master/src/main/resources/big-whale.properties)
* 配置项说明
* ssh.user: 拥有脚本执行权限的ssh远程登录用户名(平台会将该用户作为统一的脚本执行用户)
* ssh.password: ssh远程登录用户密码
* dingding.enabled: 是否开启钉钉告警
* dingding.watcher-token: 钉钉公共群机器人Token
* yarn.app-memory-threshold: Yarn应用内存上限(单位:MB),-1禁用检测
* yarn.app-white-list: Yarn应用白名单列表(列表中的应用申请的内存超过上限,不会进行告警)
* 修改:$FLINK_HOME/bin/flink,参考:[flink](https://github.com/MeetYouDevs/big-whale/blob/master/bin/flink)(因flink提交任务时只能读取本地jar包,故需要在执行提交命令时从hdfs上下载jar包并替换脚本中的jar包路径参数)
* 打包:mvn clean package
## 3.启动
* 检查端口17070是否被占用,被占用的话,关闭占用的进程或修改项目端口号配置重新打包
* 拷贝target目录下的big-whale.jar,执行命令:java -jar big-whale.jar
## 4.初始配置
* 打开:http://localhost:17070

* 输入账号admin,密码admin
* 点击:权限管理->用户管理,修改当前账号的邮箱为合法且存在的邮箱地址,否则会导致邮件发送失败
* 添加集群
* 集群管理->集群管理->新增

* “yarn管理地址”为Yarn ResourceManager的WEB UI地址
* “程序包存储目录”为程序包上传至hdfs集群时的存储路径,如:/data/big-whale/storage
* “支持Flink任务代理用户”“流处理任务黑名单”和“批处理任务黑名单”为内部定制的任务分配规则,勿填
* 添加代理
* 集群管理->代理管理->新增

* 可添加多个实例,执行脚本的时候会随机选择一个实例执行,在实例不可达的情况下,会继续随机选择下一个实例,在实例均不可达时执行失败
* 选择集群后,会作为该集群下提交Spark或Flink任务的代理之一
* 添加集群用户
* 集群管理->集群用户->新增

* 该配置的语义为:平台用户在所选集群下可以使用的Yarn资源队列(--queue)和代理用户(--proxy-user)
* 添加计算框架版本
* 集群管理->版本管理->新增

* 同一集群下不同版本的Spark或Flink任务的提交命令可能有所不同,如Spark 1.6.0版本的提交命令为spark-submit,Spark 2.1.0版本的提交命令为spark2-submit
# 使用
## 1.新建脚本
* 脚本管理->新增

* “类型”有shell批处理、spark流处理、spark批处理、flink流处理和flink批处理,示例为:spark流处理
* 因为当前用户为超级管理员,可为所有用户创建脚本,故可以选择“用户”
* 非“shell批处理”类型的脚本应上传与之处理类型相对应的程序包,此处为spark流处理任务打成的jar包
* “资源选项”可不填
* 代码有两种编辑模式,“可视化视图”和“代码视图”,可互相切换

## 2.执行脚本
* 脚本管理

* 点击执行[上一步](#1新建脚本)新建的脚本

* 执行成功后可查看Yarn应用详情连接(代理实例上Yarn任务提交命令的日志级别请设置为:INFO)

* 执行超时或失败会有相应的邮件告警


## 3.任务调度
### 3.1 批处理
* 任务调度->新增->批处理
* 对于类型为“shell批处理”、“spark批处理”和“flink批处理”的脚本,可通过添加此功能实现DAG执行调度 (v1.1开始支持,需要从v1.0升级的,请查阅[SchedulingFieldGenerateForV1_1Test.java](https://github.com/MeetYouDevs/big-whale/blob/master/src/test/java/com/meiyouframework/bigwhale/test/SchedulingFieldGenerateForV1_1Test.java))
* 说明:为防止平台线程被大量占用,平台提交Saprk或Flink任务的时候都会强制以“后台”的方式执行,对应spark配置:--conf spark.yarn.submit.waitAppCompletion=false,flink配置:-d,但是基于后台“批处理应用状态更新任务”的回调,在实现DAG执行引擎时可以确保当前节点脚本所提交的批处理任务运行完成后再执行下一个节点的脚本


### 3.2 流处理
* 任务调度->新增->流处理
* 对于类型为“spark流处理”和“flink流处理”的脚本,可通过添加此功能实现状态监测调度


* 可根据状态监测结果进行相应的处理,如异常重启、批次积压告警等


## 4.Openapi
* /openapi/script/execute.api 执行脚本
* /openapi/scheduling/execute.api 执行任务调度(批处理)
* 请求方式: POST Body
* 参数:
* sign: 用户密码Base64
* id: 脚本ID或离线调度ID
* args: 脚本参数(可选)
```
{
"sign": "c3V4aWFveWFuZzExIQ==",
"id": "8a80813a7154f28a017154f6637c1794",
"args": {
"$output_dir": "/var",
"$dt": "20200415"
}
}
```
# License
The project is licensed under the [Apache 2 license](https://github.com/MeetYouDevs/big-whale/blob/master/LICENSE).
开源项目推荐 - 巨鲸任务调度平台(Spark、Flink)的更多相关文章
- go语言值得学习的开源项目推荐
谷歌官方维护了一个基于go语言的开源项目列表: https://github.com/golang/go/wiki/Projects 其中有非常多的优秀项目值得学习,有几百行代码适合新手阅读的项目,也 ...
- Nodejs开源项目推荐
当我们学习一门新语言,不要用以前语言的习惯去使用新的语言,这样可能会导致走一些弯路.最好的办法就是去看一些写的比较好的开源项目,所以这里我推荐几个NodeJs的开源项目,花点时间去研究一下他们的实现, ...
- 开源项目推荐:e-example / Springboot+bootstrap + ……
前言: 我想要找一个 springboot + bootstrap 的例子介绍,然后搜索到了这个开源项目. 所有能跑起来的项目都有研究价值,看看这个项目的文档.目前正好满足我想要的功能.推荐 正文: ...
- Asp.net Core相关教程及开源项目推荐
入门 全新的ASP.NET: https://www.cnblogs.com/Leo_wl/p/5654828.html 在IIS上部署你的ASP.NET Core项目: https://www.c ...
- 开发app应用的开源项目推荐
app检测内存泄漏 请看这里:LeakCanary Android 和 Java 内存泄露检测 app应用想要控制状态栏 StatusBarUtil :https://github.com/laobi ...
- 值得研究的J2EE开源项目推荐
导读:笔者在学习J2EE的过程中发现了一些很有用,而且很值得学习的开源项目,在此推荐给大家. 关键词:J2EE 开源项目 J2SE JBoss SOA EJB 这篇文章写在我研究J2SE.J2EE ...
- 必须Mark!43个优秀的Swift开源项目推荐
摘要:拥有着苹果先天生态优势的Swift自发布以来,各种优秀的开源项目便层出不穷.本文作者站在个人的角度,将2014年Swift开源项目做了一个甄别.筛选,从工具.存储.网络.界面.框架到Demo以及 ...
- 【转】43个优秀的Swift开源项目推荐
作为一门集百家之长的新语言,Swift拥有着苹果先天的生态优势,而其在GitHub上各种优秀的开源项目也层出不穷.本文作者@SwiftLanguage从2014年6月苹果发布Swift语言以来,便通过 ...
- 10大Python开源项目推荐(Github平均star2135)
翻译 | suisui 来源 | 人工智能头条(AI_Thinker) 继续假日充电系列~本文是 Mybridge 挑选的 10 个 Python 开源项目,Github 平均star 2135,希望 ...
随机推荐
- 入门大数据---Kafka消费者详解
一.消费者和消费者群组 在 Kafka 中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响.Kafka 之所以要引入消费者群组这个概念是因为 Kafka 消费者经 ...
- 搭建hadoop伪集群
基础设置:jdk.ssh. 1.操作系统.环境.网络.必须软件 2.关闭防火墙 3.设置hosts映射 4.时间同步 5.安装jdk 6.设置ssh免秘钥部署配置:初始化运行:命令行使用:
- 宝贝,来,满足你,二哥告诉你学 Java 应该买什么书?
(这次的标题是不是有点皮,对模仿好朋友 guide 哥的,我也要皮一皮) 高尔基说过,对吧?宝贝们,"书籍是人类进步的阶梯",不管学什么,买几本心仪的书读一读,帮助还是非常大的.尽 ...
- 恕我直言你可能真的不会java第9篇-Stream元素的匹配与查找
在我们对数组或者集合类进行操作的时候,经常会遇到这样的需求,比如: 是否包含某一个"匹配规则"的元素 是否所有的元素都符合某一个"匹配规则" 是否所有元素都不符 ...
- Milk Pumping G&Milk Routing S 题解
Milk Pumping G&Milk Routing S 双倍经验时间 洛谷P5837 [USACO19DEC]Milk Pumping G 洛谷P3063 [USACO12DEC]Milk ...
- 【FastDFS】如何打造一款高可用的分布式文件系统?这次我明白了!!
写在前面 前面我们学习了如何基于两台服务器搭建FastDFS环境,而往往在生产环境中,需要FastDFS做到高可用,那如何基于FastDFS打造一款高可用的分布式文件系统呢?别急,今天,我们就一起来基 ...
- JavaScript中数组去重的几种方法
JavaScript中数组去重的几种方法 正常情况下,数据去重的工作一般都是由后端同事来完成的,但是前端也要掌握好处理数据的能力,万一去重的工作交给我们大前端处理,我们也不能怂呀.现在我总结了一些去重 ...
- 51Nod 1683 最短路
题意 给定一个未知的\(0/1\)矩阵,对每个\(i\)求\((1,1)\sim(n,m)\)最短路为\(i\)的概率,在矩阵中不能向左走,路径长度为路径上权值为\(1\)的格子个数. \(n\leq ...
- FarmCraft,又是Dp
题目依然链接 题意: 从根节点出发,每条边走两遍回到根节点,走边用时1,到达某个节点之后开始计时,到该节点最大的计时数时结束,回到根节点时根节点开始计时.求让所有计时都结束的最小时间. Solve: ...
- 返回报文变成xml格式了!
首先,google chrome之前有安装jsonview插件: 然后,自己弄springCloud项目,搭建eureka后,访问url发现返回报文变成xml格式了,一通摸索及查找,现整理如下: 1. ...