「Linux」软件安装
MySQL
5.7在CentOS
安装
安装
- 配置yum仓库
- 更新密钥:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
- 安装
MySQL yum
库:rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm
- 更新密钥:
- 使用
yum
安装MySQL
:yum -y install mysql-community-server
- 安装完成后,启动
MySQL
并配置开机自启动- 启动:
systemctl start mysqld
- 开机自启:
systemctl enable mysqld
- 启动:
- 检查MySQL的运行状态:
systemctl status mysqld
配置
主要配置管理员用户root的密码以及配置允许远程登陆的权限
- 获取
MySQL
的初始密码:grep 'temporary password' /var/log/mysqld.log
- 登陆
MySQL
数据库系统- mysql命令:
mysql -uroot -p
-u
:登陆的用户,MySQL数据库的管理员用户同Linux一样,是root-p
:表示使用密码登陆
- 执行完毕后输入刚刚得到的初始密码,即可进入
MySQL
数据库
- mysql命令:
- 修改
root
用户密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';
1. 密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc
- 配置
root
的简单密码1 2
set global validate_password.policy=0; # 密码安全级别低 set global validate_password.length=4; # 密码长度最低4位即可
- 配置
root
运行远程登录1 2 3 4 5 6 7
# 授权root远程登录 grant all privileges on *.* to root@"IP地址" identified by '密码' with grant option; # IP地址即允许登陆的IP地址,也可以填写%,表示允许任何地址 # 密码表示给远程登录独立设置密码,和本地登陆的密码可以不同# 刷新权限,生效 flush privileges;
- 退出
MySQL
控制台页面1 2 3 4
# 退出命令 exit# 或者通过快捷键退出:ctrl + d
- 检查端口:
MySQL
默认绑定了3306端口,可以通过端口占用检查MySQL
的网络状态1
netstat -anp | grep 3306
MySQL
8.0版本在CentOS
系统安装
安装
-
配置
yum
仓库1 2 3 4 5
# 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022# 安装Mysql8.x版本 yum库 rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
-
使用
yum
安装MySQL
:yum -y install mysql-community-server
-
安装完成后,启动
MySQL
并配置开机自启动1 2
systemctl start mysqld # 启动 systemctl enable mysqld # 开机自启
MySQL
安装完成后,会自动配置为名称叫做:mysqld
的服务,可以被systemctl所管理 -
检查
MySQL
的运行状态:systemctl status mysqld
配置
基本上同[[Linux#5.1.2 配置]]
-
允许
root
远程登录,并设置远程登录密码默认情况下,
root
用户是不运行远程登录的,只允许在MySQL
所在的Linux
服务器登陆MySQL
系统允许
root
远程登录会带来安全风险1 2 3 4 5
# 第一次设置root远程登录,并配置远程密码使用如下SQL命令 create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码!'; -- 密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc# 后续修改密码使用如下SQL命令 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
Tomcat安装部署
安装JDK环境
- 下载JDK
- 登陆
Linux
系统,切换到root
用户:su -
- 通过
FinalShell
,上传下载好的JDK
安装包 - 创建文件夹,用来部署
JDK
,将JDK
和Tomcat
都安装部署到/export/server
内:mkdir -p /export/server
- 解压缩
JDK
安装文件:tar -zxvf jdk-8u351-linux-x64.tar.gz -C /export/server
- 配置
JDK
的软链接:ln -s /export/server/jdk1.8.0_351 /export/server/jdk
- 配置
JAVA_HOME
环境变量,以及将$JAVA_HOME/bin
文件夹加入PATH
环境变量中1 2 3
# 编辑/etc/profile文件 export JAVA_HOME=/export/server/jdk export PATH=$PATH:$JAVA_HOME/bin
- 生效环境变量:
source /etc/profile
- 配置
java
执行程序的软链接1 2 3 4
# 删除系统自带的java程序 rm -f /usr/bin/java # 软链接我们自己安装的java程序 ln -s /export/server/jdk/bin/java /usr/bin/java
- 执行验证
1 2
java -version javac -version
解压并部署Tomcat
建议使用非
Root
用户安装并启动
-
首先,放行
tomcat
需要使用的8080端口的外部访问权限,以下操作2选一即可-
关闭防火墙
1 2
systemctl stop firewalld # 关闭防火墙 systemctl disable firewalld # 停止防火墙开机自启
-
配置防火墙规则,放行端口
1 2
firewall-cmd --add-port=8080/tcp --permanent # --add-port=8080/tcp表示放行8080端口的tcp访问,--permanent表示永久生效 firewall-cmd --reload # 重新载入防火墙规则使其生效
-
-
以
root
用户操作,创建tomcat
用户1 2 3 4
# 使用root用户操作 useradd tomcat # 可选,为tomcat用户配置密码 passwd tomcat
-
下载
Tomcat
安装包1 2 3 4
# 使用root用户操作 wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz # 如果出现https相关错误,可以使用--no-check-certificate选项 wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz
-
解压
Tomcat
安装包:tar -zxvf apache-tomcat-10.0.27.tar.gz -C /export/server
- 使用
root
用户操作,否则无权限解压到/export/server
内,除非修改此文件夹权限
- 使用
-
创建
Tomcat
软链接:ln -s /export/server/apache-tomcat-10.0.27 /export/server/tomcat
- 使用root用户操作
-
修改
tomcat
安装目录权限:chown -R tomcat:tomcat /export/server/*tomcat*
- 使用
root
用户操作,同时对软链接和tomcat
安装文件夹进行修改,使用通配符*
进行匹配
- 使用
-
切换到
tomcat
用户:su - tomcat
-
启动
tomcat
:/export/server/tomcat/bin/startup.sh
tomcat
启动在8080端口,可以检查是否正常启动成功:netstat -anp | grep 8080
- 打开浏览器,输入:
http://centos:8080
或http://192.168.88.130:8080
- 使用主机名(需配置好本地的主机名映射)或
IP
地址访问Tomcat
的WEB
页面
- 使用主机名(需配置好本地的主机名映射)或
Nginx
安装部署
安装
Nginx
的操作需要root
身份
-
安装
yum
依赖程序:yum install -y yum-utils
-
手动添加,
nginx
的yum
仓库,yum
程序使用的仓库配置文件,存放在/etc/yum.repo.d
内1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# 创建文件使用vim编辑 vim /etc/yum.repos.d/nginx.repo # 填入如下内容并保存退出 [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true[nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
-
通过
yum
安装最新稳定版的nginx
:yum install -y nginx
-
启动
1 2 3 4 5 6
# nginx自动注册了systemctl系统服务 systemctl start nginx # 启动 systemctl stop nginx # 停止 systemctl status nginx # 运行状态 systemctl enable nginx # 开机自启 systemctl disable nginx # 关闭开机自启
-
配置防火墙放行:
nginx
默认绑定80端口,需要关闭防火墙或放行80端口1 2 3 4 5 6 7
# 方式1,关闭防火墙 systemctl stop firewalld # 关闭 systemctl disable firewalld # 关闭开机自启# 方式2,放行80端口 firewall-cmd --add-port=80/tcp --permanent # 放行tcp规则下的80端口,永久生效 firewall-cmd --reload # 重新加载防火墙规则
-
启动后浏览器输入
Linux
服务器的IP
地址或主机名即可访问http://192.168.88.130
或http://centos
RabbitMQ安装部署
rabbitmq
在yum
仓库中的版本比较老,所以我们需要手动构建yum
仓库需要
root
权限
-
准备
yum
仓库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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
# 1. 准备gpgkey密钥 rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc rpm --import https://packagecloud.io/rabbitmq/erlang/gpgkey rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey# 2. 准备仓库文件 vim /etc/yum.repos.d/rabbitmq.repo # 填入如下内容 ## ## Zero dependency Erlang ##[rabbitmq_erlang] name=rabbitmq_erlang baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch repo_gpgcheck=1 gpgcheck=1 enabled=1 # PackageCloud's repository key and RabbitMQ package signing key gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkeyhttps://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300[rabbitmq_erlang-source] name=rabbitmq_erlang-source baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS repo_gpgcheck=1 gpgcheck=0 enabled=1 # PackageCloud's repository key and RabbitMQ package signing key gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkeyhttps://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300## ## RabbitMQ server ##[rabbitmq_server] name=rabbitmq_server baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch repo_gpgcheck=1 gpgcheck=0 enabled=1 # PackageCloud's repository key and RabbitMQ package signing key gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkeyhttps://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300[rabbitmq_server-source] name=rabbitmq_server-source baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/SRPMS repo_gpgcheck=1 gpgcheck=0 enabled=1 gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300
-
安装
RabbitMQ
:yum install erlang rabbitmq-server -y
-
启动
1 2 3 4 5 6
# 使用systemctl管控,服务名:rabbitmq-server systemctl enable rabbitmq-server # 开机自启 systemctl disable rabbitmq-server # 关闭开机自启 systemctl start rabbitmq-server # 启动 systemctl stop rabbitmq-server # 关闭 systemctl status rabbitmq-server # 查看状态
-
放行防火墙,
RabbitMQ
使用5672、15672、25672这3个端口1 2 3 4 5 6 7 8 9
# 方式1,关闭防火墙 systemctl stop firewalld # 关闭 systemctl disable firewalld # 关闭开机自启# 方式2,放行5672 25672端口 firewall-cmd --add-port=5672/tcp --permanent # 放行tcp规则下的5672端口,永久生效 firewall-cmd --add-port=15672/tcp --permanent # 放行tcp规则下的15672端口,永久生效 firewall-cmd --add-port=25672/tcp --permanent # 放行tcp规则下的25672端口,永久生效 firewall-cmd --reload # 重新加载防火墙规则
-
启动
RabbitMQ
的WEB
管理控制台:rabbitmq-plugins enable rabbitmq_management
-
添加
admin
用户,并赋予权限1 2 3
rabbitmqctl add_user admin 'Itheima66^' rabbitmqctl set_permissions -p "/" "admin" ".*" ".*" ".*" rabbitmqctl set_user_tags admin administrator
-
浏览器打开管理控制台
http://192.168.88.130:15672
Redis
安装部署
需要
root
权限
-
配置
EPEL
仓库:yum install -y epel-release
-
安装
redis
:yum install -y redis
-
启动
redis
1 2 3 4 5 6
# 使用systemctl管控,服务名:redis systemctl enable redis # 开机自启 systemctl disable redis # 关闭开机自启 systemctl start redis # 启动 systemctl stop redis # 关闭 systemctl status redis # 查看状态
-
放行防火墙,
redis
使用端口63791 2 3 4 5 6 7
# 方式1,关闭防火墙 systemctl stop firewalld # 关闭 systemctl disable firewalld # 关闭开机自启# 方式2,放行6379端口 firewall-cmd --add-port=6379/tcp --permanent # 放行tcp规则下的6379端口,永久生效 firewall-cmd --reload
-
进入
redis
服务1 2 3 4 5 6 7
# 执行redis-cli [root@centos ~]# redis-cli 127.0.0.1:6379> set mykey hello OK 127.0.0.1:6379> get mykey "hello" 127.0.0.1:6379>
ElasticSearch
安装部署
需要
root
权限
-
添加
yum
仓库1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# 导入仓库密钥 rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch# 添加yum源 # 编辑文件 vim /etc/yum.repos.d/elasticsearch.repo[elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md# 更新yum缓存 yum makecache
-
安装
es
:yum install -y elasticsearch
-
配置
es
1 2 3 4 5 6 7 8 9 10 11 12 13
vim /etc/elasticsearch/elasticsearch.yml# 17行,设置集群名称 cluster.name: my-cluster# 23行,设置节点名称 node.name: node-1# 56行,允许外网访问 network.host: 0.0.0.0# 74行,配置集群master节点 cluster.initial_master_nodes: ["node-1"]
-
启动
es
:systemctl start | stop | status | enable | disable elasticsearch
-
关闭防火墙
1 2
systemctl stop firewalld systemctl disable firewalld
-
浏览器打开
http://ip:9200/?pretty
集群化环境前置准备
配置多台Linux
虚拟机
安装集群化软件,首要条件就是要有多台Linux
服务器可用
我们可以使用VMware提供的克隆功能,将我们的虚拟机额外克隆出3台来使用
-
关闭当前
CentOS
系统虚拟机(可以使用root
用户执行init 0
来快速关机) -
新建文件夹 如:虚拟机集群
-
克隆,分别命名为
node1
,node2
,node3
-
开启
node1
,修改主机名为node1
,并修改固定ip
为192.168.88.1311 2 3 4 5 6 7 8 9 10 11 12
# 修改主机名 hostnamectl set-hostname node1# 修改IP地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR="192.168.88.131"# 重启网卡 systemctl stop network systemctl start network # 或者直接 systemctl restart network
-
同样的操作启动
node2
和node3
- 修改
node2
主机名为node2
,设置ip
为192.168.88.132 - 修改
node2
主机名为node3
,设置ip
为192.168.88.133
- 修改
-
配置
FinalShell
,配置连接到node1
、node2
、node3
的连接
准备主机名映射
-
在
Windows
系统中修改hosts
文件,填入如下内容:1 2 3
192.168.88.131 node1 192.168.88.132 node2 192.168.88.133 node3
-
在3台
Linux
的/etc/hosts
文件中,都填入如下内容1 2 3
192.168.88.131 node1 192.168.88.132 node2 192.168.88.133 node3
配置SSH
免密登录
-
在每一台机器都执行
ssh-keygen -t rsa -b 4096
,一直回车即可 -
在每一台机器都执行
1 2 3
ssh-copy-id node1 ssh-copy-id node2 ssh-copy-id node3
-
执行完毕后,
node1
、node2
、node3
之间将完成root
用户之间的免密互通
配置JDK
环境
[[Linux#5.3.1 安装JDK环境]]
关闭防火墙和SELinux
-
关闭防火墙
1 2
systemctl stop firewalld systemctl disable firewalld
-
关闭
SELinux
1 2 3 4 5
vim /etc/sysconfig/selinux# 将SELINUX=enforcing 改为 SELINUX=disabled # 保存退出后,重启虚拟机即可
补充命令 - scp
- 功能:在不同的
Linux
服务器之间,通过SSH
协议互相传输文件。 - 语法:
scp [-r] 参数1 参数2
-r
:用于复制文件夹使用,如果复制文件夹,必须使用-r- 参数1:本机路径或远程目标路径
- 参数2:远程目标路径或本机路径
- 例
scp -r /export/server/jdk root@node2:/export/server/
- 将本机上的
jdk
文件夹, 以root
的身份复制到node2
的/export/server/
内,账户名可以省略(使用本机当前的同名账户登陆)
- 将本机上的
scp -r node2:/export/server/jdk /export/server/
- 将远程
node2
的jdk
文件夹,复制到本机的/export/server/
内
- 将远程
- scp命令的高级用法
1 2 3
cd /export/server scp -r jdk node2:`pwd`/ # 将本机当前路径的jdk文件夹,复制到node2服务器的同名路径下 scp -r jdk node2:$PWD # 将本机当前路径的jdk文件夹,复制到node2服务器的同名路径下
Zookeeper
集群安装部署
-
确保完成5.8 集群化环境前置准备
-
【
node1
上操作】下载Zookeeper
安装包,并解压1 2 3 4 5 6 7 8
# 下载 wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz# 确保如下目录存在,不存在就创建 mkdir -p /export/server# 解压 tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C /export/server
-
【
node1
上操作】创建软链接:ln -s /export/server/apache-zookeeper-3.5.9 /export/server/zookeeper
-
【
node1
上操作】修改配置文件1 2 3 4 5 6 7 8 9 10 11
vim /export/server/zookeeper/conf/zoo.cfgtickTime=2000 # zookeeper数据存储目录 dataDir=/export/server/zookeeper/data clientPort=2181 initLimit=5 syncLimit=2 server.1=node1:2888:3888 server.2=node2:2888:3888 server.3=node3:2888:3888
-
【
node1
上操作】配置myid
1 2 3 4 5 6
# 1. 创建Zookeeper的数据目录 mkdir /export/server/zookeeper/data# 2. 创建文件,并填入1 vim /export/server/zookeeper/data/myid # 在文件内填入1即可
-
【在
node2
和node3
上操作】创建文件夹:mkdir -p /export/server
-
【
node1
上操作】将Zookeeper
复制到node2
和node3
1 2 3 4
cd /export/serverscp -r apache-zookeeper-3.5.9 node2:`pwd`/ scp -r apache-zookeeper-3.5.9 node3:`pwd`/
-
【
node2
上操作】1 2 3 4 5 6
# 1. 创建软链接 ln -s /export/server/apache-zookeeper-3.5.9 /export/server/zookeeper# 2. 修改myid文件 vim /export/server/zookeeper/data/myid # 修改内容为2
-
【
node3
上操作】1 2 3 4 5 6
# 1. 创建软链接 ln -s /export/server/apache-zookeeper-3.5.9 /export/server/zookeeper# 2. 修改myid文件 vim /export/server/zookeeper/data/myid # 修改内容为3
-
【在
node1
、node2
、node3
上分别执行】启动Zookeeper
:/export/server/zookeeper/bin/zkServer.sh start
-
【在
node1
、node2
、node3
上分别执行】检查Zookeepe
r进程是否启动1 2 3
jps# 结果中找到有:QuorumPeerMain 进程即可
-
【
node1
上操作】验证Zookeeper
1 2 3 4 5 6
/export/server/zookeeper/zkCli.sh# 进入到Zookeeper控制台中后,执行 ls /# 如无报错即配置成功
Kafka
集群安装部署
安装
-
确保已完成5.3.1 安装JDK环境和5.9 Zookeeper集群安装部署
-
【
node1
操作】下载并上传Kafka
的安装包:wget http://archive.apache.org/dist/kafka/2.4.1/kafka_2.12-2.4.1.tgz
-
【
node1
操作】解压1 2 3 4 5 6 7
mkdir -p /export/server # 此文件夹如果不存在需先创建# 解压 tar -zxvf kafka_2.12-2.4.1.tgz -C /export/server/# 创建软链接 ln -s /export/server/kafka_2.12-2.4.1 /export/server/kafka
-
【
node1
操作】修改Kafka
目录内的config
目录内的server.properties
文件1 2 3 4 5 6 7 8 9
cd /export/server/kafka/config # 指定broker的id broker.id=1 # 指定 kafka的绑定监听的地址 listeners=PLAINTEXT://node1:9092 # 指定Kafka数据的位置 log.dirs=/export/server/kafka/data # 指定Zookeeper的三个节点 zookeeper.connect=node1:2181,node2:2181,node3:2181
-
【
node1
操作】将node1
的kafka
复制到node2
和node3
1 2 3 4 5 6
cd /export/server# 复制到node2同名文件夹 scp -r kafka_2.12-2.4.1 node2:`pwd`/ # 复制到node3同名文件夹 scp -r kafka_2.12-2.4.1 node3:$PWD
-
【
node2
操作】1 2 3 4 5 6 7 8 9 10 11 12
# 创建软链接 ln -s /export/server/kafka_2.12-2.4.1 /export/server/kafkacd /export/server/kafka/config # 指定broker的id broker.id=2 # 指定 kafka的绑定监听的地址 listeners=PLAINTEXT://node2:9092 # 指定Kafka数据的位置 log.dirs=/export/server/kafka/data # 指定Zookeeper的三个节点 zookeeper.connect=node1:2181,node2:2181,node3:2181
-
【
node3
操作】1 2 3 4 5 6 7 8 9 10 11 12
# 创建软链接 ln -s /export/server/kafka_2.12-2.4.1 /export/server/kafkacd /export/server/kafka/config # 指定broker的id broker.id=3 # 指定 kafka的绑定监听的地址 listeners=PLAINTEXT://node3:9092 # 指定Kafka数据的位置 log.dirs=/export/server/kafka/data # 指定Zookeeper的三个节点 zookeeper.connect=node1:2181,node2:2181,node3:2181
-
启动
kafka
1 2 3 4 5 6 7
# 请先确保Zookeeper已经启动了# 方式1:【前台启动】分别在node1、2、3上执行如下语句 /export/server/kafka/bin/kafka-server-start.sh /export/server/kafka/config/server.properties# 方式2:【后台启动】分别在node1、2、3上执行如下语句 nohup /export/server/kafka/bin/kafka-server-start.sh /export/server/kafka/config/server.properties 2>&1 >> /export/server/kafka/kafka-server.log &
-
验证
Kafka
启动,在每一台服务器执行:jps
测试Kafka能否正常使用
- 【
node1
操作】创建测试主题:/export/server/kafka_2.12-2.4.1/bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1 --partitions 3 --topic test
- 运行测试,在
FinalShell
中打开2个node1
的终端页面1 2 3 4
# 打开一个终端页面,启动一个模拟的数据生产者 /export/server/kafka_2.12-2.4.1/bin/kafka-console-producer.sh --broker-list node1:9092 --topic test # 再打开一个新的终端页面,在启动一个模拟的数据消费者 /export/server/kafka_2.12-2.4.1/bin/kafka-console-consumer.sh --bootstrap-server node1:9092 --topic test --from-beginning
大数据集群(Hadoop
生态)安装部署
前置要求
- 请确保完成了集群化环境前置准备章节的内容
- 即:
JDK
、SSH
免密、关闭防火墙、配置主机名映射等前置操作
Hadoop
集群角色
Hadoop
生态体系中的进程角色
Hadoop HDFS
的管理角色:Namenode
进程(仅需1个即可(管理者一个就够))Hadoop HDFS
的工作角色:Datanode
进程(需要多个(工人,越多越好,一个机器启动一个))Hadoop YARN
的管理角色:ResourceManager
进程(仅需1个即可(管理者一个就够))Hadoop YARN
的工作角色:NodeManager
进程(需要多个(工人,越多越好,一个机器启动一个))Hadoop
历史记录服务器角色:HistoryServer
进程(仅需1个即可(功能进程无需太多1个足够))Hadoop
代理服务器角色:WebProxyServer
进程(仅需1个即可(功能进程无需太多1个足够))Zookeeper
的进程:QuorumPeerMain
进程(仅需1个即可(Zookeeper
的工作者,越多越好))
角色和节点分配
角色分配如下
node1
:Namenode
、Datanode
、ResourceManager
、NodeManager
、HistoryServer
、WebProxyServer
、QuorumPeerMain
node2
:Datanode
、NodeManager
、QuorumPeerMain
node3
:Datanode、
NodeManager、
QuorumPeerMain`
安装
调整虚拟机内存
node1
设置4GB
或以上内存node2
和node3
设置2GB
或以上内存
Hadoop
集群部署
-
下载
Hadoop
安装包、解压、配置软链接1 2 3 4 5 6 7 8 9
# 1. 下载 wget http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz# 2. 解压 # 请确保目录/export/server存在 tar -zxvf hadoop-3.3.0.tar.gz -C /export/server/# 3. 构建软链接 ln -s /export/server/hadoop-3.3.0 /export/server/hadoop
-
修改配置文件:
hadoop-env.sh
cd
进入到/export/server/hadoop/etc/hadoop
文件夹中,配置文件都在这里- 修改
hadoop-env.sh
文件
- 此文件是配置一些
Hadoop
用到的环境变量 - 这些是临时变量,在
Hadoop
运行时有用 - 如果要永久生效,需要写到
/etc/profile
中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
# 在文件开头加入: # 配置Java安装路径 export JAVA_HOME=/export/server/jdk # 配置Hadoop安装路径 export HADOOP_HOME=/export/server/hadoop # Hadoop hdfs配置文件路径 export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop # Hadoop YARN配置文件路径 export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop # Hadoop YARN 日志文件夹 export YARN_LOG_DIR=$HADOOP_HOME/logs/yarn # Hadoop hdfs 日志文件夹 export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs# Hadoop的使用启动用户配置 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root export YARN_PROXYSERVER_USER=root
-
修改配置文件:
core-site.xml
- 清空文件,填入如下内容
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
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!--Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License. See accompanying LICENSE file. --><!-- Put site-specific property overrides in this file. --> <configuration><property><name>fs.defaultFS</name><value>hdfs://node1:8020</value><description></description></property><property><name>io.file.buffer.size</name><value>131072</value><description></description></property> </configuration>
- 清空文件,填入如下内容
-
配置:
hdfs-site.xml
文件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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!--Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License. See accompanying LICENSE file. --><!-- Put site-specific property overrides in this file. --><configuration><property><name>dfs.datanode.data.dir.perm</name><value>700</value></property><property><name>dfs.namenode.name.dir</name><value>/data/nn</value><description>Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently.</description></property><property><name>dfs.namenode.hosts</name><value>node1,node2,node3</value><description>List of permitted DataNodes.</description></property><property><name>dfs.blocksize</name><value>268435456</value><description></description></property><property><name>dfs.namenode.handler.count</name><value>100</value><description></description></property><property><name>dfs.datanode.data.dir</name><value>/data/dn</value></property> </configuration>
-
配置:
mapred-env.sh
文件1 2 3 4
# 在文件的开头加入如下环境变量设置 export JAVA_HOME=/export/server/jdk export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000 export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA
-
配置:
mapred-site.xml
文件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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!--Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License. See accompanying LICENSE file. --><!-- Put site-specific property overrides in this file. --><configuration><property><name>mapreduce.framework.name</name><value>yarn</value><description></description></property><property><name>mapreduce.jobhistory.address</name><value>node1:10020</value><description></description></property><property><name>mapreduce.jobhistory.webapp.address</name><value>node1:19888</value><description></description></property><property><name>mapreduce.jobhistory.intermediate-done-dir</name><value>/data/mr-history/tmp</value><description></description></property><property><name>mapreduce.jobhistory.done-dir</name><value>/data/mr-history/done</value><description></description></property> <property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> <property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> <property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> </configuration>
-
配置:
yarn-env.sh
文件1 2 3 4 5 6 7
# 在文件的开头加入如下环境变量设置 export JAVA_HOME=/export/server/jdk export HADOOP_HOME=/export/server/hadoop export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop export YARN_LOG_DIR=$HADOOP_HOME/logs/yarn export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs
-
配置:
yarn-site.xml
文件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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
<?xml version="1.0"?> <!--Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License. See accompanying LICENSE file. --> <configuration><!-- Site specific YARN configuration properties --> <property><name>yarn.log.server.url</name><value>http://node1:19888/jobhistory/logs</value><description></description> </property><property><name>yarn.web-proxy.address</name><value>node1:8089</value><description>proxy server hostname and port</description></property><property><name>yarn.log-aggregation-enable</name><value>true</value><description>Configuration to enable or disable log aggregation</description></property><property><name>yarn.nodemanager.remote-app-log-dir</name><value>/tmp/logs</value><description>Configuration to enable or disable log aggregation</description></property><!-- Site specific YARN configuration properties --><property><name>yarn.resourcemanager.hostname</name><value>node1</value><description></description></property><property><name>yarn.resourcemanager.scheduler.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value><description></description></property><property><name>yarn.nodemanager.local-dirs</name><value>/data/nm-local</value><description>Comma-separated list of paths on the local filesystem where intermediate data is written.</description></property><property><name>yarn.nodemanager.log-dirs</name><value>/data/nm-log</value><description>Comma-separated list of paths on the local filesystem where logs are written.</description></property><property><name>yarn.nodemanager.log.retain-seconds</name><value>10800</value><description>Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.</description></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value><description>Shuffle service that needs to be set for Map Reduce applications.</description></property> </configuration>
-
修改
workers
文件1 2 3
node1 node2 node3
-
【
node31操作】分发
hadoop`到其它机器1 2 3 4
cd /export/serverscp -r hadoop-3.3.0 node2:`pwd`/ scp -r hadoop-3.3.0 node2:`pwd`/
-
在
node2
、node3
创建软链接:ln -s /export/server/hadoop-3.3.0 /export/server/hadoop
-
创建所需目录
-
在node1执行
1 2 3 4
mkdir -p /data/nn mkdir -p /data/dn mkdir -p /data/nm-log mkdir -p /data/nm-local
-
在node2执行
1 2 3
mkdir -p /data/dn mkdir -p /data/nm-log mkdir -p /data/nm-local
-
在node3执行
1 2 3
mkdir -p /data/dn mkdir -p /data/nm-log mkdir -p /data/nm-local
-
-
配置环境变量
-
在
node1
、node2
、node3
修改/etc/profile
1 2
export HADOOP_HOME=/export/server/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
-
执行
source /etc/profile
生效
-
-
格式化
NameNode
,在node1
执行:hadoop namenode -format
-
启动
hadoop
的hdfs
集群,在node1
执行1 2 3 4
start-dfs.sh# 如需停止可以执行 stop-dfs.sh
-
启动
hadoop
的yarn
集群,在node1执行1 2 3 4
start-yarn.sh# 如需停止可以执行 stop-yarn.sh
-
启动历史服务器
1 2 3
mapred --daemon start historyserver# 如需停止将start更换为stop
-
启动
web
代理服务器1 2 3
yarn-daemon.sh start proxyserver# 如需停止将start更换为stop
验证Hadoop
集群运行情况
-
在
node1
、node2
、node3
上通过jps
验证进程是否都启动成功 -
验证
HDFS
,浏览器打开:http://node1:9870
-
创建文件
test.txt
,随意填入内容,并执行:1 2 3
hadoop fs -put test.txt /test.txthadoop fs -cat /test.txt
-
验证
YARN
,浏览器打开:http://node1:8088
-
执行
1 2 3 4 5 6 7 8 9 10
# 创建文件words.txt,填入如下内容 itheima itcast hadoop itheima hadoop hadoop itheima itcast# 将文件上传到HDFS中 hadoop fs -put words.txt /words.txt# 执行如下命令验证YARN是否正常 hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount -Dmapred.job.queue.name=root.root /words.txt /output
大数据NoSQL
数据库HBase
集群部署
-
HBase
依赖Zookeeper
、JDK
、Hadoop(HDFS)
,请确保已经完成安装- 集群化软件前置准备(
JDK
) Zookeeper
Hadoop
- 集群化软件前置准备(
-
【
node1
执行】下载HBase
安装包1 2 3 4 5 6 7 8
# 下载 wget http://archive.apache.org/dist/hbase/2.1.0/hbase-2.1.0-bin.tar.gz# 解压 tar -zxvf hbase-2.1.0-bin.tar.gz -C /export/server# 配置软链接 ln -s /export/server/hbase-2.1.0 /export/server/hbase
-
【
node1
执行】,修改配置文件,修改conf/hbase-env.sh
文件1 2 3 4 5 6 7
# 在28行配置JAVA_HOME export JAVA_HOME=/export/server/jdk # 在126行配置: # 意思表示,不使用HBase自带的Zookeeper,而是用独立Zookeeper export HBASE_MANAGES_ZK=false # 在任意行,比如26行,添加如下内容: export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
-
【
node1
执行】,修改配置文件,修改conf/hbase-site.xml
文件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
# 将文件的全部内容替换成如下内容: <configuration><!-- HBase数据在HDFS中的存放的路径 --><property><name>hbase.rootdir</name><value>hdfs://node1:8020/hbase</value></property><!-- Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面 --><property><name>hbase.cluster.distributed</name><value>true</value></property><!-- ZooKeeper的地址 --><property><name>hbase.zookeeper.quorum</name><value>node1,node2,node3</value></property><!-- ZooKeeper快照的存储位置 --><property><name>hbase.zookeeper.property.dataDir</name><value>/export/server/apache-zookeeper-3.6.0-bin/data</value></property><!-- V2.1版本,在分布式情况下, 设置为false --><property><name>hbase.unsafe.stream.capability.enforce</name><value>false</value></property> </configuration>
-
【
node1
执行】,修改配置文件,修改conf/regionservers
文件1 2 3
node1 node2 node3
-
【
node1
执行】,分发hbase
到其它机器1 2
scp -r /export/server/hbase-2.1.0 node2:/export/server/ scp -r /export/server/hbase-2.1.0 node3:/export/server/
-
【
node2
、node3
执行】,配置软链接:ln -s /export/server/hbase-2.1.0 /export/server/hbase
-
【
node1
、node2
、node3
执行】,配置环境变量1 2 3 4 5
# 配置在/etc/profile内,追加如下两行 export HBASE_HOME=/export/server/hbase export PATH=$HBASE_HOME/bin:$PATHsource /etc/profile
-
【
node1
执行】启动HBase
请确保:Hadoop HDFS、Zookeeper是已经启动
1 2 3 4
start-hbase.sh# 如需停止可使用 stop-hbase.sh
-
验证
HBase
,浏览器打开:http://node1:16010
-
简单测试使用
HBase
,node1
执行1 2 3 4 5 6 7 8 9 10 11 12 13
hbase shell# 创建表 create 'test', 'cf'# 插入数据 put 'test', 'rk001', 'cf:info', 'itheima'# 查询数据 get 'test', 'rk001'# 扫描表数据 scan 'test'
分布式内存计算Spark环境部署
本小节的操作基于:大数据集群(Hadoop生态)安装部署
环节中所构建的Hadoop
集群
-
【
node1
执行】下载并解压1 2 3 4 5 6 7
wget https://archive.apache.org/dist/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz# 解压 tar -zxvf spark-2.4.5-bin-hadoop2.7.tgz -C /export/server/# 软链接 ln -s /export/server/spark-2.4.5-bin-hadoop2.7 /export/server/spark
-
【
node1
执行】修改配置文件名称1 2 3
cd /export/server/spark/conf mv spark-env.sh.template spark-env.sh mv slaves.template slaves
-
【
node1
执行】修改配置文件,spark-env.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14
## 设置JAVA安装目录 JAVA_HOME=/export/server/jdk## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群 HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop YARN_CONF_DIR=/export/server/hadoop/etc/hadoop## 指定spark老大Master的IP和提交任务的通信端口 export SPARK_MASTER_HOST=node1 export SPARK_MASTER_PORT=7077SPARK_MASTER_WEBUI_PORT=8080 SPARK_WORKER_CORES=1 SPARK_WORKER_MEMORY=1g
-
【
node1
执行】修改配置文件,slaves
1 2 3
node1 node2 node3
-
【
node1
执行】分发1 2
scp -r spark-2.4.5-bin-hadoop2.7 node2:$PWD scp -r spark-2.4.5-bin-hadoop2.7 node3:$PWD
-
【
node2
、node3
执行】设置软链接:ln -s /export/server/spark-2.4.5-bin-hadoop2.7 /export/server/spark
-
【
node1
执行】启动Spark
集群1 2 3 4
/export/server/spark/sbin/start-all.sh# 如需停止,可以 /export/server/spark/sbin/stop-all.sh
-
打开
Spark
监控页面,浏览器打开:http://node1:8081
-
【
node1
执行】提交测试任务:/export/server/spark/bin/spark-submit --master spark://node1:7077 --class org.apache.spark.examples.SparkPi /export/server/spark/examples/jars/spark-examples_2.11-2.4.5.jar
分布式内存计算Flink
环境部署
本小节的操作基于:大数据集群(Hadoop生态)安装部署
环节中所构建的Hadoop集群
-
【
node1
操作】下载安装包1 2 3 4 5 6 7
wget https://archive.apache.org/dist/flink/flink-1.10.0/flink-1.10.0-bin-scala_2.11.tgz# 解压 tar -zxvf flink-1.10.0-bin-scala_2.11.tgz -C /export/server/# 软链接 ln -s /export/server/flink-1.10.0 /export/server/flink
-
【
node1
操作】修改配置文件conf/flink-conf.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# jobManager 的IP地址 jobmanager.rpc.address: node1 # JobManager 的端口号 jobmanager.rpc.port: 6123 # JobManager JVM heap 内存大小 jobmanager.heap.size: 1024m # TaskManager JVM heap 内存大小 taskmanager.heap.size: 1024m # 每个 TaskManager 提供的任务 slots 数量大小 taskmanager.numberOfTaskSlots: 2 #是否进行预分配内存,默认不进行预分配,这样在我们不使用flink集群时候不会占用集群资源 taskmanager.memory.preallocate: false # 程序默认并行计算的个数 parallelism.default: 1 #JobManager的Web界面的端口(默认:8081) jobmanager.web.port: 8081
-
【
node1
操作】,修改配置文件conf/slaves
1 2 3
node1 node2 node3
-
【
node1
操作】分发Flink
安装包到其它机器1 2 3
cd /export/server scp -r flink-1.10.0 node2:`pwd`/ scp -r flink-1.10.0 node3:`pwd`/
-
【
node2
、node3
操作】配置软链接:ln -s /export/server/flink-1.10.0 /export/server/flink
-
【
node1
操作】启动Flink
:/export/server/flink/bin/start-cluster.sh
-
验证
Flink
启动,浏览器打开:http://node1:8081
-
【
node1
执行】提交测试任务:/export/server/flink/bin/flink run /export/server/flink-1.10.0/examples/batch/WordCount.jar
运维监控Zabbix
部署
安装Zabbix Server
和Zabbix Agent
在开始安装Zabbix Server
和Agent
之前,首先需要完成准备工作。请确保按照指南在服务器上安装了 MySQL 数据库。
-
下载安装文件
在开始安装之前,你需要从 Zabbix 官方网站 下载适合你系统版本的 Zabbix 安装包。
-
安装
Zabbix
yum
库运行以下命令来添加 Zabbix 的 yum 库:
1 2
rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm yum clean all
-
安装
Zabbix Server
、前端、Agent
使用以下命令安装
Zabbix Server
、前端和Agent
:1 2 3
yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent # 如果只需要安装 Agent 的话 yum -y install zabbix-agent
初始化Mysql
数据库
在 MySQL 中操作来初始化数据库:
1 2 3 4 5 6 | # 登录 MySQL 数据库 mysql -uroot -pYourPassword mysql> create database zabbix character set utf8 collate utf8_bin; mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; # 或者: grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix'; mysql> quit; |
接着,测试在 Zabbix Server 服务器上是否能够远程登录 MySQL 数据库:
1 | zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix |
配置Zabbix Server
的数据库
编辑文件 /etc/zabbix/zabbix_server.conf
,设置以下参数:
1 2 | DBPassword=password DBHost=mysql-host-ip-or-hostname |
配置Zabbix
的PHP
前端
编辑文件 /etc/httpd/conf.d/zabbix.conf
,确保配置正确。之后,运行以下命令启动、重启服务,并设置开机自启:
1 2 | systemctl restart zabbix-server zabbix-agent httpd systemctl enable zabbix-server zabbix-agent httpd |
配置Zabbix
前端(WEB UI)
最后,在浏览器中访问 http://192.168.88.131/zabbix
进行 Zabbix 前端的配置和管理
相关文章:
「Linux」软件安装
MySQL5.7在CentOS安装 安装 配置yum仓库 更新密钥:rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022安装MySQL yum库:rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm使用yum安装MySQL:yum -y in…...
Ubuntu Desktop - Terminal 输出全部选中 + 复制
Ubuntu Desktop - Terminal 输出全部选中 复制 1. Terminal2. Terminal 最大化3. Edit -> Select All4. Copy & PasteReferences 1. Terminal 2. Terminal 最大化 3. Edit -> Select All 4. Copy & Paste Edit -> Copy or Shift Ctrl C Edit -> Paste…...
Java 三大并大特性-可见性介绍(结合代码、分析源码)
目录 编辑 一、可见性概念 1.1 概念 二、可见性问题由来 2.1 由来分析 三、可见性代码例子 3.1 代码 3.2 执行结果 四、Java 中保证可见性的手段 4.1 volatile 4.1.1 优化代码 4.1.2 测试结果 4.1.3 volatile原理分析 4.1.3.1 查看字节码 4.1.3.2 hotspot 层面…...
【漏洞复现】狮子鱼CMS某SQL注入漏洞01
Nx01 产品简介 狮子鱼CMS(Content Management System)是一种网站管理系统,它旨在帮助用户更轻松地创建和管理网站。该系统拥有用户友好的界面和丰富的功能,包括页面管理、博客、新闻、产品展示等。通过简单直观的管理界面…...
《Java 简易速速上手小册》第6章:Java 并发编程(2024 最新版)
文章目录 6.1 线程的创建和管理 - 召唤你的士兵6.1.1 基础知识6.1.2 重点案例:实现一个简单的计数器6.1.3 拓展案例 1:定时器线程6.1.4 拓展案例 2:使用 Executor 框架管理线程 6.2 同步机制 - 维持军队的秩序6.2.1 基础知识6.2.2 重点案例&a…...
C++初阶:容器(Containers)list常用接口详解
介绍完了vector类的相关内容后,接下来进入新的篇章,容器list介绍: 文章目录 1.list的初步介绍2.list的定义(constructor)3.list迭代器( iterator )4.string的三种遍历4.1迭代器4.2范围for循环 5…...
HARRYPOTTER: FAWKES
攻击机 192.168.223.128 目标机192.168.223.143 主机发现 nmap -sP 192.168.223.0/24 端口扫描 nmap -sV -p- -A 192.168.223.143 开启了21 22 80 2222 9898 五个端口,其中21端口可以匿名FTP登录,好像有点说法,百度搜索一下发现可以用anonymous登录…...
嵌入式Qt 第一个Qt项目
一.创建Qt项目 打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项 弹出New Project对话框,选择Qt Widgets Application 选择【Choose】按钮,弹出如下对话框 设置项目名称和路径,按照向导进行下一步 选…...
【OpenHarmony硬件操作】风扇与温湿度模块
文章目录 前言一、串行通信是什么二、IC2.1 IC是什么2.2 IC涉及到的线2.3 IC的时序三、风扇的操作3.1 关于 pcf85743.2 风扇的接口函数IO拓展芯片的定义初始化PCF8574初始化 IO拓展版的引脚属性开启和关闭风扇读状态四、温湿度传感器的使用4.1 初始化温湿度传感器</...
Vue3.4+element-plus2.5 + Vite 搭建教程整理
一、 Vue3Vite 项目搭建 说明: Vue3 最新版本已经基于Vite构建,关于Vite简介:Vite 下一代的前端工具链,前端开发与构建工具-CSDN博客 1.安装 并 创建Vue3 应用 npm create vuelatest 创建过程可以一路 NO 目前推荐使用 Vue R…...
STM32Cubmax stm32f103zet6 SPI通讯
一、基本概念 SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口。是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。 SPI 接口主要应用在 EEPROM, FLASH,实时时 钟, AD 转换器,还有数…...
每日OJ题_位运算⑤_力扣371. 两整数之和
目录 力扣371. 两整数之和 解析代码 力扣371. 两整数之和 371. 两整数之和 难度 简单 给你两个整数 a 和 b ,不使用 运算符 和 - ,计算并返回两整数之和。 示例 1: 输入:a 1, b 2 输出:3示例 2: …...
Mysql中索引优化和失效
什么是索引 要了解索引优化和索引失效的场景就要先了解什么是索引 索引是一种有序的存储结构,按照单个或者多个列的值进行排序,以提升搜索效率。 索引的类型 UNIQUE唯一索引 不可以出现相同的值,可以有NULL值。 INDEX普通索引 允许出现相同…...
使用Python+OpenCV2进行图片中的文字分割(支持竖版)
扣字和分割 把图片中的文字,识别出来,并将每个字的图片抠出来; import cv2 import numpy as npHIOG 50 VIOG 3 Position []水平投影 def getHProjection(image):hProjection np.zeros(image.shape,np.uint8)# 获取图像大小(h,w)image.sh…...
Qt中程序发布及常见问题
1、引言 当我们写好一个程序时通常需要发布给用户使用,那么在Qt中程序又是如何实现发布的呢,这里我就来浅谈一下qt中如何发布程序,以及发布程序时的常见问题。 2、发布过程 2.1、切换为release模式 当我们写qt程序时默认是debug模式&#x…...
C语言第二十三弹---指针(七)
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 指针 1、sizeof和strlen的对比 1.1、sizeof 1.2、strlen 1.3、sizeof 和 strlen的对比 2、数组和指针笔试题解析 2.1、⼀维数组 2.2、二维数组 总结 1、si…...
用HTML5 + JavaScript绘制花、树
用HTML5 JavaScript绘制花、树 <canvas>是一个可以使用脚本 (通常为JavaScript) 来绘制图形的 HTML 元素。 <canvas> 标签/元素只是图形容器,必须使用脚本来绘制图形。 HTML5 canvas 图形标签基础https://blog.csdn.net/cnds123/article/details/112…...
Science重磅_让大模型像婴儿一样学习语言
英文名称: Grounded language acquisition through the eyes and ears of a single child 中文名称: 通过一个孩子的眼睛和耳朵基于实践学习语言 文章: https://www.science.org/doi/10.1126/science.adi1374 代码: https://github.com/wkvong/multimodalbaby 作者: Wai Keen V…...
Java 数据结构篇-实现红黑树的核心方法
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 红黑树的说明 2.0 红黑树的特性 3.0 红黑树的成员变量及其构造方法 4.0 实现红黑树的核心方法 4.1 红黑树内部类的核心方法 (1)判断当前…...
【实战】一、Jest 前端自动化测试框架基础入门(中) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(二)
文章目录 一、Jest 前端自动化测试框架基础入门5.Jest 中的匹配器toBe 匹配器toEqual匹配器toBeNull匹配器toBeUndefined匹配器和toBeDefined匹配器toBeTruthy匹配器toBeFalsy匹配器数字相关的匹配器字符串相关的匹配器数组相关的匹配器异常情况的匹配器 6.Jest 命令行工具的使…...
【C语言 - 力扣 - 反转链表】
反转链表题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 题解1-迭代 假设链表为 1→2→3→∅,我们想要把它改成 ∅←1←2←3。 在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没…...
ctfshow-php特性(web102-web115)
目录 web102 web103 web104 web105 web106 web107 web108 web109 web110 web111 web112 web113 web114 web115 实践是检验真理的 要多多尝试 web102 <?php highlight_file(__FILE__); $v1$_POST[V1]; $v2$_GET[v2]; $v3$_GET[v3]; $v4is_numeric($v2)and is…...
python系统学习Day1
section1 python introduction 文中tips只做拓展,可跳过。 PartOne introduction 首先要对于python这门语言有一个宏观的认识,包括特点和应用场景。 特点分析: 优势 提供了完善的基础代码库,许多功能不必从零编写简单优雅 劣势 运…...
Idea里自定义封装数据警告解决 Spring Boot Configuration Annotation Processor not configured
我们自定对象封装指定数据,封装类上面一个红色警告,虽然不影响我们的执行,但是有强迫症看着不舒服, 去除方式: 在pom文件加上坐标刷新 <dependency><groupId>org.springframework.boot</groupId><…...
【流程图——讲解】
流程图介绍 流程图介绍 流程图介绍 流程图是一种图表,它展示了工作流程或过程中的步骤顺序,它通常由不同的符号表示,每个符号都代表一个步骤或过程中的一个元素,流程图非常有用,因为它们可以提供清晰、视觉化的过程表…...
「计算机网络」物理层
物理层的基本概念 物理层的作用:尽可能屏蔽掉不同传输媒体和通信手段的差异物理层规程:用于物理层的协议主要任务:确定与传输媒体的接口有关的一些特性 机械特性电器特性功能特性过程特性 数据通信的基础知识 数据通信系统的模型 划分为…...
ARM与X86架构的区别与联系
文章目录 1.什么是CPU2.复杂指令集和精简指令集3.ARM架构与X86架构的比较3.1.制造工艺3.2 64位计算3.3 异构计算3.4 功耗 4.ARM和X86的发展现状Reference 1.什么是CPU 中央处理单元(CPU)主要由运算器、控制器、寄存器三部分组成,从字面意思看…...
蓝桥杯每日一题------背包问题(二)
前言 本次讲解背包问题的一些延申问题,新的知识点主要涉及到二进制优化,单调队列优化DP,树形DP等。 多重背包 原始做法 多重背包的题意处在01背包和完全背包之间,因为对于每一个物品它规定了可选的个数,那么可以考虑…...
牛客错题整理——C语言(实时更新)
1.以下程序的运行结果是() #include <stdio.h> int main() { int sum, pad,pAd; sum pad 5; pAd sum, pAd, pad; printf("%d\n",pAd); }答案为7 由于赋值运算符的优先级高于逗号表达式,因此pAd sum, pAd, pad;等价于(…...
CIFAR-10数据集详析:使用卷积神经网络训练图像分类模型
1.数据集介绍 CIFAR-10 数据集由 10 个类的 60000 张 32x32 彩色图像组成,每类 6000 张图像。有 50000 张训练图像和 10000 张测试图像。 数据集分为5个训练批次和1个测试批次,每个批次有10000张图像。测试批次正好包含从每个类中随机选择的 1000 张图像…...
《傲剑狂刀》中的人物性格——龙吟风
在《傲剑狂刀》这款经典武侠题材的格斗游戏中,龙吟风作为一位具有传奇色彩的角色,其性格特征复杂且引人入胜。以下是对龙吟风这一角色的性格特点进行深度剖析: 一、孤高独立的剑客气质 龙吟风的名字本身就流露出一种独特的江湖气息,"吟风"象征着他的飘逸与淡泊名…...
KVM和JVM的虚拟化技术有何区别?
随着虚拟化技术的不断发展,KVM和JVM已成为两种主流的虚拟化技术。尽管它们都提供了虚拟化的解决方案,但它们在实现方式、功能和性能方面存在一些重要的差异。本文将深入探讨KVM和JVM的虚拟化技术之间的区别。 KVM(Kernel-based Virtual Mac…...
LeetCode力扣 面试经典150题 详细题解 (1~5) 持续更新中
目录 1.合并两个有序数组 2.移动元素 3.删除有序数组中的重复项 4.删除排序数组中的重复项 II 5.多数元素 暂时更新到这里,博主会持续更新的 1.合并两个有序数组 题目(难度:简单): 给你两个按 非递减顺序 排列的…...
如何解决利用cron定时任务自动更新SSL证书后Nginx重启问题
利用cron定时任务自动更新SSL证书后,用浏览器访问网站,获取到的证书仍然是之前的。原因在于没有对Nginx进行重启。 据说certbot更新完成证书后会自动重启Nginx,但显然经我检测不是这回事儿。 所以我们需要创建一bash脚本,然后定时调用这个脚…...
第一个 Angular 项目 - 静态页面
第一个 Angular 项目 - 静态页面 之前的笔记: [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 这是在学完了上面这三个内容后能够完成的项目,目前因为还没有学到数…...
网络协议与攻击模拟_17HTTPS 协议
HTTPShttpssl/tls 1、加密算法 2、PKI(公钥基础设施) 3、证书 4、部署HTTPS服务器 部署CA证书服务器 5、分析HTTPS流量 分析TLS的交互过程 一、HTTPS协议 在http的通道上增加了安全性,传输过程通过加密和身份认证来确保传输安全性 1、TLS …...
【linux系统体验】-ubuntu简易折腾
ubuntu 一、终端美化二、桌面美化2.1 插件安装2.2 主题和图标2.3 美化配置 三、常用命令 以后看不看不重要,咱就是想记点儿东西。一、终端美化 安装oh my posh,参考链接:Linux 终端美化 1、安装字体 oh my posh美化工具可以使用合适的字体&a…...
Android 判断通知是进度条通知
1.需求: 应用监听安卓系统中的通知,需要区分出带进度条的通知. 当使用NotificationCompat.Builder构建一个通知时,可以通过调用setProgress(max, progress, indeterminate)方法来添加一个进度条。这里的max参数表示最大进度值,progress表示当前进度值&a…...
学习数据结构和算法的第8天
顺序表的实现 顺序表 本质就是数组 概念及结构 顺序表是用一段物理地址连续的储存单元依次储存数据元素的线性结构,一般情况下采用数组储存,在数组上完成数据的增删。 顺序表就是数组,但是在数组的基础上,它还要求数据…...
JCIM | MD揭示PTP1B磷酸酶激活RtcB连接酶的机制
Background 内质网应激反应(UPR) 中的一个重要过程。UPR是由内质网中的三种跨膜传感器(IRE1、PERK和ATF6)控制的细胞应激反应,当内质网中的蛋白质折叠能力受到压力时,UPR通过减少蛋白质合成和增加未折叠或错…...
基于Java (spring-boot)的音乐管理系统
一、项目介绍 播放器的前端: 1.首页:点击歌单中的音乐播放列表中的歌曲进行播放,播放时跳转播放界面,并显示歌手信息,同时会匹配歌词,把相应的歌词显示在歌词面板中。 2.暂停:当歌曲正在播放时…...
在 MacOS M系列处理器上使用 Anaconda 开发 Oralce 的Python程序
在 MacOS M系列处理器上使用 Anaconda 开发 Oralce 的Python程序 因oracle官方驱动暂无 苹果 M 系列处理器版本,所以使用Arm的python解释器报驱动错误: cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "dlop…...
四、OpenAI之文本生成模型
文本生成模型 OpenAI的文本生成模型(也叫做生成预训练的转换器(Generative pre-trained transformers)或大语言模型)已经被训练成可以理解自然语言、代码和图片的模型。模型提供文本的输出作为输入的响应。对这些模型的输入内容也被称作“提示词”。设计提示词的本质是你如何对…...
CSS之flex布局
flex布局 CSS的Flex布局(Flexible Box Layout)是一种用于在页面上布置元素的高效方法,特别适合于响应式设计。Flex布局使得元素能够伸缩以适应可用空间,可以简化很多原本需要复杂CSS和HTML结构才能实现的布局设计。 flex布局包括…...
UnityShader——02三大主流编程语言
三大主流编程语言 Shader Language Shader language的发展方向是设计出在便携性方面可以与C/JAVA相比的高级语言,“赋予程序员灵活而方便的编程方式”,并“利用图形硬件的并行性,提高算法的效率” Shader language目前主要有 3 种语言&…...
Centos7安装nginx yum报错
Centos7安装nginx yum报错,yum源报错解决办法: 1、更新epel源后,出现yum报错 [roothacker117 ~]# yum install epel-release(安装成功) [roothacker117 ~]# yum install nginx(安装失败,提示如…...
【机组】基于FPGA的32位算术逻辑运算单元的设计(EP2C5扩充选配类)
🌈个人主页:Sarapines Programmer🔥 系列专栏:《机组 | 模块单元实验》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 一、实验目的 二、实验要求 …...
Asp .Net Core 系列:Asp .Net Core 集成 NLog
简介 NLog是一个基于.NET平台编写的日志记录类库,它可以在应用程序中添加跟踪调试代码,以便在开发、测试和生产环境中对程序进行监控和故障排除。NLog具有简单、灵活和易于配置的特点,支持在任何一种.NET语言中输出带有上下文的调试诊断信息…...
一个基于 .NET 7 + Vue.js 的前后端分离的通用后台管理系统框架 - DncZeus
前言 今天给大家推荐一个基于.NET 7 Vue.js(iview-admin) 的前后端分离的通用后台权限(页面访问、操作按钮控制)管理系统框架:DncZeus。 官方项目简介 DncZeus是一个基于 .NET 7 Vue.js 的前后端分离的通用后台管理系统框架。后端使用.NET 7 Entity Framework…...
更换商品图片日期JSON格式报错 - 序列化与反序列化日期格式设置
报错信息 msg: “服务端异常,请联系管理员JSON parse error: Cannot deserialize value of type java.util.Date from String “2023-11-13 13:13:35”: not a valid representation (error: Failed to parse Date value ‘2023-11-13 13:13:35’: Cannot parse da…...