文章目录

  • 赫拉
  • 创建表
  • 打包部署
  • 测试
  • TIPS
  • 加入群聊

赫拉

大数据平台,随着业务发展,每天承载着成千上万的ETL任务调度,这些任务集中在hive,shell脚本调度。怎么样让大量的ETL任务准确的完成调度而不出现问题,甚至在任务调度执行中出现错误的情况下,任务能够完成自我恢复甚至执行错误告警与完整的日志查询。hera任务调度系统就是在这种背景下衍生的一款分布式调度系统。随着hera集群动态扩展,可以承载成千上万的任务调度。它是一款原生的分布式任务调度,可以快速的添加部署wokrer节点,动态扩展集群规模。支持shell,hive,spark脚本调度,可以动态的扩展支持python等服务器端脚本调度。

项目地址:git@gitee.com:dfire/hera.git

赫拉(hera)分布式任务调度系统之架构,基本功能(一)

赫拉(hera)分布式任务调度系统之项目启动(二)

赫拉(hera)分布式任务调度系统之开发中心(三)

赫拉(hera)分布式任务调度系统之版本(四)

赫拉(hera)分布式任务调度系统之Q&A(五)

创建表

当使用githera克隆到本地之后,首先在hera/hera-admin/resources目录下找到hera.sql文件,在自己的数据库中新建这些必要的表,并插入初始化的数据(如果你目前使用的是低版本的hera,那么你可以到 update 目录查看是否有你的 hera 版本升级的 ddl ,如果有请根据你的版本依次执行 ddl 语句)
此时可以在hera/hera-admin/resources目录下找到application.yml文件。在文件里修改数据源hera的数据源(修改druid.datasource下的配置)即可进行下面的操作。

spring:profiles:active: @env@  ##当前环境 打包时通过-P来指定http:multipart:max-file-size: 100Mb    #允许上传文件的最大大小max-request-size: 100Mb  #允许上传文件的最大大小freemarker:allow-request-override: truecache: falsecheck-template-location: truecharset: utf-8content-type: text/htmlexpose-request-attributes: falseexpose-session-attributes: falseexpose-spring-macro-helpers: falsesuffix: .ftltemplate-loader-path: classpath:/templates/request-context-attribute: requestdruid:datasource:username: root  #数据库用户名password: XIAOSUDA      #数据库密码driver-class-name: com.mysql.jdbc.Driver  #数据库驱动url: jdbc:mysql://localhost:3306/hera?characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&allowMultiQueries=trueinitial-size: 5    #初始化连接池数量min-idle: 1        #最小生存连接数max-active: 16     #最大连接池数量max-wait: 5000 #获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。time-between-connect-error-millis: 60000  # Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接,单位是毫秒min-evictable-idle-time-millis: 300000  # 连接保持空闲而不被驱逐的最长时间,单位是毫秒test-while-idle: true    #申请连接的时候,如果检测到连接空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效test-on-borrow: true    #申请连接时执行validationQuery检测连接是否有效test-on-return: false   # 归还连接时执行validationQuery检测连接是否有效connection-init-sqls: set names utf8mb4validation-query: select 1                #用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。validation-query-timeout: 1                #单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法log-abandoned: truestat-mergeSql: truefilters: stat,wall,log4jconnection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000server:port: 8080context-path: /heraclean:path: ${server.context-path}
#hera全局配置
hera:defaultWorkerGroup : 1 #默认worker的host组idpreemptionMasterGroup : 1  #抢占master的host组idexcludeFile: jar;warmaxMemRate : 0.80       #已使用内存占总内存的最大比例,默认0.80。当worker内存使用达到此值时将不会再向此work发任务maxCpuLoadPerCore : 1.0   #cpu load per core等于最近1分钟系统的平均cpu负载÷cpu核心数量,默认1.0。当worker平均负载使用达到此值时将不会再向此work发任务scanRate : 1000        #任务队列扫描频率(毫秒)systemMemUsed : 4000  # 系统占用内存   perTaskUseMem : 500   # 假设每个任务使用内存500MrequestTimeout: 10000 # 异步请求超时时间  channelTimeout: 1000 # netty请求超时时间      heartBeat : 3           # 心跳传递时间频率downloadDir : /opt/logs/spring-boothdfsUploadPath : /hera/hdfs-upload-dir/ #此处必须是hdfs路径,所有的上传附件都会存放在下面路径上.注意:必须保证启动hera项目的用户是此文件夹的所有者,否则会导致上传错误schedule-group : onlinemaxParallelNum: 2000   #master 允许的最大并行任务 当大于此数值 将会放在阻塞队列中connectPort : 9887 #netty通信的端口admin: biadmin         # admin用户taskTimeout: 12  #单个任务执行的最大时间  单位:小时env: @env@# 发送配置邮件的发送者
mail:host: smtp.mxhichina.comprotocol: smtpport: 465user: xxxpassword: xxxlogging:config: classpath:logback-spring.xmlpath: /opt/logs/spring-bootlevel:root: INFOorg.springframework: ERRORcom.dfire.common.mapper: ERRORmybatis:configuration:mapUnderscoreToCamelCase: true
#spark 配置
spark :address : jdbc:hive2://localhost:10000driver : org.apache.hive.jdbc.HiveDriverusername : rootpassword : rootmaster : --master yarndriver-memory : --driver-memory 1gdriver-cores : --driver-cores 1executor-memory : -- executor-memory 1gexecutor-cores : --executor-cores 1---
## 开发环境
spring:profiles: devlogging:level:com.dfire.logs.ScheduleLog: ERRORcom.dfire.logs.HeartLog: ERROR---
## 日常环境  通常与开发环境一致
spring:profiles: daily---
## 预发环境
spring:profiles: pre
druid:datasource:url: jdbc:mysql://localhost:3306/lineage?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&allowMultiQueries=trueusername: rootpassword: root
#spark 配置
spark :address : jdbc:hive2://localhost:10000  #spark地址master : --master yarndriver-memory : --driver-memory 2gdriver-cores : --driver-cores 1executor-memory : -- executor-memory 2gexecutor-cores : --executor-cores 1
---
## 正式环境
spring:profiles: publish
druid:datasource:url: jdbc:mysql://localhost:3306/lineage?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&allowMultiQueries=trueusername: rootpassword: root
#spark 配置
spark :address : jdbc:hive2://localhost:10000master : --master yarndriver-memory : --driver-memory 2gdriver-cores : --driver-cores 1executor-memory : -- executor-memory 2gexecutor-cores : --executor-cores 1

打包部署

当上面的操作完成后,即可使用maven的打包命令进行打包

mvn clean package -Dmaven.test.skip -Pdev

打包后可以进入hera-admin/target目录下查看打包后的hera-dev.jar 。此时可以简单使用java -server -Xms4G -Xmx4G -Xmn2G -jar hera.jar启动项目,此时即可在浏览器中输入

localhost:8080/hera/login/admin

即进入登录界面,账号为hera 密码为biadmin,点击登录即进入系统。

注:目前hera有用户账户和组账户之分,默认跳转的登录地址为用户账户,需要用户注册(用户需要归属于一个组账户),然后hera组账户在用户管理里页面审核通过后即可登录用户账户。

顺便附上我的启动脚本

#!/bin/shJAVA_OPTS="-server -Xms4G -Xmx4G -Xmn2G -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=5 -XX:+CMSParallelInitialMarkEnabled -XX:CMSInitiatingOccupancyFraction=80  -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/opt/logs/spring-boot/gc.log -XX:MetaspaceSize=128m -XX:+UseCMSCompactAtFullCollection -XX:MaxMetaspaceSize=128m -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/logs/spring-boot/dump"log_dir="/opt/logs/spring-boot"
log_file="/opt/logs/spring-boot/all.log"
jar_file="/opt/app/spring-boot/hera.jar"#日志文件夹不存在,则创建
if [ ! -d "${log_dir}" ]; thenecho "创建日志目录:${log_dir}"mkdir -p "${log_dir}"echo "创建日志目录完成:${log_dir}"
fi#父目录下jar文件存在
if [ -f "${jar_file}" ]; then#启动jar包 错误输出的error 标准输出的lognohup java $JAVA_OPTS -jar ${jar_file} 1>"${log_file}" 2>"${log_dir}"/error.log &echo "启动完成"exit 0
elseecho -e "\033[31m${jar_file}文件不存在!\033[0m"exit 1
fi

关闭的脚本

#!/bin/bash
ps | grep hera.jar | awk '{print $1}' | xargs kill -9

[注:2.4.1及以上版本已经集成启动和关闭的sh]

如果你的 hera 使用的是 2.4.1 版本以上的,打包后在根目录会出现如图所示的压缩包

你可以通过 ssh 把该包上传到服务器,然后修改 config 目录下的application.yml 配置文件,在 bin 目录里执行 start.sh 脚本即可成功启动hera

测试

在测试之前,由于在 hera 中还用到了 dos2unix ,需要在执行任务的work上安装 dos2unix 工具。

hera系统依赖于dos2unix插件,你可以通过以下几种方式安装
一、mac os
brew install dos2unix
二、linux
yum install dos2unix
三、离线安装
plugins目录里有 dos2unix 的离线安装包,你可以通过以下命令离线安装
sudo rpm -ivh dos2unix-6.0.3-7.el7.x86_64.rpm

此时就登录上了。下面需要做的是在worker管理这里添加执行任务的机器IP,然后选择一个机器组(组的概念:对于不同的worker而言环境可能不同,可能有的用来执行spark任务,有的用来执行hadoop任务,有的只是开发等等。当创建任务的时候根据任务类型选择一个组,要执行任务的时候会发送到相应的组的机器上执行任务)。
对于执行work的机器ip调试时可以是master,生产环境建议不要让master执行任务。如果要执行map-reduce或者spark任务,要保证你的work具有这些集群的客户端。
那么我们就在work管理页面增加要执行的work地址以及机器组。

此时有30分钟的缓冲时间,master 才会检测到该 work 加入。为了测试,此时我们可以通过重启 master 来立刻使该 work加入执行组(后面会增加一键刷新work` 信息)。

此时要注意,我们的 work 也一定也要安装 hera 应用并启动。

重启后我们可以进入调度中心 ,在搜索栏里搜索 1 ,然后按回车

会发现一个 echoTest 任务 ,此时我们还不能执行任务,因为我们的所有任务的执行者登录用户。比如此刻我使用 hera 登录的,那么此时一定要保证你的 work 机器上有 hera 这个用户。
否则执行任务会出现 sudo: unknown user: hera 异常。

此时可以向我们填写的 work 机器上增加 hera 用户。

useradd hera

如果是 mac 系统 那么可以使用以下命令创建 hera 用户

sudo  dscl . -create /Users/hera
sudo  dscl . -create /Users/hera UserShell /bin/bash
sudo  dscl . -create /Users/hera RealName "hera分布式任务调度"
sudo  dscl . -create /Users/hera UniqueID "1024"
sudo  dscl . -create /Users/hera PrimaryGroupID 80
sudo  dscl . -create /Users/hera NFSHomeDirectory /Users/hera

此时点击手动执行->选择版本->执行。此时该任务会运行,点击右上角的查看日志,可以看到任务的执行记录。

此时如果任务执行失败,error 日志内容为

sudo: no tty present and no askpass program specified

那么此时要使你启动hera 项目的用户具有 sudo -u hera 的权限(无须输入root密码,即可执行 sudo -u hera echo 1 ,具体可以在 sudo visudo 中配置)。
比如我启动 hera 应用的用户是 wyr
那么首先在终端执行 sudo visudo命令,此时会进入文本编辑
然后在后面追加一行

wyr             ALL=(ALL) NOPASSWD:ALL

如下图:

这样就会在切换用户的时候无须输入密码。当然如果你使用的是root用户启动,即可跳过这段。

如果一切配置完成,那么即可看到输出任务执行成功的日志。


至此 已经完成了 任务的手动执行。

TIPS

当然在部署的时候可能会出现各种状况。
比如:work 无法连接到 master,连接时抛出

java.net.NoRouteToHostException: 没有到主机的路由

这个时候请注意,我们的master使用的端口是:9887。需要在每台 hera 机器上的防火墙开启此端口(最好关闭防火墙 sudo service iptables stop )。

还有一种情况: work 可以连接上 master ,但是在master日志中发现 work 总是一段时间后断开。原因是:hera 各个机器的时间不一致,修改一下

加入群聊

微信交流群

个人微信(失效加我拉你进去)

赫拉(hera)分布式任务调度系统之项目启动(二)相关推荐

  1. 赫拉(hera)分布式任务调度系统

    相关介绍 赫拉(hera)分布式任务调度系统之架构,基本功能(一) 赫拉(hera)分布式任务调度系统之项目启动(二) 赫拉(hera)分布式任务调度系统之开发中心(三) 赫拉(hera)分布式任务调 ...

  2. 赫拉(hera)分布式任务调度系统之开发中心(三)

    文章目录 赫拉 简介 目录介绍 创建一个脚本 执行选中的代码 上传资源 同步任务 脚本自动保存 加入群聊 赫拉 大数据平台,随着业务发展,每天承载着成千上万的ETL任务调度,这些任务集中在hive,s ...

  3. 赫拉(hera)分布式任务调度系统之操作文档

    文章目录 前言 操作文档 登录和注册 用户 用户组 总结 首页 机器组监控 系统管理 用户管理 用户组 用户 总结 监控管理 机器组管理&worker管理 任务管理 任务详情 任务依赖 上游任 ...

  4. 分布式任务调度系统V1

    分布式任务调度系统V1目标 初步目标实现,实现任务的下发分配,分布式任务执行,支持任务分片(在代码上支持),任务执行记录. 任务调度系统构思 基于C/S架构实现,基于长连接来管理实现,当前版本的逻辑架 ...

  5. 一款你不得不了解的轻量级分布式任务调度系统

    CronMan 分布式任务调度/定时任务系统 github地址:CronMan, 欢迎star 欢迎朋友们站内私信交流~ 简介 CronMan是一款轻量级的分布式任务调度系统.随着微服务化架构的逐步演 ...

  6. 【Python】轻量级分布式任务调度系统-RQ

    一 前言       Redis Queue 一款轻量级的P分布式异步任务队列,基于Redis作为broker,将任务存到redis里面,然后在后台执行指定的Job.就目前而言有三套成熟的工具cele ...

  7. 这些优秀的国产分布式任务调度系统,你用过几个?

    2019独角兽企业重金招聘Python工程师标准>>> 分布式调度在互联网企业中占据着十分重要的作用,尤其是电子商务领域,由于存在数据量大.高并发的特点,对数据处理的要求较高,既要保 ...

  8. 开源分布式任务调度系统就选它!

    分布式任务调度这个话题是每个后端开发和大数据开发都会接触的话题.因为应用场景的广泛,所以有很多开源项目专注于解决这类问题,比如我们熟知的xxl-job. 那么今天要给大家推荐的则是另一个更为强大的开源 ...

  9. 探寻繁杂定时任务的解决方案:分布式任务调度系统

    导语:本文我们从架构和技术实现上来为大家讲解腾讯云分布式任务调度系统TCT(Tencent Cloud Task)如何实现任务调度的精准实时.稳定高效,以及任务的切分和编排.(编辑:中间件小Q妹) 0 ...

最新文章

  1. 【竞赛相关】南大化院博士刘子腾:跨专业如何做数据竞赛浅谈
  2. selenium(2.4.0)中不能导出web drive 代码
  3. Docker系列(一):容器监控工具Weave Scope安装
  4. The Web Audio autoplay policy will be re-enabled in 音频无法播放
  5. redis 都有哪些数据类型?分别在哪些场景下使用比较合适?
  6. Salesforce 为什么要收购 Slack?
  7. jenkins教程菜鸟_Jenkins教程:修改Jenkins端口号
  8. 《2018华为92家核心供应商及其供应产品》
  9. qq linux 2014,linux下安装 QQ2014
  10. 8种妙招,公众号实现吸粉引流
  11. 真假马云Deciphering Jack Ma
  12. [Echarts][全网唯一]X轴axisLabel随文字长度自动旋转的实现思路
  13. 计算机网络交换机无法ping,无法Ping通路由器交换机提示request time out修复方法
  14. 决策树算法的总结归纳
  15. B站:你阳了和我裁员有什么关系
  16. 安装VMware和安装Linux
  17. 2020年江苏中考数学能用计算机吗,2020年【中考数学】真题及模拟:几何探究型问题(原卷版)(江苏专用).docx...
  18. DevExpress----破解补丁
  19. python不可以中文注释的解决办法
  20. 连浏览器都卷,64g小内存手机配不上夸克的光环了

热门文章

  1. Android简单电子书
  2. 游戏中的数学与物理(一)
  3. oracle数据前面补0,Oracle 数字前面自动补0
  4. Objective中调用Swift代码
  5. android so strip,用于CMake构建工具链中“strip”命令的Android NDK路径变量
  6. FPGA与单片机之间的数据通信
  7. Actions as Moving Points
  8. 无桥PFC的家族推演
  9. 华三s5000配置镜像接口_H3C S5000交换机简单配置
  10. Windows服务简介(转)