Spark-3.2.4 高可用集群安装部署详细图文教程

2023-09-15 10:39:31

目录

一、Spark 环境搭建-Local

1.1 服务器环境 

1.2 基本原理 

1.2.1 Local 下的角色分布

1.3 搭建 

1.3.1 安装 Anaconda 

1.3.1.1 添加国内阿里源 

1.3.2 创建 pyspark 环境 

1.3.3 安装 spark

1.3.4 添加环境变量 

1.3.5 启动 spark 

1.3.5.1 bin/pyspark 

1.3.5.2 WEB UI (4040)

1.3.5.3 spark-shell 

1.3.5.4 bin/spark-submit

1.3.6 pyspark/spark-shell/spark-submit 对比

二、Spark 环境搭建-Standalone

2.1 Standalone 架构 

2.2 搭建

2.2.1 各个节点安装 Anaconda 

2.2.2 修改配置文件(在 hadoop01 上执行) 

2.2.2.1 workers 

2.2.2.2 spark-env.sh  

2.2.2.3 spark-defaults.conf

2.2.2.4 log4j.properties(可选配置)

2.2.3 分发 Spark 安装目录

2.2.4 启动服务 

2.2.5 查看 Master 的 WEB UI

2.2.6 连接到 StandAlone 集群

2.2.6.1 bin/pyspark

2.2.6.2 bin/spark-shell

2.2.6.3 bin/spark-submit (PI)

2.2.7 查看历史服务器 WEB UI

三、Spark 环境搭建-Standalone HA

3.1 背景

3.2 高可用 HA

​3.3 基于 Zookeeper 实现 HA 

3.3.1 spark-env.sh

3.3.2 启动 HA 集群

3.3.3 master 主备切换


一、Spark 环境搭建-Local

1.1 服务器环境 

  • 已部署好 Hadoop 集群(HDFS\YARN),要求版本 Hadoop3 以上
  • JDK 1.8
  • 操作系统 CentOS 7 (建议 7.6)

本次基于这篇文章的 Hadoop 集群环境搭建 Spark:Hadoop YARN HA 集群安装部署详细图文教程_Stars.Sky的博客-CSDN博客

IP

主机名

运行角色

192.168.170.136

hadoop01

namenode datanode resourcemanager nodemanager JournalNode DFSZKFailoverController QuorumPeerMain Spark

192.168.170.137

hadoop02

namenode datanode resourcemanager nodemanager JournalNode DFSZKFailoverController QuorumPeerMain Spark

192.168.170.138

hadoop03

datanode nodemanage JournalNode QuorumPeerMain Spark

1.2 基本原理 

本质:启动一个 JVM Process 进程(一个进程里面有多个线程),执行任务 Task。

Local 模式可以限制模拟 Spark 集群环境的线程数量, 即 Local[N] 或 Local[*]:

  • 其中 N 代表可以使用 N 个线程,每个线程拥有一个 cpu core。如果不指定 N,则默认是 1 个线程(该线程有 1 个 core)。通常 Cpu 有几个 Core,就指定几个线程,最大化利用计算能力。
  • 如果是 local[*],则代表 Run Spark locally with as many worker threads as logical cores on your machine,按照 Cpu 最多的 Cores 设置线程数。

1.2.1 Local 下的角色分布

资源管理:

  • Master:Local 进程本身。
  • Worker:Local 进程本身。

任务执行:

  • Driver:Local 进程本身。
  • Executor:不存在,没有独立的 Executor 角色,由 Local 进程(也就是 Driver)内的线程提供计算能力。

注意:

  1. Driver 也算一种特殊的 Executor,只不过多数时候,我们将 Executor 当做纯 Worker 对待, 这样和 Driver 好区分(一类是管理一类是工人) 。
  2. Local 模式只能运行一个 Spark 程序,如果执行多个 Spark 程序,那就是由多个相互独立的Local 进程在执行。

1.3 搭建 

Spark 下载地址:Apache Downloads 

Anaconda 下载地址:Index of /

1.3.1 安装 Anaconda 

# 上传安装包后赋予权限
[root@hadoop01 ~]# chmod +x Anaconda3-2023.03-1-Linux-x86_64.sh 

# 执行安装脚本
[root@hadoop01 ~]# ./Anaconda3-2023.03-1-Linux-x86_64.sh 

先按回车键: 

再按空格键,直到出现让你输入 yes:
最后输入安装路径,并耐心等待安装完成:

最后进行初始化,输入 yes:

[root@hadoop01 ~]# source ~/.bashrc 

# 测试安装是否成功
(base) [root@hadoop01 ~]# conda list
1.3.1.1 添加国内阿里源 
(base) [root@hadoop01 ~]# vim ~/.condarc
channels:
  - defaults
show_channel_urls: true
default_channels:
  - http://mirrors.aliyun.com/anaconda/pkgs/main
  - http://mirrors.aliyun.com/anaconda/pkgs/r
  - http://mirrors.aliyun.com/anaconda/pkgs/msys2
custom_channels:
  conda-forge: http://mirrors.aliyun.com/anaconda/cloud
  msys2: http://mirrors.aliyun.com/anaconda/cloud
  bioconda: http://mirrors.aliyun.com/anaconda/cloud
  menpo: http://mirrors.aliyun.com/anaconda/cloud
  pytorch: http://mirrors.aliyun.com/anaconda/cloud
  simpleitk: http://mirrors.aliyun.com/anaconda/cloud

# 清除索引缓存
(base) [root@hadoop01 ~]# conda clean -i

1.3.2 创建 pyspark 环境 

# 查看 python 版本
[root@hadoop01 ~]# python
Python 3.10.9 (main, Mar  1 2023, 18:23:06) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

# 创建一个新的独立的 Python 环境
[root@hadoop01 ~]# conda create -n pyspark python=3.10.9

# 切换环境
[root@hadoop01 ~]# conda activate pyspark                                                                                                               
(pyspark) [root@hadoop01 ~]#

1.3.3 安装 spark

(pyspark) [root@hadoop01 ~]# tar -zxvf spark-3.2.4-bin-hadoop3.2.tgz -C /bigdata/
(pyspark) [root@hadoop01 ~]# mv /bigdata/spark-3.2.4-bin-hadoop3.2/ /bigdata/spark-3.2.4

1.3.4 添加环境变量 

(pyspark) [root@hadoop01 ~]# vim /etc/profile
# spark
export SPARK_HOME=/bigdata/spark-3.2.4
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PYSPARK_PYTHON=/usr/local/anaconda3/envs/pyspark/bin/python3.10
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native

(pyspark) [root@hadoop01 ~]# vim /root/.bashrc 
export JAVA_HOME=/usr/java/jdk1.8.0_381
export PYSPARK_PYTHON=/usr/local/anaconda3/envs/pyspark/bin/python3.10

(pyspark) [root@hadoop01 ~]# source /etc/profile
  • SPARK_HOME:表示 Spark 安装路径在那里;
  • HADOOP_CONF_DIR:告知 Spark Hadoop 的配置文件在那里;
  • PYSPARK_PYTHON:告知 Spark 运行 python 程序的执行器在哪里。
  • LD_LIBRARY_PATH:加载 Hadoop 的本地库(通常是 C 语言编写的)

1.3.5 启动 spark 

1.3.5.1 bin/pyspark 

        bin/pyspark 程序,可以提供一个交互式的 Python 解释器环境,在这里面可以写普通 python 代码,以及 spark 代码。

(pyspark) [root@hadoop01 ~]# cd /bigdata/spark-3.2.4/
[root@hadoop01 /bigdata/spark-3.2.4]# bin/pyspark 

示例代码, 将数组内容都 +1进行计算:
sc.parallelize([1,2,3,4,5]).map(lambda x: x + 1).collect() 

在这个环境内,可以运行 spark 代码。图中的 parallelizemap 都是 spark 提供的 API。

1.3.5.2 WEB UI (4040)

        每一个 Spark 程序在运行的时候,会绑定到 Driver 所在机器的 4040 端口上。如果 4040 端口被占用,会顺延到 4041 ... 4042... 

4040 端口是一个 WEBUI 临时端口,可以在浏览器内打开。输入:服务器 ip:4040 即可打开

        打开监控页面后,可以发现在程序内仅有一个 Driver,因为我们是 Local 模式,Driver 即管理 又干活。同时打开另一个终端,输入 jps,可以看到 local 模式下的唯一进程存在。这个进程即是 master 也是 worker。

注意:如果把当前的 pyspark 程序终止或退出(Ctrl + D)的话,SparkSubmit 进程 和 Web UI 页面也将终止和失效。 

1.3.5.3 spark-shell 

        同样是一个解释器环境,和 bin/pyspark 不同的是,这个解释器环境 运行的不是python代码,而是 scala 程序代码。

这个仅作为了解即可,因为这个是用于 scala 语言的解释器环境。

1.3.5.4 bin/spark-submit

bin/spark-submit 程序,作用: 提交指定的 Spark 代码到 Spark 环境中运行。

# 语法
bin/spark-submit [可选的一些选项] jar 包或者 python 代码的路径 [代码的参数]

# 示例
[root@hadoop01 /bigdata/spark-3.2.4]# bin/spark-submit --master local[*] /bigdata/spark-3.2.4/examples/src/main/python/pi.py 10

# 此案例运行 Spark 官方所提供的示例代码来计算圆周率值。后面的 10 是主函数接受的参数,数字越高,计算圆周率越准确。

1.3.6 pyspark/spark-shell/spark-submit 对比

bin/spark-submitbin/pysparkbin/spark-shell
功能提交 java\scala\python 代码到spark中运行提供一个 python 解释器环境用来以 python 代码执行 spark 程序提供一个 scala 解释器环境用来以 scala 代码执行 spark 程序
特点提交代码用解释器环境 写一行执行一行解释器环境 写一行执行一行
使用场景正式场合,正式提交 spark程序运行测试\学习\写一行执行一行\用来验证代码等测试\学习\写一行执行一行\用来验证代码等

二、Spark 环境搭建-Standalone

2.1 Standalone 架构 

        Standalone 模式是 Spark 自带的一种集群模式,不同于前面本地模式启动多个进程来模拟集群的环境,Standalone 模式是真实地在多个机器之间搭建 Spark 集群的环境,完全可以利用该模式搭建多机器集群,用于实际的大数据处理。 

StandAlone 是完整的 Spark 运行环境,其中:

  • Master 角色以 Master 进程存在,Worker 角色以 Worker 进程存在;
  • Driver 和 Executor 运行于 Worker 进程内,由 Worker 提供资源供给它们运行。

2.2 搭建

IP

主机名

运行角色

192.168.170.136

hadoop01

master worker

192.168.170.137

hadoop02

worker

192.168.170.138

hadoop03

worker

2.2.1 各个节点安装 Anaconda 

具体安装步骤同上面 1.3.1-1.3.4 是一样的。

2.2.2 修改配置文件(在 hadoop01 上执行) 

2.2.2.1 workers 

这个文件就是指示了当前 Spark StandAlone 环境下有哪些 worker: 

[root@hadoop01 ~]# cd /bigdata/spark-3.2.4/conf/
[root@hadoop01 /bigdata/spark-3.2.4/conf]# mv workers.template workers
[root@hadoop01 /bigdata/spark-3.2.4/conf]# vim workers 
hadoop01
hadoop02
hadoop03
2.2.2.2 spark-env.sh  
[root@hadoop01 /bigdata/spark-3.2.4/conf]# mv spark-env.sh.template spark-env.sh
[root@hadoop01 /bigdata/spark-3.2.4/conf]# vim spark-env.sh
## 设置 JAVA 安装目录
JAVA_HOME=/usr/java/jdk1.8.0_381

## HADOOP 软件配置文件目录,读取 HDFS 上文件和运行 YARN 集群
HADOOP_CONF_DIR=/bigdata/hadoop/server/hadoop-3.2.4/etc/hadoop/
YARN_CONF_DIR=/bigdata/hadoop/server/hadoop-3.2.4/etc/hadoop/

## 指定 spark 老大 Master 的 IP 和提交任务的通信端口
# 告知 Spark 的 master 运行在哪个机器上
export SPARK_MASTER_HOST=hadoop01
# 告知 spark master 的通讯端口
export SPARK_MASTER_PORT=7077
# 告知 spark master 的 webui 端口
SPARK_MASTER_WEBUI_PORT=8081

# worker cpu 可用核数
SPARK_WORKER_CORES=1
# worker 可用内存
SPARK_WORKER_MEMORY=1g
# worker 的工作通讯地址
SPARK_WORKER_PORT=7078
# worker 的 webui 地址
SPARK_WORKER_WEBUI_PORT=8082

## 设置历史服务器
# 配置的意思是将 spark 程序运行的历史日志,存到 hdfs 的 /sparklog 文件夹中
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://hadoop01:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"

# 如果 hadoop 集群是 HA,则需要用下面的设置。要使用则把注释去掉
#SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://mycluster/sparklog/ -Dspark.history.fs.cleaner.enabled=true"

        由于我的集群是高可用(HA)的,建议使用逻辑名称(Logical URI)而非具体的 Namenode 主机名和端口。这样可以确保即使当前的活动(Active)NameNode 发生变化,Spark 也能正确地找到日志目录。逻辑名称在 HA 配置中用于标识一个 Namenode 集群,而不是单个 Namenode。例如,如果逻辑名称是 mycluster,则您应该使用 hdfs://mycluster/sparklog/

注意:这里的 mycluster 应该与您在 HDFS 配置文件(通常是 hdfs-site.xml)中定义的逻辑名称(NameService ID)相匹配。这样,HA  客户端库就能自动确定哪个 NameNode 当前是 Active,并且进行相应的操作。(后续的同理) 

注意:上面的配置的路径要根据你自己机器实际的路径来写。

在 HDFS 上创建程序运行历史记录存放的文件夹:

[root@hadoop01 /bigdata/spark-3.2.4/conf]# hadoop fs -mkdir /sparklog
[root@hadoop01 /bigdata/spark-3.2.4/conf]# hadoop fs -chmod 777 /sparklog
2.2.2.3 spark-defaults.conf
[root@hadoop01 /bigdata/spark-3.2.4/conf]# mv spark-defaults.conf.template spark-defaults.conf
[root@hadoop01 /bigdata/spark-3.2.4/conf]# vim spark-defaults.conf
# 开启spark的日期记录功能
spark.eventLog.enabled  true    
# # 设置spark日志记录的路径
spark.eventLog.dir       hdfs://hadoop01:8021/sparklog/
# # 设置spark日志是否启动压缩
spark.eventLog.compress         true

# hadoop HA 的配置,要使用则把注释去掉
#spark.eventLog.dir       hdfs://mycluster/sparklog/
2.2.2.4 log4j.properties(可选配置)
[root@hadoop01 /bigdata/spark-3.2.4/conf]# mv log4j.properties.template log4j.properties
[root@hadoop01 /bigdata/spark-3.2.4/conf]# vim log4j.properties
log4j.rootCategory=WARN, console

        这个文件的修改不是必须的,  为什么修改为 WARN,因为 Spark 是个话痨会疯狂输出日志,设置级别为 WARN 只输出警告和错误日志,不要输出一堆废话。你如果为了更详细的信息可以默认 INFO。

2.2.3 分发 Spark 安装目录

[root@hadoop01 /bigdata]# cd /bigdata/
[root@hadoop01 /bigdata]# scp -r spark-3.2.4 hadoop02:$PWD
[root@hadoop01 /bigdata]# scp -r spark-3.2.4 hadoop03:$PWD

2.2.4 启动服务 

# 启动历史服务器
[root@hadoop01 ~]# cd /bigdata/spark-3.2.4/sbin/
[root@hadoop01 /bigdata/spark-3.2.4/sbin]# ./start-history-server.sh 

# 启动全部 master 和 worker
[root@hadoop01 /bigdata/spark-3.2.4/sbin]# ./start-all.sh 

# 或者可以一个个启动:
# 启动当前机器的 master
sbin/start-master.sh
# 启动当前机器的 worker
sbin/start-worker.sh

# 停止全部
sbin/stop-all.sh

# 停止当前机器的 master
sbin/stop-master.sh

# 停止当前机器的 worker
sbin/stop-worker.sh

# 验证
[root@hadoop01 /bigdata/spark-3.2.4/sbin]# jps
7666 QuorumPeerMain
8739 DFSZKFailoverController
9315 NodeManager
8164 DataNode
9125 ResourceManager
10583 Worker
7977 NameNode
10649 Jps
8460 JournalNode
10492 Master

2.2.5 查看 Master 的 WEB UI

        默认端口 master 我们设置到了 8081。如果端口被占用,会顺延到 8082 ...;8083... 8084... 直到申请到端口为止。

2.2.6 连接到 StandAlone 集群

2.2.6.1 bin/pyspark
[root@hadoop01 ~]# cd /bigdata/spark-3.2.4/
(pyspark) [root@hadoop01 /bigdata/spark-3.2.4]# bin/pyspark --master spark://hadoop01:7077

# 通过 --master 选项来连接到 StandAlone 集群
# 如果不写 --master 选项, 默认是 local 模式运行

2.2.6.2 bin/spark-shell
(base) [root@hadoop01 /bigdata/spark-3.2.4]# bin/spark-shell --master spark://hadoop01:7077
# 同样适用 --master 来连接到集群使用

// 测试代码
sc.parallelize(Array(1,2,3,4,5)).map(x=> x + 1).collect()
2.2.6.3 bin/spark-submit (PI)
(base) [root@hadoop01 /bigdata/spark-3.2.4]# bin/spark-submit --master spark://hadoop01:7077 /bigdata/spark-3.2.4/examples/src/main/python/pi.py 10

# 同样使用 --master 来指定将任务提交到集群运行

2.2.7 查看历史服务器 WEB UI

        历史服务器的默认端口是: 18080,我们启动在node1上, 可以在浏览器打开:hadoop01:18080 来进入到历史服务器的 WEB UI上。

        由于每个程序运行完成后,4040 端口就被注销了。在以后想回看某个程序的运行状态就可以通过历史服务器查看,历史服务器长期稳定运行,可供随时查看被记录的程序的运行过程。

三、Spark 环境搭建-Standalone HA

3.1 背景

        Spark Standalone 集群是 Master-Slaves 架构的集群模式,和大部分的 Master-Slaves 结构集群一样,存在着 Master 单点故障(SPOF)的问题。 

3.2 高可用 HA

如何解决这个单点故障的问题,Spark 提供了两种方案:

  1. 基于文件系统的单点恢复(Single-Node Recovery with Local File System)--只能用于开发或测试环境。
  2. 基于 zookeeper 的 Standby Masters(Standby Masters with ZooKeeper)--可以用于生产环境。

        ZooKeeper 提供了一个 Leader Election 机制,利用这个机制可以保证虽然集群存在多个Master,但是只有一个是 Active 的,其他的都是 Standby。当 Active 的 Master 出现故障时,另外的一个 Standby Master 会被选举出来。由于集群的信息,包括 Worker,Driver 和 Application的信息都已经持久化到文件系统,因此在切换的过程中只会影响新 Job 的提交,对于正在进行的 Job 没有任何的影响。加入 ZooKeeper 的集群整体架构如下图所示。

3.3 基于 Zookeeper 实现 HA 

前提: 确保 Zookeeper 和 HDFS 集群均已经启动!

3.3.1 spark-env.sh

先在 spark-env.sh 中删除: SPARK_MASTER_HOST=hadoop01

原因: 配置文件中固定 master 是谁,那么就无法用到 zk 的动态切换 master 功能了。

在 spark-env.sh 中增加:

(base) [root@hadoop01 /bigdata/spark-3.2.4]# vim conf/spark-env.sh 
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop01:2181,hadoop02:2181,hadoop03:2181 -Dspark.deploy.zookeeper.dir=/spark-ha"

# spark.deploy.recoveryMode 指定 HA 模式 基于 Zookeeper 实现
# 指定 Zookeeper 的连接地址
# 指定在 Zookeeper 中注册临时节点的路径

# 分发文件
(base) [root@hadoop01 /bigdata/spark-3.2.4]# cd conf/
(base) [root@hadoop01 /bigdata/spark-3.2.4/conf]# scp -r spark-env.sh hadoop02:$PWD  
(base) [root@hadoop01 /bigdata/spark-3.2.4/conf]# scp -r spark-env.sh hadoop03:$PWD

3.3.2 启动 HA 集群

# 停止当前 StandAlone 集群
(base) [root@hadoop01 /bigdata/spark-3.2.4]# sbin/stop-all.sh 

# 在 hadoop01 上启动一个 master 和全部 worker
(base) [root@hadoop01 /bigdata/spark-3.2.4]# sbin/start-all.sh 

# 注意, 下面命令在 hadoop02 上执行,在 hadoop02 上启动一个备用的 master 进程
(base) [root@hadoop02 /bigdata/spark-3.2.4]# sbin/start-master.sh 
starting org.apache.spark.deploy.master.Master, logging to /bigdata/spark-3.2.4/logs/spark-root-org.apache.spark.deploy.master.Master-1-hadoop02.out
(base) [root@hadoop02 /bigdata/spark-3.2.4]# jps
1570 QuorumPeerMain
1700 NameNode
3636 Jps
3498 Worker
3578 Master
1804 DataNode
1932 JournalNode
2204 ResourceManager
2094 DFSZKFailoverController
2318 NodeManager

默认情况下,先启动 Master 就为 Active Master,如下截图所示:

3.3.3 master 主备切换

        如果将 hadoop01 的 Master 进程 Kill 掉前,在 hadoop02 上执行pyspark 程序,也就是在执行过程中,使用 jps 查看 Active Master 进程ID,将其 kill,观察 hadoop02 的 Master 是否自动切换与应用运行完成结束,standby 是否接管集群.。(需要等待1-2min) 

(base) [root@hadoop02 /bigdata/spark-3.2.4]# bin/spark-submit --master spark://hadoop01:7077 /bigdata/spark-3.2.4/examples/src/main/python/pi.py 100

(base) [root@hadoop01 /bigdata/spark-3.2.4]# jps
2352 DataNode
3537 NodeManager
2914 DFSZKFailoverController
5618 Worker
2645 JournalNode
5718 Jps
2167 NameNode
3341 ResourceManager
3773 HistoryServer
5517 Master
1854 QuorumPeerMain
(base) [root@hadoop01 /bigdata/spark-3.2.4]# kill -9 5517

结论:HA 模式下主备切换不会影响到正在运行的程序。最大的影响是会让它中断大约 30 秒左右。

上一篇文章:Spark 框架概述_Stars.Sky的博客-CSDN博客

下一篇文章:Spark on YARN 部署搭建详细图文教程_Stars.Sky的博客-CSDN博客

更多推荐

贸易战的影响:跨境电商的“黑洞”风险与机遇

当今全球贸易局势充满了不确定性和动荡。贸易战的阴云笼罩下,跨境电商企业面临着前所未有的挑战,但与此同时,也蕴藏着巨大的机遇。本文将深入探讨贸易战对跨境电商的影响,以及企业在这个新现实中如何应对风险并寻找机遇。贸易战的背景贸易战是国家之间为争夺贸易利益而采取的一系列贸易政策和关税措施的冲突。近年来,中美之间的贸易战引起了

大模型股票交易-挖掘新闻和情绪价值

埃隆·马斯克(ElonMusk)的星际飞船于2023年4月20日升空后爆炸。想象一下,当时您正在观察股市,突然出现新闻,您会如何交易TSLA股票?我希望您不要与我争论,您作为交易者(而不是投资者)要做的第一件事就是摆脱现有的多头头寸并可能做空股票。让我们看看这样的交易是否有利可图。根据此链接SpaceXrocketla

飞驰的高铁-第15届蓝桥杯第一次STEMA测评Scratch真题精选

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第150讲。飞驰的高铁,本题是2023年8月20日举行的第15届蓝桥杯STEMA测评Scratch编程中级组编程第2题,题目要求编程实现模拟高铁飞驰前进的效果。当按下数字1时,画面中的景

游戏创业小知识:游戏运营的步骤和流程

游戏运营是确保游戏在持续运行中保持活跃和成功的过程。以下是游戏运营的一般步骤流程:1.游戏发布前准备游戏选择:了解并熟悉游戏的核心概念、目标受众和游戏玩法。开发团队:组建开发团队,包括程序员、设计师、艺术家和声音设计师等。技术基础设施:建立游戏服务器、数据库和其他必要的技术基础设施。资金筹集:获取足够的资金来支持游戏的

原生微信小程序中进行 API 请求

原生微信小程序中进行API请求当在原生微信小程序中进行API请求时,封装请求可以提高代码的可维护性和可扩展性。在本篇博客中,我们将一步步介绍如何进一步封装请求,并添加请求超时、拦截器和请求取消功能。第一步:基本请求封装首先,我们创建一个用于发送HTTP请求的基本封装。在微信小程序中,我们使用wx.request发送请求

day41 jdk8新特性Stream流 数据库安装

流(Stream)中保存了对集合或者数组数据的操作,和集合类似,但是集合中保存的是数据。Stream不能保存数据一、创建流通过Collection对象的stream()或者parallelStream()通过Arrays类的stream(Array[]<T>)方法通过Stream接口of()iterate()gener

Java版本spring cloud + spring boot企业电子招投标系统源代码

项目说明随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审计监督要求;通过电子化平台提高招投标工作的公开性和透明性;通过电子化招投标,使得招标采购的质量更高、速度

计算机视觉与深度学习-经典网络解析-ZFNet-[北邮鲁鹏]

这里写目录标题ZFNet主要改进减小第一层卷积核将第二、第三个卷积层的卷积步长都设置为2增加了第三、第四个卷积层的卷积核个数ZFNetZFNet是一种基于AlexNet的模型,由MatthewD.Zeiler和RobFergus在2013年提出。相对于AlexNet,ZFNet结构与AlexNet网络结构基本一致,进行

阿里云服务器ECS_云主机_服务器托管_计算性能介绍

阿里云服务器是什么?云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,云服务器可以降低IT成本提升运维效率,免去企业或个人前期采购IT硬件的成本,阿里云服务器让用户像使用水、电、天然气等公共资源一样便捷、高效地使用服务器。阿里云服务器具有安全、稳定、弹性升降配、高性能、易用可扩展等优势。阿里云百科来详细说下什么是阿

使用 rtty 进行远程 Linux 维护和调试

rtty是一个用于在终端上进行远程连接和数据传输的工具。它提供了一种简单的方式来与远程设备进行通信,使得在不同主机之间传输数据变得更加方便。安装rtty是一个可执行程序,可以在Linux、macOS和Windows等平台上使用。Linux/macOS在终端中执行以下命令,使用curl下载rtty可执行文件:curl-L

Golang代码漏洞扫描工具介绍——trivy

Golang代码漏洞扫描工具介绍——trivyGolang作为一款近年来最火热的服务端语言之一,深受广大程序员的喜爱,笔者最近也在用,特别是高并发的场景下,golang易用性的优势十分明显,但笔者这次想要介绍的并不是golang本身,而且golang代码的漏洞扫描工具,毕竟作为服务端的程序,安全性一直是一个不同忽视的地

热文推荐