1. 首页 > Hadoop教程 > 正文

大数据教程FG096-Hadoop集群自动化运维

本文档风哥主要介绍Hadoop集群自动化运维,包括自动化部署、自动化监控、自动化维护等内容,风哥教程参考Hadoop官方文档和运维最佳实践,适合大数据运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 自动化运维概述

Hadoop集群自动化运维是提升运维效率的重要手段,通过自动化工具减少人工操作。学习交流加群风哥微信: itpux-com

自动化运维核心要素:

  • 自动化部署:自动安装配置集群
  • 自动化监控:自动监控集群状态
  • 自动化维护:自动执行维护任务
  • 自动化告警:自动发送告警通知
# Hadoop自动化运维简介

自动化运维是提升运维效率的关键,
通过工具和脚本减少人工操作。

主要目标:
1. 提升效率
– 减少重复劳动
– 加快部署速度
– 提高工作效率

2. 降低风险
– 减少人为错误
– 标准化操作
– 可追溯可审计

3. 保障稳定
– 及时发现问题
– 快速响应处理
– 保障服务稳定

# 自动化运维架构

┌─────────────────────────────────────────┐
│ 配置管理 │
│ Ansible、Puppet、SaltStack │
├─────────────────────────────────────────┤
│ 监控告警 │
│ Prometheus、Grafana、AlertManager │
├─────────────────────────────────────────┤
│ 日志管理 │
│ ELK Stack、Fluentd │
├─────────────────────────────────────────┤
│ 任务调度 │
│ Cron、Airflow │
├─────────────────────────────────────────┤
│ 脚本工具 │
│ Shell、Python │
└─────────────────────────────────────────┘

# 自动化运维场景

1. 部署场景
– 集群安装
– 服务配置
– 参数优化

2. 监控场景
– 服务监控
– 资源监控
– 性能监控

3. 维护场景
– 日志清理
– 数据备份
– 服务重启

4. 故障处理
– 自动恢复
– 告警通知
– 日志收集

# 自动化运维原则

1. 标准化
统一操作标准和流程

2. 可重复
操作可重复执行

3. 可追溯
操作记录可查询

4. 安全性
操作过程安全可控

5. 可维护
脚本和工具易维护

1.2 自动化工具介绍

自动化工具介绍:

# 配置管理工具

1. Ansible
特点:
– 无Agent架构
– YAML配置
– 模块丰富
– 学习曲线平缓

适用场景:
– 集群部署
– 配置管理
– 应用发布

2. Puppet
特点:
– 声明式语言
– 强大的DSL
– 企业级支持

适用场景:
– 大规模环境
– 复杂配置

3. SaltStack
特点:
– 高性能
– Python编写
– 灵活配置

适用场景:
– 大规模环境
– 实时管理

# 监控工具

1. Prometheus
特点:
– 多维数据模型
– PromQL查询
– 告警功能

适用场景:
– 指标监控
– 告警管理

2. Grafana
特点:
– 丰富图表
– 多数据源
– 告警功能

适用场景:
– 数据可视化
– 仪表盘展示

# 日志工具

1. ELK Stack
组件:
– Elasticsearch: 存储
– Logstash: 收集
– Kibana: 展示

适用场景:
– 日志收集
– 日志分析

# 调度工具

1. Cron
特点:
– 系统内置
– 简单易用

适用场景:
– 定时任务
– 周期执行

2. Airflow
特点:
– DAG工作流
– Python定义
– Web界面

适用场景:
– 复杂工作流
– 数据管道

# 工具对比

工具 用途 优点 缺点
Ansible 配置管理 简单易用 大规模性能差
Puppet 配置管理 功能强大 学习曲线陡
Prometheus 监控 功能全面 存储有限
ELK 日志 生态完善 资源消耗大

1.3 自动化场景介绍

自动化场景介绍:

# 部署自动化场景

1. 集群安装
任务:
– 操作系统配置
– JDK安装
– Hadoop安装
– 服务配置
– 服务启动

2. 服务扩容
任务:
– 新节点配置
– 服务部署
– 集群加入
– 数据均衡

3. 版本升级
任务:
– 备份数据
– 停止服务
– 升级软件
– 启动服务
– 验证功能

# 监控自动化场景

1. 服务监控
任务:
– 进程监控
– 端口监控
– 接口监控

2. 资源监控
任务:
– CPU监控
– 内存监控
– 磁盘监控
– 网络监控

3. 性能监控
任务:
– 响应时间
– 吞吐量
– 错误率

# 维护自动化场景

1. 日志清理
任务:
– 定期清理
– 日志归档
– 空间释放

2. 数据备份
任务:
– 定期备份
– 备份验证
– 备份清理

3. 服务巡检
任务:
– 健康检查
– 状态报告
– 问题预警

# 故障处理自动化场景

1. 自动恢复
任务:
– 服务重启
– 故障转移
– 资源调整

2. 告警通知
任务:
– 邮件通知
– 钉钉通知
– 短信通知

3. 日志收集
任务:
– 日志打包
– 日志上传
– 日志分析

风哥提示:自动化运维是提升运维效率的重要手段。建议根据实际需求选择合适的工具,逐步实现运维自动化。

Part02-生产环境规划与建议

2.1 环境规划建议

环境规划建议:

# 自动化工具规划

工具 配置 数量
Ansible控制节点 4C/8G/100G 1
Prometheus 8C/16G/500G 2
Grafana 4C/8G/100G 1
ELK Stack 16C/32G/2T 3

# 目录规划

目录 用途
/bigdata/scripts 运维脚本
/bigdata/ansible Ansible Playbook
/bigdata/configs 配置文件
/bigdata/logs/automation 自动化日志

# 用户规划

用户 权限 用途
ansible sudo 自动化部署
monitor 只读 监控查询
backup 读写 数据备份

# 网络规划

端口 用途
22 SSH (Ansible)
9090 Prometheus
3000 Grafana
9200 Elasticsearch
5601 Kibana

2.2 脚本规划建议

脚本规划建议:

# 脚本分类

1. 部署脚本
脚本名 功能
install_hadoop.sh 安装Hadoop
config_hadoop.sh 配置Hadoop
start_hadoop.sh 启动Hadoop

2. 监控脚本
脚本名 功能
check_service.sh 检查服务状态
check_resource.sh 检查资源使用
check_health.sh 健康检查

3. 维护脚本
脚本名 功能
clean_logs.sh 清理日志
backup_data.sh 备份数据
balance_data.sh 数据均衡

# 脚本规范

1. 命名规范
格式: [动作]_[对象].sh
示例: start_hadoop.sh

2. 注释规范
#!/bin/bash
# script_name.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 功能描述

3. 日志规范
LOG_FILE=”/bigdata/logs/automation/${SCRIPT_NAME}.log”
log_info() { echo “[$(date)] INFO: $1” | tee -a $LOG_FILE; }
log_error() { echo “[$(date)] ERROR: $1” | tee -a $LOG_FILE; }

4. 错误处理
set -e
trap ‘error_exit “命令执行失败: $LINENO”‘ ERR

# 版本控制

使用Git管理脚本:
$ git init
$ git add scripts/
$ git commit -m “初始化运维脚本”

2.3 调度规划建议

调度规划建议:

# 定时任务规划

任务 频率 时间
日常巡检 每日 09:00
日志清理 每日 03:00
数据备份 每日 02:00
健康检查 每小时 整点
容量分析 每周 周一09:00

# Cron配置示例

# 日常巡检
0 9 * * * /bigdata/scripts/check/daily_check.sh

# 日志清理
0 3 * * * /bigdata/scripts/maintenance/clean_logs.sh

# 数据备份
0 2 * * * /bigdata/scripts/backup/backup_data.sh

# 健康检查
0 * * * * /bigdata/scripts/check/health_check.sh

# 容量分析
0 9 * * 1 /bigdata/scripts/analysis/capacity_analysis.sh

生产环境建议:生产环境建议建立完善的自动化运维体系,使用版本控制管理脚本,配置定时任务自动执行。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 自动化部署实战

# 1. 安装Ansible
$ yum install -y ansible

# 2. 配置主机清单
$ cat > /etc/ansible/hosts << 'EOF' [master] fgedu-node1 fgedu-node2 [worker] fgedu-node3 fgedu-node4 fgedu-node5 [hadoop:children] master worker EOF # 3. 配置SSH免密 $ ssh-keygen -t rsa $ ssh-copy-id fgedu-node1 $ ssh-copy-id fgedu-node2 $ ssh-copy-id fgedu-node3 # 4. 创建部署Playbook $ cat > /bigdata/ansible/deploy_hadoop.yml << 'EOF' --- - name: Deploy Hadoop Cluster hosts: hadoop become: yes vars: hadoop_version: "3.3.6" hadoop_home: "/bigdata/app/hadoop" java_home: "/bigdata/app/java" tasks: - name: 创建目录 file: path: "{{ item }}" state: directory mode: '0755' loop: - /bigdata/app - /bigdata/fgdata - /bigdata/logs - name: 安装JDK yum: name: java-1.8.0-openjdk-devel state: present - name: 解压Hadoop unarchive: src: /tmp/hadoop-{{ hadoop_version }}.tar.gz dest: /bigdata/app remote_src: no - name: 创建软链接 file: src: /bigdata/app/hadoop-{{ hadoop_version }} dest: "{{ hadoop_home }}" state: link - name: 配置环境变量 lineinfile: path: /etc/profile line: "{{ item }}" loop: - "export HADOOP_HOME={{ hadoop_home }}" - "export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin" - name: 分发配置文件 copy: src: configs/ dest: "{{ hadoop_home }}/etc/hadoop/" - name: 启动服务(Master) shell: | {{ hadoop_home }}/bin/hdfs namenode -format {{ hadoop_home }}/sbin/start-dfs.sh {{ hadoop_home }}/sbin/start-yarn.sh when: inventory_hostname in groups['master'] run_once: true handlers: - name: restart hadoop shell: | {{ hadoop_home }}/sbin/stop-all.sh {{ hadoop_home }}/sbin/start-all.sh EOF # 5. 执行部署 $ ansible-playbook -i /etc/ansible/hosts deploy_hadoop.yml PLAY [Deploy Hadoop Cluster] **************************************** TASK [Gathering Facts] ********************************************** ok: [fgedu-node1] ok: [fgedu-node2] ok: [fgedu-node3] TASK [创建目录] ***************************************************** changed: [fgedu-node1] => (item=/bigdata/app)
changed: [fgedu-node1] => (item=/bigdata/fgdata)
changed: [fgedu-node1] => (item=/bigdata/logs)

PLAY RECAP **********************************************************
fgedu-node1 : ok=10 changed=8 unreachable=0 failed=0
fgedu-node2 : ok=8 changed=6 unreachable=0 failed=0
fgedu-node3 : ok=8 changed=6 unreachable=0 failed=0

# 6. 验证部署
$ ansible hadoop -m shell -a “jps | grep -E ‘NameNode|DataNode|ResourceManager|NodeManager'”

fgedu-node1 | CHANGED | rc=0 >>
12345 NameNode
12346 ResourceManager

fgedu-node2 | CHANGED | rc=0 >>
12345 NameNode
12346 ResourceManager

fgedu-node3 | CHANGED | rc=0 >>
12345 DataNode
12346 NodeManager

3.2 自动化监控实战

# 1. 监控脚本
$ cat > /bigdata/scripts/monitor/cluster_monitor.sh << 'EOF' #!/bin/bash # cluster_monitor.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn LOG_FILE="/bigdata/logs/automation/cluster_monitor.log" ALERT_EMAIL="admin@fgedu.com" log_info() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] INFO: $1" | tee -a $LOG_FILE; } log_error() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $1" | tee -a $LOG_FILE; } send_alert() { echo "$1" | mail -s "Hadoop集群告警" $ALERT_EMAIL } # 检查NameNode check_namenode() { NN_COUNT=$(jps | grep NameNode | wc -l) if [ "$NN_COUNT" -eq 0 ]; then log_error "NameNode未运行" send_alert "NameNode未运行,请立即处理" return 1 fi log_info "NameNode运行正常" } # 检查ResourceManager check_resourcemanager() { RM_COUNT=$(jps | grep ResourceManager | wc -l) if [ "$RM_COUNT" -eq 0 ]; then log_error "ResourceManager未运行" send_alert "ResourceManager未运行,请立即处理" return 1 fi log_info "ResourceManager运行正常" } # 检查DataNode check_datanode() { DEAD_DN=$(hdfs dfsadmin -report | grep "Dead datanodes" | awk -F'[(|)]' '{print $2}') if [ "$DEAD_DN" -gt 0 ]; then log_error "存在死亡DataNode: $DEAD_DN个" send_alert "存在死亡DataNode: $DEAD_DN个" return 1 fi log_info "DataNode全部正常" } # 检查HDFS健康 check_hdfs_health() { MISSING_BLOCKS=$(hdfs fsck / 2>&1 | grep “MISSING” | awk ‘{print $1}’)
if [ “$MISSING_BLOCKS” -gt 0 ]; then
log_error “存在丢失块: $MISSING_BLOCKS个”
send_alert “存在丢失块: $MISSING_BLOCKS个”
return 1
fi
log_info “HDFS健康状态正常”
}

# 检查磁盘空间
check_disk_space() {
USED_PERCENT=$(df -h / | awk ‘NR==2 {print $5}’ | cut -d’%’ -f1)
if [ “$USED_PERCENT” -gt 85 ]; then
log_error “磁盘使用率过高: ${USED_PERCENT}%”
send_alert “磁盘使用率过高: ${USED_PERCENT}%”
return 1
fi
log_info “磁盘使用率正常: ${USED_PERCENT}%”
}

# 主函数
main() {
log_info “========== 开始集群监控 ==========”
check_namenode
check_resourcemanager
check_datanode
check_hdfs_health
check_disk_space
log_info “========== 集群监控完成 ==========”
}

main
EOF

$ chmod +x /bigdata/scripts/monitor/cluster_monitor.sh

# 2. 配置定时任务
$ crontab -e
*/5 * * * * /bigdata/scripts/monitor/cluster_monitor.sh

# 3. 执行监控
$ /bigdata/scripts/monitor/cluster_monitor.sh

[2026-04-08 10:00:00] INFO: ========== 开始集群监控 ==========
[2026-04-08 10:00:01] INFO: NameNode运行正常
[2026-04-08 10:00:02] INFO: ResourceManager运行正常
[2026-04-08 10:00:03] INFO: DataNode全部正常
[2026-04-08 10:00:04] INFO: HDFS健康状态正常
[2026-04-08 10:00:05] INFO: 磁盘使用率正常: 45%
[2026-04-08 10:00:05] INFO: ========== 集群监控完成 ==========

3.3 自动化维护实战

# 1. 日志清理脚本
$ cat > /bigdata/scripts/maintenance/clean_logs.sh << 'EOF' #!/bin/bash # clean_logs.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn LOG_DIR="/bigdata/app/hadoop/logs" RETENTION_DAYS=30 LOG_FILE="/bigdata/logs/automation/clean_logs.log" log_info() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] INFO: $1" >> $LOG_FILE; }

log_info “开始清理日志文件…”

# 清理过期日志
find $LOG_DIR -name “*.log.*” -mtime +$RETENTION_DAYS -exec rm -f {} \;
log_info “已清理${RETENTION_DAYS}天前的日志文件”

# 压缩旧日志
find $LOG_DIR -name “*.log” -mtime +7 -exec gzip {} \;
log_info “已压缩7天前的日志文件”

# 统计空间
BEFORE_SIZE=$(du -sh $LOG_DIR | awk ‘{print $1}’)
log_info “清理后日志目录大小: $BEFORE_SIZE”

log_info “日志清理完成”
EOF

$ chmod +x /bigdata/scripts/maintenance/clean_logs.sh

# 2. 数据备份脚本
$ cat > /bigdata/scripts/backup/backup_metadata.sh << 'EOF' #!/bin/bash # backup_metadata.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn BACKUP_DIR="/backup/hadoop/metadata" DATE=$(date +%Y%m%d) LOG_FILE="/bigdata/logs/automation/backup_metadata.log" log_info() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] INFO: $1" >> $LOG_FILE; }

log_info “开始备份HDFS元数据…”

# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE

# 备份NameNode元数据
hdfs dfsadmin -fetchImage $BACKUP_DIR/$DATE/fsimage_$(date +%Y%m%d%H%M%S)
log_info “已备份fsimage”

# 备份配置文件
tar -czf $BACKUP_DIR/$DATE/hadoop_configs_$DATE.tar.gz /bigdata/app/hadoop/etc/hadoop
log_info “已备份配置文件”

# 清理旧备份
find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} \;
log_info “已清理30天前的备份”

log_info “元数据备份完成”
EOF

$ chmod +x /bigdata/scripts/backup/backup_metadata.sh

# 3. 数据均衡脚本
$ cat > /bigdata/scripts/maintenance/balance_data.sh << 'EOF' #!/bin/bash # balance_data.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn THRESHOLD=5 LOG_FILE="/bigdata/logs/automation/balance_data.log" log_info() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] INFO: $1" >> $LOG_FILE; }

log_info “开始数据均衡…”

# 执行均衡
hdfs balancer -threshold $THRESHOLD >> $LOG_FILE 2>&1

log_info “数据均衡完成”
EOF

$ chmod +x /bigdata/scripts/maintenance/balance_data.sh

# 4. 配置定时任务
$ cat >> /etc/crontab << 'EOF' # Hadoop自动化维护任务 0 3 * * * root /bigdata/scripts/maintenance/clean_logs.sh 0 2 * * * root /bigdata/scripts/backup/backup_metadata.sh 0 4 * * 0 root /bigdata/scripts/maintenance/balance_data.sh EOF

风哥提示:自动化运维需要循序渐进,先从简单的脚本开始,逐步完善自动化体系。建议使用版本控制管理脚本,定期审查和优化。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 批量部署案例

# 案例:批量部署10个DataNode节点

# 1. 准备工作
# 配置主机清单
$ cat > /etc/ansible/hosts << 'EOF' [new_datanodes] fgedu-node11 fgedu-node12 fgedu-node13 fgedu-node14 fgedu-node15 fgedu-node16 fgedu-node17 fgedu-node18 fgedu-node19 fgedu-node20 EOF # 2. 创建部署Playbook $ cat > /bigdata/ansible/add_datanodes.yml << 'EOF' --- - name: Add DataNodes hosts: new_datanodes become: yes tasks: - name: 配置系统参数 sysctl: name: "{{ item.name }}" value: "{{ item.value }}" state: present loop: - { name: 'vm.swappiness', value: '10' } - { name: 'net.core.somaxconn', value: '32768' } - name: 关闭防火墙 systemd: name: firewalld state: stopped enabled: no - name: 安装依赖 yum: name: "{{ item }}" state: present loop: - java-1.8.0-openjdk-devel - ntp - name: 创建用户 user: name: hadoop system: yes - name: 分发Hadoop synchronize: src: /bigdata/app/hadoop dest: /bigdata/app/ - name: 创建数据目录 file: path: /bigdata/fgdata/dn state: directory owner: hadoop group: hadoop mode: '0755' - name: 启动DataNode shell: /bigdata/app/hadoop/bin/hdfs --daemon start datanode - name: 启动NodeManager shell: /bigdata/app/hadoop/bin/yarn --daemon start nodemanager EOF # 3. 执行部署 $ ansible-playbook add_datanodes.yml PLAY [Add DataNodes] ************************************************ TASK [Gathering Facts] ********************************************** ok: [fgedu-node11] ok: [fgedu-node12] ... PLAY RECAP ********************************************************** fgedu-node11 : ok=8 changed=6 unreachable=0 failed=0 fgedu-node12 : ok=8 changed=6 unreachable=0 failed=0 ... # 4. 验证 $ hdfs dfsadmin -report | grep "Live datanodes" Live datanodes (20): # 5. 数据均衡 $ hdfs balancer -threshold 5

4.2 自动监控案例

# 案例:自动化监控告警系统

# 1. 监控脚本
$ cat > /bigdata/scripts/monitor/auto_monitor.sh << 'EOF' #!/bin/bash # auto_monitor.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn PROMETHEUS_URL="http://localhost:9090" ALERT_WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=xxx" # 查询指标 query_metric() { local query=$1 curl -s "${PROMETHEUS_URL}/api/v1/query?query=${query}" | jq -r '.data.result[0].value[1]' } # 发送钉钉告警 send_dingtalk() { local message=$1 curl -s -X POST $ALERT_WEBHOOK \ -H 'Content-Type: application/json' \ -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"${message}\"}}" } # 检查CPU使用率 check_cpu() { CPU_USAGE=$(query_metric "100 - (avg by(instance) (irate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)") if (( $(echo "$CPU_USAGE > 80″ | bc -l) )); then
send_dingtalk “告警: CPU使用率过高 ${CPU_USAGE}%”
fi
}

# 检查内存使用率
check_memory() {
MEM_USAGE=$(query_metric “(1 – (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100”)
if (( $(echo “$MEM_USAGE > 85” | bc -l) )); then
send_dingtalk “告警: 内存使用率过高 ${MEM_USAGE}%”
fi
}

# 检查HDFS使用率
check_hdfs() {
HDFS_USAGE=$(query_metric “Hadoop_NameNode_CapacityUsed / Hadoop_NameNode_CapacityTotal * 100”)
if (( $(echo “$HDFS_USAGE > 80” | bc -l) )); then
send_dingtalk “告警: HDFS使用率过高 ${HDFS_USAGE}%”
fi
}

# 主函数
main() {
check_cpu
check_memory
check_hdfs
}

main
EOF

$ chmod +x /bigdata/scripts/monitor/auto_monitor.sh

# 2. 配置定时任务
$ crontab -e
*/5 * * * * /bigdata/scripts/monitor/auto_monitor.sh

4.3 常见问题处理

4.3.1 Ansible执行失败

# 问题现象:Ansible执行失败

# 排查步骤
# 1. 检查连通性
$ ansible all -m ping

# 2. 检查权限
$ ansible all -m shell -a “whoami”

# 3. 查看详细输出
$ ansible-playbook -vvv playbook.yml

# 常见原因
– SSH连接失败
– 权限不足
– 模块不存在
– 语法错误

4.3.2 脚本执行异常

# 问题现象:脚本执行异常

# 排查步骤
# 1. 检查脚本权限
$ ls -la script.sh

# 2. 检查脚本语法
$ bash -n script.sh

# 3. 调试执行
$ bash -x script.sh

# 常见原因
– 权限不足
– 语法错误
– 环境变量问题
– 依赖缺失

Part05-风哥经验总结与分享

5.1 自动化运维最佳实践

自动化运维最佳实践建议:

# 自动化运维最佳实践
1. 选择合适的工具
2. 建立标准化流程
3. 使用版本控制
4. 做好测试验证
5. 持续优化改进

5.2 使用建议

使用建议:

自动化运维使用建议:

  • 自动化要循序渐进
  • 脚本要规范编写
  • 测试要充分验证
  • 文档要完善记录

5.3 工具推荐

自动化运维工具推荐:

  • Ansible:配置管理
  • Shell/Python:脚本开发
  • Prometheus:监控告警
  • Git:版本控制
风哥提示:自动化运维是提升运维效率的重要手段。建议从简单场景开始,逐步完善自动化体系,持续优化和改进。from bigdata视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息