linuxone服务器免费使用

https://linuxone.cloud.marist.edu/
注册账号,登录后即可免费使用linuxone服务器(2个月,4G内存,50G硬盘空间,2核,s390x架构)。

创建实例,保存ssh key,远程连接要用这个key,它不会给任何用户的密码,默认用linux1用户登录。

安装 MySQL 8.x(如果要安装mysql8,需要自己编译安装,比较麻烦,可以用docker安装mysql8)

安装 Docker
这是安装docker的文档:
https://docs.docker.com/engine/install/rhel/

每次使用docker的时候都需要使用root用户, 比较麻烦. 可用把普通用户添加到docker组, 避免每次都添加sudo.
sudo usermod -aG docker linux1

退出当前shell, 重新进入shell, 使刚才的配置生效

docker 安装 mysql8
docker pull ibmcom/mysql-s390x:8.0.25

https://hub.docker.com/u/s390x

docker run –name mysql-s390x –restart always -v /path/to/host/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=000000 -d ibmcom/mysql-s390x:8.0.25

docker exec -it mysql-s390x mysql -uroot -p000000

注意:如果您想使用像firewalld这样的防火墙管理工具,您需要删除保存的iptables文件。

防火墙通过 iptables 规则启用。默认情况下,只有 SSH 端口是开放的。如果您需要打开其他端口,请使用 iptables 修改防火墙规则
sudo iptables -I INPUT -p tcp –dport <port#> -j ACCEPT

如果要永久保留更改,请发出以下命令:
sudo bash -c “iptables-save > /etc/sysconfig/iptables.save”

docker exec -it mysql-s390x bash
vim /etc/mysql/mysql.conf.d/mysqld.cnf

apt-get update

apt-get install -y vim

只需确保 bind-address 设置为 0.0.0.0,这样其他机器就可以通过 MySQL 的标准协议(3306端口)进行连接。

docker restart mysql-s390x

确保mysql容器因为某种原因停止运行,可以重启容器:
docker update –restart always mysql-s390x

在 RHEL 8 中,yum 已被 dnf(Dandified Yum)替代,dnf 是新版的包管理工具,提供了与 yum 类似的功能,但性能更好,处理依赖关系更高效。

sudo dnf update -y
sudo dnf install java-17-openjdk -y

sudo dnf install vim -y

为了方便你在终端或脚本中使用 Java,可以设置 JAVA_HOME 环境变量。编辑 /etc/profile 或用户的 ~/.bashrc 文件,并添加以下行:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH

然后使其生效:
source ~/.bashrc
接下来,使用 dnf 包管理工具来安装 Node.js 16:
sudo dnf install -y nodejs

4.4 创建数据库
CREATE DATABASE dga /*!40100 DEFAULT CHARACTER SET utf8mb3 COLLATE utf8mb4_0900_ai_ci */

建表
元数据信息表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
create table  table_meta_info
(
id bigint auto_increment comment '表id'
primary key,
table_name varchar(200) null comment '表名',
schema_name varchar(200) null comment '库名',
col_name_json varchar(2000) null comment '字段名json ( 来源:hive)',
partition_col_name_json varchar(4000) null comment '分区字段名json( 来源:hive)',
table_fs_owner varchar(200) null comment 'hdfs所属人 ( 来源:hive)',
table_parameters_json varchar(2000) null comment '参数信息 ( 来源:hive)',
table_comment varchar(200) null comment '表备注 ( 来源:hive)',
table_fs_path varchar(200) null comment 'hdfs路径 ( 来源:hive)',
table_input_format varchar(200) null comment '输入格式( 来源:hive)',
table_output_format varchar(200) null comment '输出格式 ( 来源:hive)',
table_row_format_serde varchar(200) null comment '行格式 ( 来源:hive)',
table_create_time varchar(200) null comment '表创建时间 ( 来源:hive)',
table_type varchar(200) null comment '表类型 ( 来源:hive)',
table_bucket_cols_json varchar(200) null comment '分桶列 ( 来源:hive)',
table_bucket_num bigint null comment '分桶个数 ( 来源:hive)',
table_sort_cols_json varchar(200) null comment '排序列 ( 来源:hive)',
table_size bigint null comment '数据量大小 ( 来源:hdfs)',
table_total_size bigint null comment '所有副本数据总量大小 ( 来源:hdfs)',
table_last_modify_time datetime null comment '最后修改时间 ( 来源:hdfs)',
table_last_access_time datetime null comment '最后访问时间 ( 来源:hdfs)',
fs_capcity_size bigint null comment '当前文件系统容量 ( 来源:hdfs)',
fs_used_size bigint null comment '当前文件系统使用量 ( 来源:hdfs)',
fs_remain_size bigint null comment '当前文件系统剩余量 ( 来源:hdfs)',
assess_date varchar(10) null comment '考评日期 ',
create_time datetime null comment '创建时间 (自动生成)',
update_time datetime null comment '更新时间 (自动生成)',
constraint table_meta_info_pk
unique (table_name, schema_name, assess_date)
)
comment '元数据表';

元数据表附加信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
create table if not exists table_meta_info_extra
(
id bigint auto_increment comment '表id'
primary key,
table_name varchar(200) null comment '表名',
schema_name varchar(200) null comment '库名',
tec_owner_user_name varchar(20) null comment '技术负责人 ',
busi_owner_user_name varchar(20) null comment '业务负责人 ',
lifecycle_type varchar(20) null comment '存储周期类型(FOREVER、NORMAL、UNSET)',
lifecycle_days bigint null comment '生命周期(天) ',
security_level varchar(20) null comment '安全级别 (UNSET、PUBLIC、INSIDE、INSIDE_LIMIT、PROTECT)',
dw_level varchar(20) null comment '数仓所在层级(ODSDWDDIMDWSADS) ( 来源: 附加)',
create_time datetime null comment '创建时间 (自动生成)',
update_time datetime null comment '更新时间 (自动生成)',
constraint table_meta_info_extra_pk
unique (table_name, schema_name)
)
comment '元数据表附加信息';

考评指标参数表

1
2
3
4
5
6
7
8
9
10
11
12
13
create table governance_metric
(
id bigint auto_increment comment 'id'
primary key,
metric_name varchar(200) null comment '指标名称',
metric_code varchar(200) null comment '指标编码',
metric_desc varchar(2000) null comment '指标描述',
governance_type varchar(20) null comment '治理类型',
metric_params_json varchar(2000) null comment '指标参数',
governance_url varchar(500) null comment '治理连接',
is_disabled varchar(1) null comment '是否启用'
)
comment '考评指标参数表';
板块 权重
规范 15
存储 30
计算 30
质量 15
安全 10

考评指标权重表

1
2
3
4
5
6
7
CREATE TABLE `governance_type` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
`type_code` varchar(200) DEFAULT NULL COMMENT '治理项类型编码',
`type_desc` varchar(2000) DEFAULT NULL COMMENT '治理项类型描述',
`type_weight` decimal(10,2) DEFAULT NULL COMMENT '治理类型权重',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 COMMENT='治理考评类别权重表';

插入指标

1
2
3
4
5
6
INSERT INTO governance_type (id, type_code, type_desc, type_weight) VALUES
(1, 'SPEC', '规范', 20.00),
(2, 'STORAGE', '存储', 30.00),
(3, 'CALC', '计算', 30.00),
(4, 'QUALITY', '质量', 15.00),
(5, 'SECURITY', '安全', 15.00);

考评指标明细表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE `governance_assess_detail` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
`assess_date` varchar(20) DEFAULT NULL COMMENT '考评日期',
`table_name` varchar(200) DEFAULT NULL COMMENT '表名',
`schema_name` varchar(200) DEFAULT NULL COMMENT '库名',
`metric_id` varchar(200) DEFAULT NULL COMMENT '指标项id',
`metric_name` varchar(200) DEFAULT NULL COMMENT '指标项名称',
`governance_type` varchar(200) DEFAULT NULL COMMENT '治理类型',
`tec_owner` varchar(200) DEFAULT NULL COMMENT '技术负责人',
`assess_score` decimal(10,2) DEFAULT NULL COMMENT '考评得分',
`assess_problem` varchar(2000) DEFAULT NULL COMMENT '考评问题项',
`assess_comment` varchar(2000) DEFAULT NULL COMMENT '考评备注',
`is_assess_exception` varchar(1) DEFAULT '0' COMMENT '考评是否异常',
`assess_exception_msg` varchar(2000) DEFAULT NULL COMMENT '异常信息',
`governance_url` varchar(2000) DEFAULT NULL COMMENT '治理处理路径',
`create_time` datetime DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='治理考评结果明细';

插入指标

1
INSERT INTO `governance_metric` VALUES (1,'是否有技术Owner','TEC_OWNER','辅助信息是否填写技术Owner 有 则10分 , 无则0分','SPEC','','/table_meta/table_meta/detail?tableId=','0'),(2,'是否有业务Owner','BUSI_OWNER','辅助信息是否填写业务Owner 有 则10分 , 无则0分','SPEC',NULL,'/table_meta/table_meta/detail?tableId=','0'),(3,'表名合规','TABLE_NAME_STANDARD','参考建数仓表规范\nODS层 :开头:ods  结尾 :inc/full  \n结构ods_xx_( inc|full)\nDIM层 :  dim开头     full/zip 结尾 \n结构: ods_xx_( inc|full)\nDWD层:  dwd 开头  inc/full 结尾  \n结构: dwd_xx_xx_(inc|full)\nDWS层: dws开头  \n结构dws_xx_xx_xx_ (1d/nd/td) \nADS层: ads 开头\n结构 ads_xxx\n符合则 10分,否则0分\n','SPEC',NULL,'/table_meta/table_meta/detail?tableId=','0'),(4,'是否纳入分层','TABLE_DW_LEVEL','设定分层则10分,OTHER则0分','SPEC',NULL,'/table_meta/table_meta/detail?tableId=','0'),(5,'表有备注','TABLE_COMMENT','有 则10分 , 无则0分','SPEC',NULL,'/table_meta/table_meta/detail?tableId=','0'),(6,'字段有备注信息','FIELD_COMMENT','有备注字段/所有字段 *10分','SPEC',NULL,'/table_meta/table_meta/detail?tableId=','0'),(7,'生命周期合理','LIFECYCLE','未设定周期类型的 给 0分\n周期类型为永久 则给10分\n周期类型为普通 :\n无分区信息的给0分\n            没设生命周期给0分\n周期长度超过建议周期天数{days}给50分\n','STORAGE','{\"days\":60}','/table_meta/table_meta/detail?tableId=','0'),(8,'是否空表','TABLE_EMPTY','空表则0分 ,有数据则10分','STORAGE',NULL,NULL,'0'),(9,'存在相似表','TABLE_SIMILAR','两个表字段重复超过{percent}%,则给0分,其余给10分','STORAGE','{\"percent\":70}',NULL,'0'),(10,'长期无产出','NO_PRODUCE','一张表{days}天内没有产出数据  则给0分,其余给10','CALC','{\"days\":7}',NULL,'0'),(11,'长期无访问','NO_ACCESS','一张表{days}天内没有访问 则给0分 , 其余给10','CALC','{\"days\":7}',NULL,'0'),(12,'计算中有报错','TASK_FAILED','检查DS 有报错 则给0分,其余给10分','CALC',NULL,NULL,'0'),(13,'简单加工','SIMPLE_PROCESS','sql语句没有任何join\\groupby\\ 非分区字段的where过滤   ,以上情况给0分,其余给10分	任务信息','CALC',NULL,NULL,'0'),(14,'表产出时效监控','TIME_LINESS','前一天产出时效,超过前{days}天产出时效平均值{percent}%\n则给0分,其余10分\n','QUALITY','{\"days\":7,\"percent\":70}',NULL,'0'),(15,'表产出数据量监控','PRODUCE_DATA_SIZE','必须日分区表\n前一天产出的数据量,超过前{days}天平均产出量{upper_limit}% ,或低于{lower_limit}%  ,则给0分,其余10分\n','QUALITY','{\"days\":7,\"{upper_limit}\":70,\"{lower_limit}\":50}',NULL,'0'),(16,'未明确安全等级','SECURITY_LEVEL','未设置 0分  其余10分','SECURITY',NULL,'/table_meta/table_meta/detail?tableId=','0'),(17,'目录文件数据访问权限超过建议值','FILE_ACCESS_PERMISSION','检查该表最高权限的目录或者文件,如果超过文件超过{file_permission}或者目录超过{dir_permission}则给0分 其余给10分','SECURITY','{\"dir_permission\":\"755\",\"file_permission\":\"644\"}',NULL,'0');

12,13,14至1
TABLE_DW_LEVEL
PRODUCE_DATA_SIZE

11.1.1 各表的考评结果表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
create table if not exists governance_assess_table
(
id bigint auto_increment comment 'id'
primary key,
assess_date varchar(10) null comment '考评日期',
table_name varchar(200) null comment '表名',
schema_name varchar(200) null comment '库名',
tec_owner varchar(200) null comment '技术负责人',
score_spec_avg decimal(10, 2) null comment '规范分数',
score_storage_avg decimal(10, 2) null comment '存储分数',
score_calc_avg decimal(10, 2) null comment '计算分数',
score_quality_avg decimal(10, 2) null comment '质量分数',
score_security_avg decimal(10, 2) null comment '安全分数',
score_on_type_weight decimal(10, 2) null comment '五维权重后分数',
problem_num bigint null comment '问题项个数',
create_time datetime null comment '创建日期'
)
comment '表治理考评情况';

11.2.1 各个技术负责人的考评结果表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create table if not exists governance_assess_tec_owner
(
id bigint auto_increment comment 'id'
primary key,
assess_date varchar(10) null comment '考评日期',
tec_owner varchar(200) null comment '技术负责人',
score_spec decimal(10, 2) null comment '规范分数',
score_storage decimal(10, 2) null comment '存储分数',
score_calc decimal(10, 2) null comment '计算分数',
score_quality decimal(10, 2) null comment '质量分数',
score_security decimal(10, 2) null comment '安全分数',
score decimal(10, 2) null comment '分数',
table_num bigint null comment '涉及表',
problem_num bigint null comment '问题项个数',
create_time datetime null comment '创建时间'
)
comment '技术负责人治理考评表';

11.3.1 各个全局的考评结果表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
create table if not exists governance_assess_global
(
id bigint auto_increment comment 'id'
primary key,
assess_date varchar(10) null comment '考评日期',
score_spec decimal(10, 2) null comment '规范分数',
score_storage decimal(10, 2) null comment '存储分数',
score_calc decimal(10, 2) null comment '计算分数',
score_quality decimal(10, 2) null comment '质量分数',
score_security decimal(10, 2) null comment '安全分数',
score decimal(10, 2) null comment '分数',
table_num bigint null comment '涉及表',
problem_num bigint null comment '问题项个数',
create_time datetime null comment '创建时间'
)
comment '治理总考评表';

sudo dnf install -y make gcc-c++ python3

sudo dnf install tmux

启动一个新的 tmux 会话
tmux new -s my_session

1
2
3
4
5
6
7
8
9
#!/bin/bash

tmux new-session -d -s mysession

tmux send-keys -t mysession "java -jar /home/linux1/data/dga_1219-0.0.1-SNAPSHOT.jar" C-m
tmux new-window -t mysession
tmux send-keys -t mysession:1 "java -jar /home/linux1/data/yuntai-backend-1.0-SNAPSHOT.jar" C-m
tmux new-window -t mysession
tmux send-keys -t mysession:2 "cd /home/linux1/data/yuntai-frontend && npm install && npm run dev" C-m

chmod +x start.sh

进入 tmux 会话
tmux attach -t mysession
列出所有窗口:Ctrl + B,然后按 W
切换到下一个窗口:Ctrl + B,然后按 N
切换到上一个窗口:Ctrl + B,然后按 P
直接跳转到窗口 0 / 1 / 2:Ctrl + B,然后按 0 或 1 或
如果你想退出 tmux 但保持进程运行:
Ctrl + B,然后按 D

杀死 tmux 会话(停止所有进程):
tmux kill-session -t mysession

[up主专用,视频内嵌代码贴在这]