当前位置: 首页 > news >正文

Azkaban学习——单机版安装与部署

目录

1.解压改名

2.修改装有mysql的虚拟机的my.cnf文件

3.重启装有mysql的虚拟机

4.Datagrip创建azkaban数据库,执行脚本文件

5.修改/opt/soft/azkaban-exec/conf/azkaban.properties文件

6.修改commonprivate.properties

7.传入mysql-connector-java-8.0.29.jar

8.开启Azkaban服务

9.进入Datagrip查看是否成功激活

10.激活executor

11.修改/opt/soft/azkaban-web/conf/azkaban.properties文件

12.修改/opt/soft/azkaban-web/conf/azkaban-users.xml文件

13.复制mysql-connector-java-8.0.29.jar

14.开启AzkabanWeb工程

15.浏览器打开Azkaban服务

16.Azkaban的关闭


1.解压改名

注意:安装Azkaban尽量与安装了mysql的机器避开

[root@lxm147 install]# tar -zxf azkaban-db-3.84.4.tar.gz -C /opt/soft/
[root@lxm147 install]# tar -zxf azkaban-exec-server-3.84.4.tar.gz -C /opt/soft/
[root@lxm147 install]# tar -zxf azkaban-web-server-3.84.4.tar.gz -C /opt/soft/[root@lxm147 soft]# mv azkaban-db-0.1.0-SNAPSHOT/ azkaban-db
[root@lxm147 soft]# mv azkaban-exec-server-0.1.0-SNAPSHOT/ azkaban-exec
[root@lxm147 soft]# mv azkaban-web-server-0.1.0-SNAPSHOT/ azkaban-web

2.修改装有mysql的虚拟机的my.cnf文件

进入/opt/soft/mysql8目录下,修改my.cnf文件,第31行

 31 max_allowed_packet = 1024M

3.重启装有mysql的虚拟机

[root@localhost mysql8]# shutdown -r now
PolicyKit daemon disconnected from the bus.
We are no longer a registered authentication agent.
Connection closing...Socket close.# 或者
[root@localhost mysql8]# service mysqld restart

4.Datagrip创建azkaban数据库,执行脚本文件

Datagrip连接mysql数据库,执行以下命令:

create database if not exists azkaban;use azkaban;CREATE TABLE active_executing_flows (exec_id     INT,update_time BIGINT,PRIMARY KEY (exec_id)
);
CREATE TABLE active_sla (exec_id    INT          NOT NULL,job_name   VARCHAR(128) NOT NULL,check_time BIGINT       NOT NULL,rule       TINYINT      NOT NULL,enc_type   TINYINT,options    LONGBLOB     NOT NULL,PRIMARY KEY (exec_id, job_name)
);
CREATE TABLE execution_dependencies(trigger_instance_id varchar(64),dep_name varchar(128),starttime bigint(20) not null,endtime bigint(20),dep_status tinyint not null,cancelleation_cause tinyint not null,project_id INT not null,project_version INT not null,flow_id varchar(128) not null,flow_version INT not null,flow_exec_id INT not null,primary key(trigger_instance_id, dep_name)
);CREATE INDEX ex_end_timeON execution_dependencies (endtime);
CREATE TABLE execution_flows (exec_id     INT          NOT NULL AUTO_INCREMENT,project_id  INT          NOT NULL,version     INT          NOT NULL,flow_id     VARCHAR(128) NOT NULL,status      TINYINT,submit_user VARCHAR(64),submit_time BIGINT,update_time BIGINT,start_time  BIGINT,end_time    BIGINT,enc_type    TINYINT,flow_data   LONGBLOB,executor_id INT                   DEFAULT NULL,use_executor INT                  DEFAULT NULL,flow_priority TINYINT    NOT NULL DEFAULT 5,PRIMARY KEY (exec_id)
);CREATE INDEX ex_flows_start_timeON execution_flows (start_time);
CREATE INDEX ex_flows_end_timeON execution_flows (end_time);
CREATE INDEX ex_flows_time_rangeON execution_flows (start_time, end_time);
CREATE INDEX ex_flows_flowsON execution_flows (project_id, flow_id);
CREATE INDEX executor_idON execution_flows (executor_id);
CREATE INDEX ex_flows_stausON execution_flows (status);
CREATE TABLE execution_jobs (exec_id       INT          NOT NULL,project_id    INT          NOT NULL,version       INT          NOT NULL,flow_id       VARCHAR(128) NOT NULL,job_id        VARCHAR(512) NOT NULL,attempt       INT,start_time    BIGINT,end_time      BIGINT,status        TINYINT,input_params  LONGBLOB,output_params LONGBLOB,attachments   LONGBLOB,PRIMARY KEY (exec_id, job_id, flow_id, attempt)
);CREATE INDEX ex_job_idON execution_jobs (project_id, job_id);
-- In table execution_logs, name is the combination of flow_id and job_id
--
-- prefix support and lengths of prefixes (where supported) are storage engine dependent.
-- By default, the index key prefix length limit is 767 bytes for innoDB.
-- from: https://dev.mysql.com/doc/refman/5.7/en/create-index.htmlCREATE TABLE execution_logs (exec_id     INT NOT NULL,name        VARCHAR(640),attempt     INT,enc_type    TINYINT,start_byte  INT,end_byte    INT,log         LONGBLOB,upload_time BIGINT,PRIMARY KEY (exec_id, name, attempt, start_byte)
);CREATE INDEX ex_log_attemptON execution_logs (exec_id, name, attempt);
CREATE INDEX ex_log_indexON execution_logs (exec_id, name);
CREATE INDEX ex_log_upload_timeON execution_logs (upload_time);
CREATE TABLE executor_events (executor_id INT      NOT NULL,event_type  TINYINT  NOT NULL,event_time  DATETIME NOT NULL,username    VARCHAR(64),message     VARCHAR(512)
);CREATE INDEX executor_logON executor_events (executor_id, event_time);
CREATE TABLE executors (id     INT         NOT NULL PRIMARY KEY AUTO_INCREMENT,host   VARCHAR(64) NOT NULL,port   INT         NOT NULL,active BOOLEAN                          DEFAULT FALSE,UNIQUE (host, port)
);CREATE INDEX executor_connectionON executors (host, port);
CREATE TABLE project_events (project_id INT     NOT NULL,event_type TINYINT NOT NULL,event_time BIGINT  NOT NULL,username   VARCHAR(64),message    VARCHAR(512)
);CREATE INDEX logON project_events (project_id, event_time);
CREATE TABLE project_files (project_id INT NOT NULL,version    INT NOT NULL,chunk      INT,size       INT,file       LONGBLOB,PRIMARY KEY (project_id, version, chunk)
);CREATE INDEX file_versionON project_files (project_id, version);
CREATE TABLE project_flow_files (project_id        INT          NOT NULL,project_version   INT          NOT NULL,flow_name         VARCHAR(128) NOT NULL,flow_version      INT          NOT NULL,modified_time     BIGINT       NOT NULL,flow_file         LONGBLOB,PRIMARY KEY (project_id, project_version, flow_name, flow_version)
);
CREATE TABLE project_flows (project_id    INT    NOT NULL,version       INT    NOT NULL,flow_id       VARCHAR(128),modified_time BIGINT NOT NULL,encoding_type TINYINT,json          MEDIUMBLOB,PRIMARY KEY (project_id, version, flow_id)
);CREATE INDEX flow_indexON project_flows (project_id, version);
CREATE TABLE project_permissions (project_id    VARCHAR(64) NOT NULL,modified_time BIGINT      NOT NULL,name          VARCHAR(64) NOT NULL,permissions   INT         NOT NULL,isGroup       BOOLEAN     NOT NULL,PRIMARY KEY (project_id, name, isGroup)
);CREATE INDEX permission_indexON project_permissions (project_id);
CREATE TABLE project_properties (project_id    INT    NOT NULL,version       INT    NOT NULL,name          VARCHAR(255),modified_time BIGINT NOT NULL,encoding_type TINYINT,property      BLOB,PRIMARY KEY (project_id, version, name)
);CREATE INDEX properties_indexON project_properties (project_id, version);
CREATE TABLE project_versions (project_id           INT           NOT NULL,version              INT           NOT NULL,upload_time          BIGINT        NOT NULL,uploader             VARCHAR(64)   NOT NULL,file_type            VARCHAR(16),file_name            VARCHAR(128),md5                  BINARY(16),num_chunks           INT,resource_id          VARCHAR(512)  DEFAULT NULL,startup_dependencies MEDIUMBLOB    DEFAULT NULL,uploader_ip_addr     VARCHAR(50)   DEFAULT NULL,PRIMARY KEY (project_id, version)
);CREATE INDEX version_indexON project_versions (project_id);
CREATE TABLE projects (id               INT         NOT NULL PRIMARY KEY AUTO_INCREMENT,name             VARCHAR(64) NOT NULL,active           BOOLEAN,modified_time    BIGINT      NOT NULL,create_time      BIGINT      NOT NULL,version          INT,last_modified_by VARCHAR(64) NOT NULL,description      VARCHAR(2048),enc_type         TINYINT,settings_blob    LONGBLOB
);CREATE INDEX project_nameON projects (name);
CREATE TABLE properties (name          VARCHAR(64) NOT NULL,type          INT         NOT NULL,modified_time BIGINT      NOT NULL,value         VARCHAR(256),PRIMARY KEY (name, type)
);
-- This file collects all quartz table create statement required for quartz 2.2.1
--
-- We are using Quartz 2.2.1 tables, the original place of which can be found at
-- https://github.com/quartz-scheduler/quartz/blob/quartz-2.2.1/distribution/src/main/assembly/root/docs/dbTables/tables_mysql.sqlDROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
DROP TABLE IF EXISTS QRTZ_LOCKS;
DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
DROP TABLE IF EXISTS QRTZ_CALENDARS;CREATE TABLE QRTZ_JOB_DETAILS(SCHED_NAME VARCHAR(120) NOT NULL,JOB_NAME  VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,DESCRIPTION VARCHAR(250) NULL,JOB_CLASS_NAME   VARCHAR(250) NOT NULL,IS_DURABLE VARCHAR(1) NOT NULL,IS_NONCONCURRENT VARCHAR(1) NOT NULL,IS_UPDATE_DATA VARCHAR(1) NOT NULL,REQUESTS_RECOVERY VARCHAR(1) NOT NULL,JOB_DATA BLOB NULL,PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
);CREATE TABLE QRTZ_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,JOB_NAME  VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,DESCRIPTION VARCHAR(250) NULL,NEXT_FIRE_TIME BIGINT(13) NULL,PREV_FIRE_TIME BIGINT(13) NULL,PRIORITY INTEGER NULL,TRIGGER_STATE VARCHAR(16) NOT NULL,TRIGGER_TYPE VARCHAR(8) NOT NULL,START_TIME BIGINT(13) NOT NULL,END_TIME BIGINT(13) NULL,CALENDAR_NAME VARCHAR(200) NULL,MISFIRE_INSTR SMALLINT(2) NULL,JOB_DATA BLOB NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)
);CREATE TABLE QRTZ_SIMPLE_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,REPEAT_COUNT BIGINT(7) NOT NULL,REPEAT_INTERVAL BIGINT(12) NOT NULL,TIMES_TRIGGERED BIGINT(10) NOT NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);CREATE TABLE QRTZ_CRON_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,CRON_EXPRESSION VARCHAR(200) NOT NULL,TIME_ZONE_ID VARCHAR(80),PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);CREATE TABLE QRTZ_SIMPROP_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,STR_PROP_1 VARCHAR(512) NULL,STR_PROP_2 VARCHAR(512) NULL,STR_PROP_3 VARCHAR(512) NULL,INT_PROP_1 INT NULL,INT_PROP_2 INT NULL,LONG_PROP_1 BIGINT NULL,LONG_PROP_2 BIGINT NULL,DEC_PROP_1 NUMERIC(13,4) NULL,DEC_PROP_2 NUMERIC(13,4) NULL,BOOL_PROP_1 VARCHAR(1) NULL,BOOL_PROP_2 VARCHAR(1) NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);CREATE TABLE QRTZ_BLOB_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,BLOB_DATA BLOB NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);CREATE TABLE QRTZ_CALENDARS(SCHED_NAME VARCHAR(120) NOT NULL,CALENDAR_NAME  VARCHAR(200) NOT NULL,CALENDAR BLOB NOT NULL,PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)
);CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_GROUP  VARCHAR(200) NOT NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)
);CREATE TABLE QRTZ_FIRED_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,ENTRY_ID VARCHAR(95) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,INSTANCE_NAME VARCHAR(200) NOT NULL,FIRED_TIME BIGINT(13) NOT NULL,SCHED_TIME BIGINT(13) NOT NULL,PRIORITY INTEGER NOT NULL,STATE VARCHAR(16) NOT NULL,JOB_NAME VARCHAR(200) NULL,JOB_GROUP VARCHAR(200) NULL,IS_NONCONCURRENT VARCHAR(1) NULL,REQUESTS_RECOVERY VARCHAR(1) NULL,PRIMARY KEY (SCHED_NAME,ENTRY_ID)
);CREATE TABLE QRTZ_SCHEDULER_STATE(SCHED_NAME VARCHAR(120) NOT NULL,INSTANCE_NAME VARCHAR(200) NOT NULL,LAST_CHECKIN_TIME BIGINT(13) NOT NULL,CHECKIN_INTERVAL BIGINT(13) NOT NULL,PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)
);CREATE TABLE QRTZ_LOCKS(SCHED_NAME VARCHAR(120) NOT NULL,LOCK_NAME  VARCHAR(40) NOT NULL,PRIMARY KEY (SCHED_NAME,LOCK_NAME)
);commit;
CREATE TABLE ramp (rampId VARCHAR(45) NOT NULL,rampPolicy VARCHAR(45) NOT NULL,maxFailureToPause INT NOT NULL DEFAULT 0,maxFailureToRampDown INT NOT NULL DEFAULT 0,isPercentageScaleForMaxFailure TINYINT NOT NULL DEFAULT 0,startTime BIGINT NOT NULL DEFAULT 0,endTime BIGINT NOT NULL DEFAULT 0,lastUpdatedTime BIGINT NOT NULL DEFAULT 0,numOfTrail INT NOT NULL DEFAULT 0,numOfFailure INT NOT NULL DEFAULT 0,numOfSuccess INT NOT NULL DEFAULT 0,numOfIgnored INT NOT NULL DEFAULT 0,isPaused TINYINT NOT NULL DEFAULT 0,rampStage TINYINT NOT NULL DEFAULT 0,isActive TINYINT NOT NULL DEFAULT 0,PRIMARY KEY (rampId)
);CREATE INDEX idx_rampON ramp (rampId);
CREATE TABLE ramp_dependency (dependency VARCHAR(45) NOT NULL,defaultValue VARCHAR (500),jobtypes VARCHAR (1000),PRIMARY KEY (dependency)
);CREATE INDEX idx_ramp_dependencyON ramp_dependency(dependency);
CREATE TABLE ramp_exceptional_flow_items (rampId VARCHAR(45) NOT NULL,flowId VARCHAR(128) NOT NULL,treatment VARCHAR(1) NOT NULL,timestamp BIGINT NULL,PRIMARY KEY (rampId, flowId)
);CREATE INDEX idx_ramp_exceptional_flow_itemsON ramp_exceptional_flow_items (rampId, flowId);
CREATE TABLE ramp_exceptional_job_items (rampId VARCHAR(45) NOT NULL,flowId VARCHAR(128) NOT NULL,jobId VARCHAR(128) NOT NULL,treatment VARCHAR(1) NOT NULL,timestamp BIGINT NULL,PRIMARY KEY (rampId, flowId, jobId)
);CREATE INDEX idx_ramp_exceptional_job_itemsON ramp_exceptional_job_items (rampId, flowId, jobId);
CREATE TABLE ramp_items (rampId VARCHAR(45) NOT NULL,dependency VARCHAR(45) NOT NULL,rampValue VARCHAR (500) NOT NULL,PRIMARY KEY (rampId, dependency)
);CREATE INDEX idx_ramp_itemsON ramp_items (rampId, dependency);
CREATE TABLE triggers (trigger_id     INT    NOT NULL AUTO_INCREMENT,trigger_source VARCHAR(128),modify_time    BIGINT NOT NULL,enc_type       TINYINT,data           LONGBLOB,PRIMARY KEY (trigger_id)
);
CREATE TABLE validated_dependencies (file_name         VARCHAR(128),file_sha1         CHAR(40),validation_key    CHAR(40),validation_status INT,PRIMARY KEY (validation_key, file_name, file_sha1)
);

5.修改/opt/soft/azkaban-exec/conf/azkaban.properties文件

vim /opt/soft/azkaban-exec/conf/azkaban.properties7 default.timezone.id=Asia/Shanghai21 azkaban.webserver.url=http://192.168.180.147:808144 mysql.host=192.168.180.14145 mysql.database=azkaban46 mysql.user=root47 mysql.password=root52 executor.port=12321

6.修改commonprivate.properties

[root@lxm147 jobtypes]# vim /opt/soft/azkaban-exec/plugins/jobtypes/commonprivate.properties3 azkaban.native.lib=false

7.传入mysql-connector-java-8.0.29.jar

进入/opt/soft/azkaban-exec/lib目录下

[root@lxm147 lib]# cp /opt/soft/hive312/lib/mysql-connector-java-8.0.29.jar /opt/soft/azkaban-exec/lib[root@lxm147 lib]# rm -rf /opt/soft/azkaban-exec/lib/mysql-connector-java-5.1.28.jar

8.开启Azkaban服务

进入 /opt/soft/azkaban-exec/bin目录下
[root@lxm147 bin]# ./start-exec.sh[root@lxm147 bin]# jps
14647 AzkabanExecutorServer
15581 Jps

9.进入Datagrip查看是否成功激活

use azkaban;
select * from executors;

10.激活executor

[root@lxm147 bin]# curl -G "192.168.180.147:12321/executor?action=activate" && echo
{"status":"success"}

激活成功(忽略我的id,因为已经启动过很多次了)

11.修改/opt/soft/azkaban-web/conf/azkaban.properties文件

vim /opt/soft/azkaban-web/conf/azkaban.properties 7 default.timezone.id=Asia/Shanghai41 mysql.host=192.168.180.14142 mysql.database=azkaban43 mysql.user=root44 mysql.password=root48 # MinimumFreeMemory 默认6G,实际服务器内存如果小于此值不启动49 azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus

12.修改/opt/soft/azkaban-web/conf/azkaban-users.xml文件

vim /opt/soft/azkaban-web/conf/azkaban-users.xml <azkaban-users><user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/><user password="metrics" roles="metrics" username="metrics"/><user password="123456" roles="admin" username="kb21"/><role name="admin" permissions="ADMIN"/><role name="metrics" permissions="METRICS"/>
</azkaban-users>

13.复制mysql-connector-java-8.0.29.jar

进入/opt/soft/azkaban-web/lib目录下

[root@lxm147 lib]# cp /opt/soft/hive312/lib/mysql-connector-java-8.0.29.jar /opt/soft/azkaban-web/lib[root@lxm147 lib]# rm -rf /opt/soft/azkaban-web/lib/mysql-connector-java-5.1.28.jar 

14.开启AzkabanWeb工程

进入/opt/soft/azkaban-web目录下

注意:这里不要进入到bin目录下执行start-web.sh命令,因为conf/azkaban-users.xml目录中的某些文件路径是在/conf上面的

[root@lxm147 azkaban-web]# ./bin/start-web.sh 
[root@lxm147 azkaban-web]# jps
14647 AzkabanExecutorServer
15641 Jps
15615 AzkabanWebServer

15.浏览器打开Azkaban服务

浏览器输入localhost:8081,如果有下面的页面弹出,就说明Azkaban真正启动,如果没有,可以看看有没有遗漏的步骤,或者写错的单词。

登录的用户名和密码就是步骤11新增的

16.Azkaban的关闭

我们之前开启的顺序是:

# 进入 /opt/soft/azkaban-exec/bin目录下
[root@lxm147 bin]# ./start-exec.sh[root@lxm147 bin]# curl -G "192.168.180.147:12321/executor?action=activate" && echo
{"status":"success"}# 进入 /opt/soft/azkaban-web目录下
[root@lxm147 azkaban-web]# ./bin/start-web.sh 

关闭服务要反着来:

# 先关闭web
[root@lxm147 ~]# cd /opt/soft/azkaban-web/[root@lxm147 azkaban-web]# ./bin/shutdown-web.sh 
Killing web-server. [pid: 15971], attempt: 1
shutdown succeeded[root@lxm147 azkaban-web]# jps
15937 AzkabanExecutorServer
23110 Jps# 再关闭exec
[root@lxm147 azkaban-web]# cd /opt/soft/azkaban-exec/[root@lxm147 azkaban-exec]# ./bin/shutdown-exec.sh 
Killing executor. [pid: 15937], attempt: 1
shutdown succeeded[root@lxm147 azkaban-exec]# jps
23139 Jps

关于Azkaban的使用,后面会写,敬请期待。

相关文章:

Azkaban学习——单机版安装与部署

目录 1.解压改名 2.修改装有mysql的虚拟机的my.cnf文件 3.重启装有mysql的虚拟机 4.Datagrip创建azkaban数据库&#xff0c;执行脚本文件 5.修改/opt/soft/azkaban-exec/conf/azkaban.properties文件 6.修改commonprivate.properties 7.传入mysql-connector-java-8.0.29…...

table标签-移动端适配

封装一个组件&#xff0c;该组件需要根据不同设备屏幕宽度自适应调整展示方式。对于 PC 端&#xff0c;以类似 el-table 的形式展示数据&#xff0c;而移动端则以一个类似 item 的形式展示每行数据。 可以先在组件中判断设备类型&#xff0c;如以下示例代码所示&#xff1a; …...

Yolov8改进---注意力机制:DoubleAttention、SKAttention,SENet进阶版本

目录 🏆🏆🏆🏆🏆🏆Yolov8魔术师🏆🏆🏆🏆🏆🏆 1. DoubleAttention 2. SKAttention 3.总结...

【逆向工程核心原理:TLS回调函数】

TLS 代码逆向分析领域中&#xff0c;TLS&#xff08;Thread Local Storage&#xff0c;线程局部存储&#xff09;回调函数&#xff08;Callback Function&#xff09;常用反调试。TLS回调函数的调用运行要先于EP代码的执行&#xff0c;该特征使它可以作为一种反调试技术的使用…...

“Shell“Awk命令

文章目录 一.Awk二.Awk按行输出文本三.Awk按字段输出文本四.通过管道&#xff0c;双引号调用shell命令五.总结&#xff1a; 一.Awk Awk的工作原理&#xff1a; 逐行读取文本&#xff0c;默认以空格或tab键为分隔符进行分隔&#xff0c;将分隔所得的各个字段保存到内建变量中&a…...

射频放大器的原理和作用(射频放大器和功率放大器的区别)

射频放大器是一种电子电路&#xff0c;用于将输入信号增强到足够高的电平以驱动射频输出负载。其原理和作用如下&#xff1a; 射频放大器的工作原理是利用晶体管的三极管效应&#xff0c;将输入信号放大到足够的电平以驱动输出负载。在射频放大器中&#xff0c;输入信号经过输入…...

揭秘KubeEdge边缘网络项目EdgeMesh:如何打造高速、安全、低延迟的互联网连接

KubeEdge是由百度主导的边缘计算项目&#xff0c;旨在为物联网设备提供一种高效、安全的互联网连接方式。EdgeMesh是KubeEdge的核心组件之一&#xff0c;它是一种基于OpenDaylight的边缘网络协议&#xff0c;能够在物联网设备之间提供高速、可靠的互联网连接。 EdgeMesh的设计目…...

Java设计模式 14-访问者模式

访问者模式 这个模式用的很少&#xff0c;《设计模式》的作者评价为&#xff1a; 大多情况下&#xff0c;你不需要使用访问者模式&#xff0c;但是一旦需要使用它时&#xff0c;那就真的需要使用了 一、测评系统的需求 1)将观众分为男人和女人&#xff0c;对歌手进行测评&…...

【数据结构】线性表之链表

目录 前言一、链表的定义二、链表的分类1. 单向和双向2. 带头和不带头3. 循环和不循环4. 常用&#xff08;无头单向非循环链表和带头双向循环链表&#xff09; 三、无头单向非循环链表的接口及实现1. 单链表的接口2. 接口的实现 四、带头双向循环链表接口的及实现1. 双向链表的…...

微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台

微服架构基础设施环境平台搭建 -&#xff08;四&#xff09;在Kubernetes集群基础上搭建Kubesphere平台 通过采用微服相关架构构建一套以KubernetesDocker为自动化运维基础平台&#xff0c;以微服务为服务中心&#xff0c;在此基础之上构建业务中台&#xff0c;并通过Jekins自动…...

Linux开发板安装Python环境

1. 环境介绍 硬件&#xff1a;STM32MP157&#xff0c;使用的是野火出的开发板。 软件&#xff1a;Debian ARM 架构制作的 Linux 发行版&#xff0c;版本信息如下&#xff1a; Linux发行版本&#xff1a;Debian GNU/Linux 10 内核版本&#xff1a;4.19.94 2. Python 简介…...

ChatGPT 聊天接口API 使用

一、准备工作 1.准备 OPENAI_ACCESS_TOKEN 2.准备好PostMan 软件 二、测试交流Demo 本次使用POSTMAN工具进行快速测试&#xff0c;旨在通过ChatGPT API实现有效的上下文流。在测试过程中&#xff0c;我们发现了三个问题&#xff1a;    1.如果您想要进行具有上下文的交流&…...

软件测试月薪2万,需要技术达到什么水平?

最近跟朋友在一起聚会的时候&#xff0c;提了一个问题&#xff0c;说一个软件测试工程师如何能月薪达到二万&#xff0c;技术水平需要达到什么程度&#xff1f;人回答说这只能是大企业或者互联网企业工程师才能拿到。也许是的&#xff0c;小公司或者非互联网企业拿二万的不太可…...

从入门到进阶,Vue框架让Web开发更简单高效

Vue是现代前端开发中最为流行的JavaScript框架之一&#xff0c;它具有轻量、易学、易用的特点&#xff0c;能够帮助开发者构建出高效、交互丰富的Web应用。在本文中&#xff0c;我们将会深入探索Vue框架的各个方面&#xff0c;包括Vue组件、Vue路由、Vue状态管理等&#xff0c;…...

怎么缩小照片的kb,压缩照片kb的几种方法

缩小照片的KB大小是我们日常工作生活中遇到的常见问题。虽然听起来十分专业&#xff0c;但其实很简单。照片的KB是指照片文件的大小&#xff0c;通常以“KB”为单位表示。缩小照片的KB就是减小照片文件的大小&#xff0c;以便占用更少的磁盘空间或更快地上传和下载照片。在实际…...

2. 注解Annotation

Java注解(Annotation)又称为Java标注,是JDK5.0引入的一种注释机制.注解是原数据的一种形式,提供有关于程序但不属于程序本身的数据.注解对他们注解的代码的操作没有直接的影响. 声明方式 注解的声明方式使用interface关键字,举例说明: public interface MyInject{ }元注解 Ta…...

【Leetcode -495.提莫攻击 -496.下一个更大的元素Ⅰ】

Leetcode Leetcode -495.提莫攻击Leetcode - 496.下一个更大的元素Ⅰ Leetcode -495.提莫攻击 题目&#xff1a;在《英雄联盟》的世界中&#xff0c;有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希&#xff08;编者注&#xff1a;寒冰射手&#xff09;进入中毒状态。 …...

肝一肝设计模式【八】-- 外观模式

系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 肝一肝设计模式【三】-- 原型模式 传送门 肝一肝设计模式【四】-- 建造者模式 传送门 肝一肝设计模式【五】-- 适配器模式 传送门 肝一肝设计模式【六】-- 装饰器模式 传送门 肝…...

Maven uber-jar(带依赖的打包插件)maven-shade-plugin

文章目录 最基础的 maven-shade-plugin 使用生成可执行的 Jar 包 和 常用的资源转换类包名重命名打包时排除依赖与其他常用打包插件比较 本文是对 maven-shade-plugin 常用配置的介绍&#xff0c;更详细的学习请参照 Apache Maven Shade Plugin 官方文档 通过使用 maven-shade…...

MySQL基础(二十八)索引优化与查询优化

都有哪些维度可以进行数据库调优?简言之: 索引失效、没有充分利用到索引——索引建立关联查询太多JOIN (设计缺陷或不得已的需求)——SQL优化服务器调优及各个参数设置(缓冲、线程数等)———调整my.cnf。数据过多――分库分表 关于数据库调优的知识点非常分散。不同的DBMS&…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...