本文为官网的fate1.4.1版本三台机器更改而来,只适合于1.4版本。

Fate Cluster step by step部署指南

1.服务器配置

服务器
数量 2
配置 8 core /16GB memory / 500GB硬盘/10M带宽
操作系统 CentOS linux 7.2及以上/Ubuntu 16.04 以上
依赖包 (参见4.5 软件环境初始化)
用户 用户:app,属主:app(app用户需可以sudo su root而无需密码)
文件系统 1. 500G硬盘挂载在/ data目录下; 2.创建/ data / projects目录,目录属主为:app:app

2.集群规划

party partyid 主机名 IP地址 操作系统 安装软件 服务
PartyA 10000 VM_0_1_centos 192.168.0.1 CentOS 7.2/Ubuntu 16.04 fate,eggroll,mysql fate_flow,fateboard,clustermanager,nodemanger,mysql
PartyA 10000 VM_0_2_centos 192.168.0.1 CentOS 7.2/Ubuntu 16.04 fate,eggroll nodemanger,rollsite
PartyB 9999 VM_0_3_centos 192.168.0.2 CentOS 7.2/Ubuntu 16.04 fate,eggroll,mysql all

架构图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.组件说明

软件产品 组件 端口 说明
fate fate_flow 9360;9380 联合学习任务流水线管理模块,每个party只能有一个此服务
fate fateboard 8080 联合学习过程可视化模块,每个party只能有一个此服务
eggroll clustermanager 4670 cluster manager管理集群,每个party只能有一个此服务
eggroll nodemanger 4671 node manager管理每台机器资源,每个party可有多个此服务,但一台服务器置只能有一个
eggroll rollsite 9370 跨站点或者说跨party通讯组件,相当于proxy+federation,每个party只能有一个此服务
mysql mysql 3306 数据存储,clustermanager和fateflow依赖,每个party只需要一个此服务

4.基础环境配置

4.1 hostname配置(可选)

1)修改主机名

在192.168.0.1 root用户下执行:

hostnamectl set-hostname VM_0_1_centos

在192.168.0.1 root用户下执行:

hostnamectl set-hostname VM_0_2_centos

在192.168.0.2 root用户下执行:

hostnamectl set-hostname VM_0_3_centos

2)加入主机映射

在目标服务器(192.168.0.1 192.168.0.1 192.168.0.2)root用户下执行:

vim /etc/hosts

192.168.0.1 VM_0_1_centos

192.168.0.1 VM_0_2_centos

192.168.0.2 VM_0_3_centos

4.2 关闭selinux(可选)

在目标服务器(192.168.0.1 192.168.0.1 192.168.0.2)root用户下执行:

确认是否已安装selinux

centos系统执行:rpm -qa | grep selinux

ubuntu系统执行:apt list --installed | grep selinux

如果已安装了selinux就执行:setenforce 0

4.3 修改Linux系统参数

在目标服务器(192.168.0.1 192.168.0.1 192.168.0.2)root用户下执行:

1)vim /etc/security/limits.conf

* soft nofile 65536

* hard nofile 65536

2)vim /etc/security/limits.d/20-nproc.conf

* soft nproc unlimited

4.4 关闭防火墙(可选)

在目标服务器(192.168.0.1 192.168.0.1 192.168.0.2)root用户下执行

如果是Centos系统:

systemctl disable firewalld.service

systemctl stop firewalld.service

systemctl status firewalld.service

如果是Ubuntu系统:

ufw disable

ufw status

4.5 软件环境初始化

在目标服务器(192.168.0.1 192.168.0.1 192.168.0.2)root用户下执行

1)创建用户

groupadd -g 6000 apps
useradd -s /bin/bash -g apps -d /home/app app
passwd app

2)创建目录

mkdir -p /data/projects/fate
mkdir -p /data/projects/install
chown -R app:app /data/projects

3)安装依赖

#centos
yum -y install gcc gcc-c++ make openssl-devel gmp-devel mpfr-devel libmpc-devel libaio numactl autoconf automake libtool libffi-devel snappy snappy-devel zlib zlib-devel bzip2 bzip2-devel lz4-devel libasan lsof sysstat telnet psmisc
#ubuntu
apt-get install -y gcc g++ make openssl supervisor libgmp-dev  libmpfr-dev libmpc-dev libaio1 libaio-dev numactl autoconf automake libtool libffi-dev libssl1.0.0 libssl-dev liblz4-1 liblz4-dev liblz4-1-dbg liblz4-tool  zlib1g zlib1g-dbg zlib1g-dev
cd /usr/lib/x86_64-linux-gnu
if [ ! -f "libssl.so.10" ];thenln -s libssl.so.1.0.0 libssl.so.10ln -s libcrypto.so.1.0.0 libcrypto.so.10
fi

4.6 增加虚拟内存

在目标服务器(192.168.0.1 192.168.0.1 192.168.0.2)root用户下执行

生产环境使用时,因内存计算需要增加128G虚拟内存,参考:

cd /data
dd if=/dev/zero of=/data/swapfile128G bs=1024 count=134217728
mkswap /data/swapfile128G
swapon /data/swapfile128G
cat /proc/swaps
echo '/data/swapfile128G swap swap defaults 0 0' >> /etc/fstab 

5.项目部署

注:此指导安装目录默认为/data/projects/install,执行用户为app,安装时根据具体实际情况修改。

5.1 获取安装包

在目标服务器(192.168.0.1 具备外网环境)app用户下执行:

mkdir -p /data/projects/install
cd /data/projects/install
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/python-env-1.4.1-release.tar.gz
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/jdk-8u192-linux-x64.tar.gz
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/mysql-1.4.1-release.tar.gz
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/FATE_install_1.4.1-release.tar.gz#传输到192.168.0.1和192.168.0.2
scp *.tar.gz app@192.168.0.1:/data/projects/install
scp *.tar.gz app@192.168.0.2:/data/projects/install

5.2 操作系统参数检查

在目标服务器(192.168.0.1 192.168.0.1 192.168.0.2)app用户下执行

#虚拟内存,size不低于128G,如不满足需参考4.6章节重新设置
cat /proc/swaps
Filename                                Type            Size    Used    Priority
/data/swapfile128G                      file            134217724       384     -1#文件句柄数,不低于65535,如不满足需参考4.3章节重新设置
ulimit -n
65535#用户进程数,不低于64000,如不满足需参考4.3章节重新设置
ulimit -u
65535

5.3 部署mysql

在目标服务器(192.168.0.1 192.168.0.2)app用户下执行

1)mysql安装:

#建立mysql根目录
mkdir -p /data/projects/fate/common/mysql
mkdir -p /data/projects/fate/data/mysql#解压缩软件包
cd /data/projects/install
tar xzvf mysql-*.tar.gz
cd mysql
tar xf mysql-8.0.13.tar.gz -C /data/projects/fate/common/mysql#配置设置
mkdir -p /data/projects/fate/common/mysql/mysql-8.0.13/{conf,run,logs}
cp service.sh /data/projects/fate/common/mysql/mysql-8.0.13/
cp my.cnf /data/projects/fate/common/mysql/mysql-8.0.13/conf#初始化
cd /data/projects/fate/common/mysql/mysql-8.0.13/
./bin/mysqld --initialize --user=app --basedir=/data/projects/fate/common/mysql/mysql-8.0.13 --datadir=/data/projects/fate/data/mysql > logs/init.log 2>&1
cat logs/init.log |grep root@localhost
#注意输出信息中root@localhost:后的是mysql用户root的初始密码,需要记录,后面修改密码需要用到#启动服务
cd /data/projects/fate/common/mysql/mysql-8.0.13/
nohup ./bin/mysqld_safe --defaults-file=./conf/my.cnf --user=app >>logs/mysqld.log 2>&1 &#修改mysql root用户密码
cd /data/projects/fate/common/mysql/mysql-8.0.13/
./bin/mysqladmin -h 127.0.0.1 -P 3306 -S ./run/mysql.sock -u root -p password "fate_dev"
Enter Password:【输入root初始密码】#验证登陆
cd /data/projects/fate/common/mysql/mysql-8.0.13/
./bin/mysql -u root -p -S ./run/mysql.sock
Enter Password:【输入root修改后密码:fate_dev】

2)建库授权和业务配置

cd /data/projects/fate/common/mysql/mysql-8.0.13/
./bin/mysql -u root -p -S ./run/mysql.sock
Enter Password:【fate_dev】#创建eggroll库表
mysql>source /data/projects/install/mysql/create-eggroll-meta-tables.sql;#创建fate_flow库
mysql>CREATE DATABASE IF NOT EXISTS fate_flow;#创建远程用户和授权
1) 192.168.0.1执行
mysql>CREATE USER 'fate'@'192.168.0.1' IDENTIFIED BY 'fate_dev';
mysql>GRANT ALL ON *.* TO 'fate'@'192.168.0.1';
mysql>flush privileges;2) 192.168.0.2执行
mysql>CREATE USER 'fate'@'192.168.0.2' IDENTIFIED BY 'fate_dev';
mysql>GRANT ALL ON *.* TO 'fate'@'192.168.0.2';
mysql>flush privileges;#insert配置数据
1) 192.168.0.1执行
mysql>INSERT INTO server_node (host, port, node_type, status) values ('192.168.0.1', '4670', 'CLUSTER_MANAGER', 'HEALTHY');
mysql>INSERT INTO server_node (host, port, node_type, status) values ('192.168.0.1', '4671', 'NODE_MANAGER', 'HEALTHY');2) 192.168.0.2执行
mysql>INSERT INTO server_node (host, port, node_type, status) values ('192.168.0.2', '4670', 'CLUSTER_MANAGER', 'HEALTHY');
mysql>INSERT INTO server_node (host, port, node_type, status) values ('192.168.0.2', '4671', 'NODE_MANAGER', 'HEALTHY');#校验
mysql>select User,Host from mysql.user;
mysql>show databases;
mysql>use eggroll_meta;
mysql>show tables;
mysql>select * from server_node;

192.168.0.1结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ccM49jM-1595857806169)(install fate2.assets/image-20200703172457403.png)]

192.168.0.2结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5hSiNHxJ-1595857806170)(install fate2.assets/image-20200703172611788.png)]

5.4 部署jdk

在目标服务器(192.168.0.1 192.168.0.2)app用户下执行:

#创建jdk安装目录
mkdir -p /data/projects/fate/common/jdk
#解压缩
cd /data/projects/install
tar xzf jdk-8u192-linux-x64.tar.gz -C /data/projects/fate/common/jdk
cd /data/projects/fate/common/jdk
mv jdk1.8.0_192 jdk-8u192

5.5 部署python

在目标服务器(192.168.0.1 192.168.0.2)app用户下执行:

#创建python虚拟化安装目录
mkdir -p /data/projects/fate/common/python#安装miniconda3
cd /data/projects/install
tar xvf python-env-*.tar.gz
cd python-env
sh Miniconda3-4.5.4-Linux-x86_64.sh -b -p /data/projects/fate/common/miniconda3#安装virtualenv和创建虚拟化环境
/data/projects/fate/common/miniconda3/bin/pip install virtualenv-20.0.18-py2.py3-none-any.whl -f . --no-index/data/projects/fate/common/miniconda3/bin/virtualenv -p /data/projects/fate/common/miniconda3/bin/python3.6 --no-wheel --no-setuptools --no-download /data/projects/fate/common/python/venv#安装依赖包
tar xvf pip-packages-fate-*.tar.gz
source /data/projects/fate/common/python/venv/bin/activate
pip install setuptools-42.0.2-py2.py3-none-any.whl
pip install -r pip-packages-fate-1.4.1/requirements.txt -f ./pip-packages-fate-1.4.1 --no-index
pip list | wc -l
#结果应为161

5.6 部署eggroll&fate

5.6.1软件部署

#部署软件
#在目标服务器(192.168.0.1 192.168.0.1 192.168.0.2)app用户下执行:
cd /data/projects/install
tar xf FATE_install_*.tar.gz
cd FATE_install_*
tar xvf python.tar.gz -C /data/projects/fate/
tar xvf eggroll.tar.gz -C /data/projects/fate#在目标服务器(192.168.0.1 192.168.0.2)app用户下执行:
tar xvf fateboard.tar.gz -C /data/projects/fate#设置环境变量文件
#在目标服务器(192.168.0.1 192.168.0.1 192.168.0.2)app用户下执行:
cat >/data/projects/fate/init_env.sh <<EOF
export PYTHONPATH=/data/projects/fate/python:/data/projects/fate/eggroll/python
export EGGROLL_HOME=/data/projects/fate/eggroll/
venv=/data/projects/fate/common/python/venv
source \${venv}/bin/activate
export JAVA_HOME=/data/projects/fate/common/jdk/jdk-8u192
export PATH=\$PATH:\$JAVA_HOME/bin
EOF

5.6.2 eggroll系统配置文件修改

此配置文件rollsite,clustermanager,nodemanager共用,每端party多台主机保持一致,需修改内容:

  • 数据库驱动,数据库对应party用的连接IP,端口,用户名和密码,端口一般默认即可。

eggroll.resourcemanager.clustermanager.jdbc.driver.class.name

eggroll.resourcemanager.clustermanager.jdbc.username

eggroll.resourcemanager.clustermanager.jdbc.password

  • 对应party clustermanager的IP、端口,nodemanager端口,进程tag,端口一般默认即可。

eggroll.resourcemanager.clustermanager.host

eggroll.resourcemanager.clustermanager.port

eggroll.resourcemanager.nodemanager.port

eggroll.resourcemanager.process.tag

  • Python虚拟环境路径、业务代码pythonpath、JAVA Home路径修改,如果相关路径无变化,保持默认即可。

eggroll.resourcemanager.bootstrap.egg_pair.venv

eggroll.resourcemanager.bootstrap.egg_pair.pythonpath

eggroll.resourcemanager.bootstrap.roll_pair_master.javahome

  • 对应party rollsite的IP、端口、本party的Party Id修改,rollsite的端口一般默认即可。

eggroll.rollsite.host eggroll.rollsite.port eggroll.rollsite.party.id

以上参数调整可以参考如下例子手工配置,也可以使用以下指令完成:

配置文件:/data/projects/fate/eggroll/conf/eggroll.properties

#在目标服务器(192.168.0.1)app用户下修改执行
cat > /data/projects/fate/eggroll/conf/eggroll.properties <<EOF
[eggroll]
#db connect inf
eggroll.resourcemanager.clustermanager.jdbc.driver.class.name=com.mysql.cj.jdbc.Driver
eggroll.resourcemanager.clustermanager.jdbc.url=jdbc:mysql://192.168.0.1:3306/eggroll_meta?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&allowPublicKeyRetrieval=true
eggroll.resourcemanager.clustermanager.jdbc.username=fate
eggroll.resourcemanager.clustermanager.jdbc.password=fate_dev
eggroll.data.dir=data/
eggroll.logs.dir=logs/
#clustermanager & nodemanager
eggroll.resourcemanager.clustermanager.host=192.168.0.1
eggroll.resourcemanager.clustermanager.port=4670
eggroll.resourcemanager.nodemanager.port=4671
eggroll.resourcemanager.process.tag=fate-host
eggroll.bootstrap.root.script=bin/eggroll_boot.sh
eggroll.resourcemanager.bootstrap.egg_pair.exepath=bin/roll_pair/egg_pair_bootstrap.sh
#python env
eggroll.resourcemanager.bootstrap.egg_pair.venv=/data/projects/fate/common/python/venv
#pythonpath, very import, do not modify.
eggroll.resourcemanager.bootstrap.egg_pair.pythonpath=/data/projects/fate/python:/data/projects/fate/eggroll/python
eggroll.resourcemanager.bootstrap.egg_pair.filepath=python/eggroll/roll_pair/egg_pair.py
eggroll.resourcemanager.bootstrap.roll_pair_master.exepath=bin/roll_pair/roll_pair_master_bootstrap.sh
#javahome
eggroll.resourcemanager.bootstrap.roll_pair_master.javahome=/data/projects/fate/common/jdk/jdk-8u192
eggroll.resourcemanager.bootstrap.roll_pair_master.classpath=conf/:lib/*
eggroll.resourcemanager.bootstrap.roll_pair_master.mainclass=com.webank.eggroll.rollpair.RollPairMasterBootstrap
eggroll.resourcemanager.bootstrap.roll_pair_master.jvm.options=
# for roll site. rename in the next round
eggroll.rollsite.coordinator=webank
eggroll.rollsite.host=192.168.0.1
eggroll.rollsite.port=9370
eggroll.rollsite.party.id=10000
eggroll.rollsite.route.table.path=conf/route_table.jsoneggroll.session.processors.per.node=4
eggroll.session.start.timeout.ms=180000
eggroll.rollsite.adapter.sendbuf.size=1048576
eggroll.rollpair.transferpair.sendbuf.size=4150000
EOF#在目标服务器(192.168.0.2)app用户下修改执行
cat > /data/projects/fate/eggroll/conf/eggroll.properties <<EOF
[eggroll]
#db connect inf
eggroll.resourcemanager.clustermanager.jdbc.driver.class.name=com.mysql.cj.jdbc.Driver
eggroll.resourcemanager.clustermanager.jdbc.url=jdbc:mysql://192.168.0.2:3306/eggroll_meta?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&allowPublicKeyRetrieval=true
eggroll.resourcemanager.clustermanager.jdbc.username=fate
eggroll.resourcemanager.clustermanager.jdbc.password=fate_dev
eggroll.data.dir=data/
eggroll.logs.dir=logs/
#clustermanager & nodemanager
eggroll.resourcemanager.clustermanager.host=192.168.0.2
eggroll.resourcemanager.clustermanager.port=4670
eggroll.resourcemanager.nodemanager.port=4671
eggroll.resourcemanager.process.tag=fate-guest
eggroll.bootstrap.root.script=bin/eggroll_boot.sh
eggroll.resourcemanager.bootstrap.egg_pair.exepath=bin/roll_pair/egg_pair_bootstrap.sh
#python env
eggroll.resourcemanager.bootstrap.egg_pair.venv=/data/projects/fate/common/python/venv
#pythonpath, very import, do not modify.
eggroll.resourcemanager.bootstrap.egg_pair.pythonpath=/data/projects/fate/python:/data/projects/fate/eggroll/python
eggroll.resourcemanager.bootstrap.egg_pair.filepath=python/eggroll/roll_pair/egg_pair.py
eggroll.resourcemanager.bootstrap.roll_pair_master.exepath=bin/roll_pair/roll_pair_master_bootstrap.sh
#javahome
eggroll.resourcemanager.bootstrap.roll_pair_master.javahome=/data/projects/fate/common/jdk/jdk-8u192
eggroll.resourcemanager.bootstrap.roll_pair_master.classpath=conf/:lib/*
eggroll.resourcemanager.bootstrap.roll_pair_master.mainclass=com.webank.eggroll.rollpair.RollPairMasterBootstrap
eggroll.resourcemanager.bootstrap.roll_pair_master.jvm.options=
# for roll site. rename in the next round
eggroll.rollsite.coordinator=webank
eggroll.rollsite.host=192.168.0.2
eggroll.rollsite.port=9370
eggroll.rollsite.party.id=9999
eggroll.rollsite.route.table.path=conf/route_table.jsoneggroll.session.processors.per.node=4
eggroll.session.start.timeout.ms=180000
eggroll.rollsite.adapter.sendbuf.size=1048576
eggroll.rollpair.transferpair.sendbuf.size=4150000
EOF

5.6.3 eggroll路由配置文件修改

此配置文件rollsite使用,配置路由信息,可以参考如下例子手工配置,也可以使用以下指令完成:

配置文件: /data/projects/fate/eggroll/conf/route_table.json

#在目标服务器(192.168.0.1)app用户下修改执行
cat > /data/projects/fate/eggroll/conf/route_table.json << EOF
{"route_table":{"10000":{"default":[{"port": 9370,"ip": "192.168.0.1"}],"fateflow":[{"port": 9360,"ip": "192.168.0.1"}]      },"9999":{"default":[{"port": 9370,"ip": "192.168.0.2"}]}},"permission":{"default_allow": true}
}
EOF#在目标服务器(192.168.0.2)app用户下修改执行
cat > /data/projects/fate/eggroll/conf/route_table.json << EOF
{"route_table":{"9999":{"default":[{"port": 9370,"ip": "192.168.0.2"}],"fateflow":[{"port": 9360,"ip": "192.168.0.2"}]      },"10000":{"default":[{"port": 9370,"ip": "192.168.0.1"}]}},"permission":{"default_allow": true}
}
EOF

5.6.4 fate依赖服务配置文件修改

  • fateflow

fateflow IP ,host:192.168.0.1,guest:192.168.0.2

grpc端口:9360

http端口:9380

  • fateboard

fateboard IP,host:192.168.0.1,guest:192.168.0.2

fateboard端口:8080

  • proxy

proxy IP,host:192.168.0.1,guest:192.168.0.2—rollsite组件对应IP

proxy端口:9370

此文件要按照json格式进行配置,不然会报错,可以参考如下例子手工配置,也可以使用以下指令完成。

配置文件:data/projects/fate/python/arch/conf/server_conf.json

#在目标服务器(192.168.0.1 192.168.0.1)app用户下修改执行
cat > /data/projects/fate/python/arch/conf/server_conf.json << EOF
{"servers": {"fateflow": {"host": "192.168.0.1","grpc.port": 9360,"http.port": 9380},"fateboard": {"host": "192.168.0.1","port": 8080},"proxy": {"host": "192.168.0.1","port": 9370},"servings": ["192.168.0.1:8000"]}
}
EOF#在目标服务器(192.168.0.2)app用户下修改执行
cat > /data/projects/fate/python/arch/conf/server_conf.json << EOF
{"servers": {"fateflow": {"host": "192.168.0.2","grpc.port": 9360,"http.port": 9380},"fateboard": {"host": "192.168.0.2","port": 8080},"proxy": {"host": "192.168.0.2","port": 9370},"servings": ["192.168.0.2:8000"]}
}
EOF

5.6.5 fate数据库信息配置文件修改

  • work_mode(为1表示集群模式,默认)
  • db的连接ip、端口、账号和密码
  • redis IP、端口、密码(redis暂使用不需要配置)

此配置文件格式要按照yaml格式配置,不然解析报错,可以参考如下例子手工配置,也可以使用以下指令完成。

配置文件:/data/projects/fate/python/arch/conf/base_conf.yaml

#在目标服务器(192.168.0.1)app用户下修改执行
cat > /data/projects/fate/python/arch/conf/base_conf.yaml <<EOF
work_mode: 1
fate_flow:host: 0.0.0.0http_port: 9380grpc_port: 9360
database:name: fate_flowuser: fatepasswd: fate_devhost: 192.168.0.1port: 3306max_connections: 100stale_timeout: 30
redis:host: 192.168.0.1port: 6379password: WEBANK_2014_fate_devmax_connections: 500db: 0
default_model_store_address:storage: redishost: 192.168.0.1port: 6379password: fate_devdb: 0
EOF#在目标服务器(192.168.0.2)app用户下修改执行
cat > /data/projects/fate/python/arch/conf/base_conf.yaml <<EOF
work_mode: 1
fate_flow:host: 0.0.0.0http_port: 9380grpc_port: 9360
database:name: fate_flowuser: fatepasswd: fate_devhost: 192.168.0.2port: 3306max_connections: 100stale_timeout: 30
redis:host: 192.168.0.2port: 6379password: WEBANK_2014_fate_devmax_connections: 500db: 0
default_model_store_address:storage: redishost: 192.168.0.2port: 6379password: fate_devdb: 0
EOF

5.6.6 fateboard配置文件修改

1)application.properties

  • 服务端口

server.port—默认

  • fateflow的访问url

fateflow.url,host:http://192.168.0.1:9380,guest:http://192.168.0.2:9380

  • 数据库连接串、账号和密码

fateboard.datasource.jdbc-url,host:mysql://192.168.0.1:3306,guest:mysql://192.168.0.2:3306

fateboard.datasource.username:fate

fateboard.datasource.password:fate_dev

以上参数调整可以参考如下例子手工配置,也可以使用以下指令完成:

配置文件:/data/projects/fate/fateboard/conf/application.properties

#在目标服务器(192.168.0.1)app用户下修改执行
cat > /data/projects/fate/fateboard/conf/application.properties <<EOF
server.port=8080
fateflow.url=http://192.168.0.1:9380
spring.datasource.driver-Class-Name=com.mysql.cj.jdbc.Driver
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8
fateboard.datasource.jdbc-url=jdbc:mysql://192.168.0.1:3306/fate_flow?characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
fateboard.datasource.username=fate
fateboard.datasource.password=fate_dev
server.tomcat.max-threads=1000
server.tomcat.max-connections=20000
EOF#在目标服务器(192.168.0.2)app用户下修改执行
cat > /data/projects/fate/fateboard/conf/application.properties <<EOF
server.port=8080
fateflow.url=http://192.168.0.2:9380
spring.datasource.driver-Class-Name=com.mysql.cj.jdbc.Driver
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8
fateboard.datasource.jdbc-url=jdbc:mysql://192.168.0.2:3306/fate_flow?characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
fateboard.datasource.username=fate
fateboard.datasource.password=fate_dev
server.tomcat.max-threads=1000
server.tomcat.max-connections=20000
EOF

2)service.sh

#在目标服务器(192.168.0.1 192.168.0.2)app用户下修改执行
cd /data/projects/fate/fateboard
vi service.sh
export JAVA_HOME=/data/projects/fate/common/jdk/jdk-8u192

5.7 启动服务

在目标服务器(192.168.0.1)app用户下执行

#启动eggroll服务
source /data/projects/fate/init_env.sh
cd /data/projects/fate/eggroll
sh ./bin/eggroll.sh rollsite start
sh ./bin/eggroll.sh nodemanager start

在目标服务器(192.168.0.1)app用户下执行

#启动eggroll服务
source /data/projects/fate/init_env.sh
cd /data/projects/fate/eggroll
sh ./bin/eggroll.sh clustermanager start
sh ./bin/eggroll.sh nodemanager start#启动fate服务,fateflow依赖rollsite和mysql的启动,等所有节点的eggroll都启动后再启动fateflow,
否则会卡死报错
source /data/projects/fate/init_env.sh
cd /data/projects/fate/python/fate_flow
sh service.sh start
cd /data/projects/fate/fateboard
sh service.sh start

在目标服务器(192.168.0.2)app用户下执行

#启动eggroll服务
source /data/projects/fate/init_env.sh
cd /data/projects/fate/eggroll
sh ./bin/eggroll.sh all start#启动fate服务
source /data/projects/fate/init_env.sh
cd /data/projects/fate/python/fate_flow
sh service.sh start
cd /data/projects/fate/fateboard
sh service.sh start

5.8 问题定位

1)eggroll日志

/data/projects/fate/eggroll/logs/eggroll/bootstrap.clustermanager.err

/data/projects/fate/eggroll/logs/eggroll/clustermanager.jvm.err.log

/data/projects/fate/eggroll/logs/eggroll/nodemanager.jvm.err.log

/data/projects/fate/eggroll/logs/eggroll/bootstrap.nodemanager.err

/data/projects/fate/eggroll/logs/eggroll/bootstrap.rollsite.err

/data/projects/fate/eggroll/logs/eggroll/rollsite.jvm.err.log

2)fateflow日志

/data/projects/fate/python/logs/fate_flow/

3)fateboard日志

/data/projects/fate/fateboard/logs

6.测试

6.1 Toy_example部署验证

此测试您需要设置3个参数:guest_partyid,host_partyid,work_mode。

6.1.1 单边测试

1)192.168.0.1上执行,guest_partyid和host_partyid都设为10000:

source /data/projects/fate/init_env.sh
cd /data/projects/fate/python/examples/toy_example/
python run_toy_example.py 10000 10000 1

类似如下结果表示成功:

“2020-04-28 18:26:20,789 - secure_add_guest.py[line:126] - INFO: success to calculate secure_sum, it is 1999.9999999999998”

2)192.168.0.2上执行,guest_partyid和host_partyid都设为10000:

source /data/projects/fate/init_env.sh
cd /data/projects/fate/python/examples/toy_example/
python run_toy_example.py 9999 9999 1

类似如下结果表示成功:

“2020-04-28 18:26:20,789 - secure_add_guest.py[line:126] - INFO: success to calculate secure_sum, it is 1999.9999999999998”

6.1.2 双边测试

选定9999为guest方,在192.168.0.2上执行:

source /data/projects/fate/init_env.sh
cd /data/projects/fate/python/examples/toy_example/
python run_toy_example.py 9999 10000 1

类似如下结果表示成功:

“2020-04-28 18:26:20,789 - secure_add_guest.py[line:126] - INFO: success to calculate secure_sum, it is 1999.9999999999998”

6.2 最小化测试

6.2.1 快速模式:

在guest和host两方各任一egg节点中,根据需要在run_task.py中设置字段:guest_id,host_id,arbiter_id。

该文件在/data/projects/fate/python/examples/min_test_task/目录下。

在Host节点上运行:

source /data/projects/fate/init_env.sh
cd /data/projects/fate/python/examples/min_test_task/
sh run.sh host fast

从测试结果中获取“host_table”和“host_namespace”的值,并将它们作为参数传递给下述guest方命令。

在Guest节点上运行:

source /data/projects/fate/init_env.sh
cd /data/projects/fate/python/examples/min_test_task/
sh run.sh guest fast ${host_table} ${host_namespace} 

等待几分钟,看到结果显示“成功”字段,表明操作成功。在其他情况下,如果失败或卡住,则表示失败。

6.2.2 正常模式

只需在命令中将“fast”替换为“normal”,其余部分与快速模式相同。

6.3. Fateboard testing

Fateboard是一项Web服务。如果成功启动了fateboard服务,则可以通过访问 http://192.168.0.1:8080 和 http://192.168.0.1:8080 来查看任务信息,如果有防火墙需开通。如果fateboard和fateflow没有部署再同一台服务器,需在fateboard页面设置fateflow所部署主机的登陆信息:页面右上侧齿轮按钮–》add–》填写fateflow主机ip,os用户,ssh端口,密码。

7.系统运维

7.1 服务管理

在目标服务器(192.168.0.1 192.168.0.1 192.168.0.2)app用户下执行

7.1.1 Eggroll服务管理

source /data/projects/fate/init_env.sh
cd /data/projects/fate/eggroll

启动/关闭/查看/重启所有:

sh ./bin/eggroll.sh all start/stop/status/restart

启动/关闭/查看/重启单个模块(可选:clustermanager,nodemanager,rollsite):

sh ./bin/eggroll.sh clustermanager start/stop/status/restart

7.1.2 Fate服务管理

  1. 启动/关闭/查看/重启fate_flow服务
source /data/projects/fate/init_env.sh
cd /data/projects/fate/python/fate_flow
sh service.sh start|stop|status|restart

如果逐个模块启动,需要先启动eggroll再启动fateflow,fateflow依赖eggroll的启动。

  1. 启动/关闭/重启fateboard服务
cd /data/projects/fate/fateboard
sh service.sh start|stop|status|restart

7.1.3 Mysql服务管理

启动/关闭/查看/重启mysql服务

cd /data/projects/fate/common/mysql/mysql-8.0.13
sh ./service.sh start|stop|status|restart

7.2 查看进程和端口

在目标服务器(192.168.0.1 192.168.0.1 192.168.0.2)app用户下执行

7.2.1 查看进程

#根据部署规划查看进程是否启动
ps -ef | grep -i clustermanager
ps -ef | grep -i nodemanager
ps -ef | grep -i rollsite
ps -ef | grep -i fate_flow_server.py
ps -ef | grep -i fateboard

7.2.2 查看进程端口

#根据部署规划查看进程端口是否存在
#clustermanager
netstat -tlnp | grep 4670
#nodemanager
netstat -tlnp | grep 4671
#rollsite
netstat -tlnp | grep 9370
#fate_flow_server
netstat -tlnp | grep 9360
#fateboard
netstat -tlnp | grep 8080

7.3 服务日志

服务 日志路径
eggroll /data/projects/fate/eggroll/logs
fate_flow&任务日志 /data/projects/fate/python/logs
fateboard /data/projects/fate/fateboard/logs
mysql /data/projects/fate/common/mysql/mysql-8.0.13/logs

8. 附录

8.1 eggroll&fate打包构建

参见build指导

8.2 Eggroll参数调优

配置文件路径:/data/projects/fate/eggroll/conf/eggroll.properties

配置参数:eggroll.session.processors.per.node

假定 CPU核数(cpu cores)为 c, Nodemanager的数量为 n,需要同时运行的任务数为 p,则:

egg_num=eggroll.session.processors.per.node = c * 0.8 / p

partitions (roll pair分区数)= egg_num * n

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. DOM中的同步任务和异步任务

    常用的两种事件绑定:DOM0的事件绑定 btn.onclick = function(){} btn.onclick = function(){} 写多个后面的会把前面的覆盖掉 原因:JS中对象如果有同名属性,后面的肯定会覆盖前面DOM2的事件绑定: btn.addEventListener(“click”,funciton(){}) btn.addEventListener(“cl…...

    2024/5/7 5:22:57
  2. java学习系列-高并发01:必须知道的几个概念

    同步(Synchronous)和异步(Asynchronous) 同步和异步通常来形容一次方法调用,同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而异步方法通常会在…...

    2024/5/5 4:22:00
  3. Vector、ArrayList和LinkedList三者的区别联系之处

    Vector、ArrayList和LinkedList三者的区别联系之处。三者都实现了List接口,都拥有List和collection里面的方法。Vector底层实现和ArrayList十分相似,都是对象数组实现,而LinkedList是用链表的方式进行存储数据的。Vector相对于ArrayList,使用了synchronized方法(线程安全)…...

    2024/5/5 5:51:33
  4. python中的配置文件格式介绍

    python做自动化测试时,项目中经常用到对环境、对设备等的配置信息,这些配置信息在每次测试时会有所不同,怎样把配置信息集中放在一起,便于后续的修改维护呢,本文介绍几种方式。第一种:采用 .yamlg格式。这是目前功能最强大的格式。yaml的说明介绍YAML 是专门用来写配置文…...

    2024/5/5 2:14:29
  5. 语言基础一

    ...

    2024/5/7 4:04:16
  6. js中var和let的区别

    var和let的区别 ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 function func(){let a = 100;var b = 10; }a // ReferenceError: a is not defined. b // 10上面代码在代码块之中,分别用let和var声明了两个变量…...

    2024/5/6 1:28:44
  7. 小白学习JavaSE-day06-类的继承

    一、static关键字 1、static作用 static:修饰类中的成员变量和普通的方法。不能修饰构造方法。 被static修饰的变量或者方法可以通过类名直接访问,不需要去创建这个类的对象。 被static修饰的变量或者方法在使用的时候,不能直接访问非static修饰的内容。 2、static的演示 pu…...

    2024/5/5 9:57:19
  8. 2020牛客多校六 G. Grid Coloring (思维)

    题意:给n*n的网格图的边染k种颜色,每种色染的边数相同,构造不存在同色环及整行整列不同色的方案。 题解:思维 n=1,k=1,2 * (n + 1) * n % k != 0 这三种情况肯定是不行的。 接下来考虑两种情况。 ①n % k != 0 这个直接一行一行颜色从1到k顺着涂就行了,再接到列上。 ②n…...

    2024/5/5 19:22:08
  9. 读写yaml文件

    在python中读写yaml配置文件。import os import yaml#当前文件路径 filepath = os.path.dirname(__file__) print("当前文件路径: %s" % filepath)#当前文件的realpath filenamepath = os.path.split(os.path.realpath(__file__))[0] print("当前文件realpath:…...

    2024/5/5 14:34:42
  10. 谷粒商城05-统一开发环境

    统一开发环境 Jdk 和Maven的版本Maven的conf.xml配置阿里云镜像 <mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/repositories/central/</u…...

    2024/5/5 14:01:31
  11. Leetcode104. 二叉树的最大深度

    1.递归解法 class Solution {public int maxDepth(TreeNode root) {if(root==null){return 0;}int left = maxDepth(root.left);int right = maxDepth(root.right);return Math.max(left,right)+1;} }...

    2024/5/5 12:00:48
  12. JavaScript高级程序设计_第21章 个人笔记

    第21章——Ajax与CometAsynchronous JavaScript + XMLXMLHttpRequest 创建XHR对象 var xhr = new XMLHttpRequest() 属性.readyState0:未初始化——尚未调用open 1:启动——已调用open 2:发送——已调用send 3:接收——接收到部分响应数据 4:完成——接收到全部响应数据.s…...

    2024/5/3 23:09:59
  13. 1.1Java基础语法与C语言的区别(以C语言为基础)(详细)

    程序员一般以C语言进行入门学习。那么李老爹将以C语言为前提,阐述一些Java基础语法与C语言的不同。这样学者只需在c语言的基础上进行理解记忆。以下内容包括:Java数据类型、数据分隔符、>>>、instanceof、标识符命名规范、Scanner类、print ()和 printIn()、+符号与…...

    2024/5/5 20:12:24
  14. ES6常见API

    let与const let关键字,用来声明变量,它的用法类似于var。 let不允许重复声明变量; var a = 1; var a = 2; console.log(a);let b = 1; let b = 2; console.log(b);//报错let声明变量仅在块级作用域内有效; for (var i = 0; i < 10; i++) {console.log(i); }; alert(i);f…...

    2024/5/5 22:35:18
  15. 1403. 非递增顺序的最小子序列

    1403. 非递增顺序的最小子序列代码: class Solution {public List<Integer> minSubsequence(int[] nums) {List<Integer> list = new ArrayList<>();int max = Integer.MIN_VALUE, index = 0;Arrays.sort(nums);for (int i = nums.length - 1; i >= 0; i…...

    2024/5/5 8:07:34
  16. 应用PCA和K-means实现用户对物品类别的喜好细分划分

    # 导入所需要的库 import pandas as pd from sklearn.decomposition import PCA from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score1.获取数据 order_product = pd.read_csv("./instacart/order_products__prior.csv") products = p…...

    2024/5/6 1:27:36
  17. [算法练习-剑指offer]题24.二叉树中和为某一值的路径(Java)

    题目 题号:24 题目名:二叉树中和为某一值的路径 编程语言 Java 题目描述 输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 初次思路 有一说一,题目描述阅读…...

    2024/5/5 4:22:08
  18. Python Cookbook第三版学习笔记【第10章】

    第10章 模块和包 10.1 把模块按层次结构组织成包把代码在文件系统上进行组织,确保每一个目录下定义一个__init__.py文件 当模块被导入时,它所属的包的__init__.py就会被触发执行 init.py可以留空,也可以用来进行子模块的加载10.2 对所有符号的导入进行精确控制使用from modu…...

    2024/5/7 1:53:07
  19. vue cli3.0修改网页标题

    1. 在路由meta属性中设置标题title属性{path: /user,name: User,meta: {title: 用户管理},component: User}2 .在main.js中添加router.beforeEach((to, from, next) => {// 路由发生变化修改页面titleif (to.meta.title) {document.title = to.meta.title}next() })...

    2024/5/6 6:27:59
  20. 记录每日习题(33)—(34)

    每天学习的记录;(大佬勿喷) 题目:写一个函数,求n!(用递归) 题意:使用递归的方法,在return的时候,将参数进行递加就可以了; #include <stdio.h>int recursion(int n){if(n==2) //这里为什么是n==2;因为当循环到n==2的时候就可以跳出来了{return n;}return …...

    2024/5/4 20:10:43

最新文章

  1. nginx--tcp负载均衡

    mysql负载均衡 安装mysql yum install -y mariadb-server systemctl start mariadb systemctl enable mariadb ss -ntl创建数据库并授权 MariaDB [(none)]> create database wordpress; Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> grant all privileges o…...

    2024/5/7 6:51:30
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. javaWeb网上零食销售系统

    1 绪 论 目前&#xff0c;我国的网民数量已经达到7.31亿人&#xff0c;随着互联网购物和互联网支付的普及&#xff0c;使得人类的经济活动进入了一个崭新的时代。淘宝&#xff0c;京东等网络消费平台功能的日益完善&#xff0c;使得人们足不出户就可以得到自己想要的东西。如今…...

    2024/5/5 8:40:41
  4. LeetCode-200. 岛屿数量【深度优先搜索 广度优先搜索 并查集 数组 矩阵】

    LeetCode-200. 岛屿数量【深度优先搜索 广度优先搜索 并查集 数组 矩阵】 题目描述&#xff1a;解题思路一&#xff1a;bfs&#xff0c;主要思想都是遇到一个没有visited过的"陆地"先result 1&#xff0c;然后用深搜或者广搜将这片"陆地"全部做上visited标…...

    2024/5/5 15:07:34
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/6 18:23:10
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/6 18:40:38
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/6 23:37:19
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/6 7:24:07
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/7 0:32:52
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/6 6:01:13
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/6 7:24:06
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/7 1:54:46
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/6 20:04:22
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/7 0:32:51
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/6 7:24:04
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/6 7:24:04
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/6 19:38:16
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/6 7:24:03
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/7 0:32:49
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/6 21:25:34
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/6 7:24:02
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/6 7:24:01
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/7 0:32:47
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/6 16:50:57
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57