Hadoop 分布式集群搭建

news2024/11/9 3:45:51

HDFS分布式集群搭建

  • 一、部署规划
    • 1.1 进程规划
    • 1.2 软件规划
    • 1.3 用户规划
    • 1.4 目录规划
  • 二、 搭建HDFS 分布式集群
    • 2.1 HDFS 集群配置
      • 2.1.1 下载安装 Hadoop
      • 2.1.2 修改 hadoop-env.sh 配置文件
      • 2.1.3 修改 core-site.xml 配置文件
      • 2.1.4 修改 hdfs-site.xml 配置文件
      • 2.1.5 修改 slaves 配置文件
      • 2.1.6 配置文件同步集群其他节点
    • 2.2 启动 zookeeper 集群
    • 2.3 启动 Journalnode 集群
    • 2.4 格式化主节点 NameNode
    • 2.5 备用 NameNode 同步主节点元数据
    • 2.6 关闭 Journalnode 集群
    • 2.7 一键启动 HDFS 集群
    • 2.8 HDFS 集群测试
  • 三、部署 YARN 集群搭建
    • 3.1 修改 mapred-site.xml 配置
    • 3.2 修改 yarn-site.xml 配置
    • 3.3 向所有节点同步 YARN 配置文件
    • 3.4 启动 YARN 集群
      • 3.4.1 启动 YARN 集群
      • 3.4.2 启动备用 ResourceManager
    • 3.5 YARN 集群测试
      • 3.5.1 shell 命令查看RM状态
      • 3.5.2 Web 界面查看 YARN 集群
      • 3.5.3 测试 YARN 集群是否可以正常运行 MapReduce程序

在此之前已经搭建 ZooKeeper 集群,可以参考《部署伪分布式 Hadoop集群》

一、部署规划

1.1 进程规划

守护进程hadoop1/192.168.220.151hadoop2/192.168.220.152hadoop3/192.168.220.153
NameNode
DataNode
ResourceManager
NodeManager
Journalnode
Zookeeper

1.2 软件规划

软件版本
JDKJDK 1.8
CentOSCentOS 7
ZookeeperApache Zookeeper 3.8.4
HadoopApache Hadoop 2.10.2

1.3 用户规划

节点名称用户组用户
hadoop1rootroot
hadoop1rootroot
hadoop1rootroot

备注 此处的用户组和用户 也最好自己创建用户,如 hadoop

1.4 目录规划

名称路径
所有软件目录/usr/local/
所有软件目录/usr/local/data

二、 搭建HDFS 分布式集群

2.1 HDFS 集群配置

2.1.1 下载安装 Hadoop

可以参考文章《部署伪分布式 Hadoop集群》:2.2 章节部分

2.1.2 修改 hadoop-env.sh 配置文件

hadoop-env.sh 文件主要配置跟 hadoop 环境相关的变量,这里主要修改 JAVA_HOME的安装目录,具体操作如下所示。

[root@hadoop1 hadoop]# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh 
# 修改jdk 的安装目录
export JAVA_HOME=/usr/local/jdk

在这里插入图片描述

2.1.3 修改 core-site.xml 配置文件

core-site.xml文件主要配置 Hadoop 的公有属性,具体需要配置的每个属性如下所示。

[root@hadoop1 hadoop]# vim /usr/local/hadoop/etc/hadoop/core-site.xml 

修改内容如下:

<configuration>
<!--这里的值指的是默认的 HDFS 路径,取名为 mycluster-->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs:mycluster</value>
</property>
<!--hadoop 的临时目录,目录需要我们自己创建-->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/data/tmp</value>
</property>
<!--配置 Zookeeper 管理 HDFS-->
<property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
</configuration>

2.1.4 修改 hdfs-site.xml 配置文件

hdfs-site.xml 文件主要配置跟 HDFS 相关的属性,具体需要配置的每个属性如下所示。

[root@hadoop1 local]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml 

修改内容如下:

<configuration>
	<property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
		<!--数据块副本数为3-->
	<property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>
	<property>
                <name>dfs.permissions.enabled</name>
                <value>false</value>
        </property>
		<!--权限默认配置为false-->
	<property>
                <name>dfs.nameservices</name>
                <value>mycluster</value>
        </property>
		<!--命名空间,它的值与fs.defaultFS的值要对应,namenode高可用之后有两个namenode,mycluster是对外提供的统一入口-->
	<property>
                <name>dfs.ha.namenodes.mycluster</name>
                <value>nn1,nn2</value>
        </property>
		<!-- 指定 nameService 是 mycluster时的nameNode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可-->
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn1</name>
                <value>hadoop1:9000</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn1</name>
                <value>hadoop1:50070</value>
        </property>
	<property>
                <name>dfs.namenode.rpc-address.mycluster.nn2</name>
                <value>hadoop2:9000</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn2</name>
                <value>hadoop2:50070</value>
        </property>
	<property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
		<!--启动故障自动恢复-->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster</value>
        </property>
		<!--指定NameNode的元数据在JournalNode上的存放位置-->
	<property>
                <name>dfs.client.failover.proxy.provider.mycluster</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
		<!--指定 mycluster 出故障时,哪个实现类负责执行故障切换-->
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/usr/local/data/journaldata/jn</value>
        </property>
		<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
	<property>
                <name>dfs.ha.fencing.methods</name>
                <value>shell(/bin/true)</value>
        </property>
		<!-- 配置隔离机制,shell通过ssh连接active namenode节点,杀掉进程-->
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/root/.ssh/id_rsa</value>
        </property>
		<!-- 为了实现SSH登录杀掉进程,还需要配置免密码登录的SSH密匙信息 -->
	<property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>10000</value>
        </property>
        <property>
                <name>dfs.namenode.handler.count</name>
                <value>100</value>
        </property>
</configuration>

2.1.5 修改 slaves 配置文件

[root@hadoop1 local]# vim /usr/local/hadoop/etc/hadoop/slaves 

修改如下内容:

hadoop1
hadoop2
hadoop3

在这里插入图片描述

2.1.6 配置文件同步集群其他节点

[root@hadoop1 local]# deploy.sh usr/local/hadoop-2.10.2 /usr/local/ slave

备注:deploy.sh 是工具脚本,支持将 usr/local/hadoop-2.10.2 文件推送到 slave组当中的 /usr/local 目录下

2.2 启动 zookeeper 集群

[root@hadoop1 local]# runRemoteCmd.sh "/usr/local/zookeeper/bin/zkServer.sh start" all
[root@hadoop1 local]# runRemoteCmd.sh "/usr/local/zookeeper/bin/zkServer.sh status" all

备注:runRemoteCmd.sh 是工具脚本,支持按照分组执行脚本,上面脚本表示在所有服务器执行脚本:/usr/local/zookeeper/bin/zkServer.sh start

在这里插入图片描述

2.3 启动 Journalnode 集群

在集群所有节点分布启动 Journalnode 服务,具体操作如下所示。

[root@hadoop1 local]# runRemoteCmd.sh "/usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode" all
[root@hadoop1 local]# jps

在这里插入图片描述

2.4 格式化主节点 NameNode

在 hadoop1 节点(NameNode 主节点)上,使用如下命令对 NameNode 进行格式化。

[root@hadoop1 hadoop]# /usr/local/hadoop/bin/hdfs namenode -format  // NameNode 格式化
[root@hadoop1 hadoop]# /usr/local/hadoop/bin/hdfs zkfc -formatZK  // 格式化高可用
[root@hadoop1 hadoop]# /usr/local/hadoop/bin/hdfs namenode  // 启动 namenode 节点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5 备用 NameNode 同步主节点元数据

在 hadoop1 节点启动 NameNode 服务的同时,需要在 hadoop2 节点(NameNode 备用节点)上执行如下命令同步主节点的元数据

[root@hadoop2 local]# /usr/local/hadoop/bin/hdfs namenode -bootstrapStandby

在这里插入图片描述

2.6 关闭 Journalnode 集群

hadoop2节点同步完主节点元数据之后,紧接着在hadoop1节点上,按下(Ctrl+C)组合键来结束 NameNode 进程,然后关闭所有节点上面的Jounalnode,进程,具体操作如下所示。

[root@hadoop1 local]# runRemoteCmd.sh "/usr/local/hadoop/sbin/hadoop-daemon.sh stop journalnode" all

在这里插入图片描述

2.7 一键启动 HDFS 集群

如果上面操作没有问题,在 hadoop1 节点上,可以使用脚本一键启动 HDFS 集群所有相关进程

[root@hadoop1 local]# /usr/local/hadoop/sbin/start-dfs.sh 

在这里插入图片描述

2.8 HDFS 集群测试

在浏览器中输入网址 http://hadoop1:50070,通过 Web 界面査看 hadoop1 节点的NameNode 的状态,结果如图 6-2所示。该节点的状态为 active,表示 HDFS 可以通过 hadoop1节点的 NameNode 对外提供服务。

在这里插入图片描述

三、部署 YARN 集群搭建

3.1 修改 mapred-site.xml 配置

mapred-site.xml 文件主要配置跟 MapReduce 相关的属性,这里主要将 MapReduce 的运行环境指定为 YARN ,核心配置如下所示

[root@hadoop1 hadoop]# vim /usr/local/hadoop/etc/hadoop/mapred-site.xml

添加如下内容:

<!--MapReduce以yarn模式运行-->
<configuration>
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
</configuration>

在这里插入图片描述

3.2 修改 yarn-site.xml 配置

yarn-site.xml 文件主要配置跟 YARN 相关的属性,核心配置如下所示。

[root@hadoop1 hadoop]# vim /usr/local/hadoop/etc/hadoop/mapred-site.xml

添加如下内容:

<configuration>
<property>
	<name>yarn.resourcemanager.connect.retry-interval.ms</name>
	<value>2000</value>
</property>
<property>
	<name>yarn.resourcemanager.ha.enabled</name>
	<value>true</value>
</property>
<!--打开高可用-->
<property>
	<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
	<value>true</value>
</property>
<!--启动故障自动恢复-->
<property>
	<name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
	<value>true</value>
</property>
<!--rm启动内置选举active-->
<property>
	<name>yarn.resourcemanager.cluster-id</name>
	<value>yarn-rm-cluster</value>
</property>
<!--给yarn cluster 取个名字yarn-rm-cluster-->
<property>
	<name>yarn.resourcemanager.ha.rm-ids</name>
	<value>rm1,rm2</value>
</property>
<!--ResourceManager高可用 rm1,rm2-->
<property>
	<name>yarn.resourcemanager.hostname.rm1</name>
	<value>hadoop1</value>
</property>
<property>
	<name>yarn.resourcemanager.hostname.rm2</name>
	<value>hadoop2</value>
</property>
<property>
	<name>yarn.resourcemanager.recovery.enabled</name>
	<value>true</value>
</property>
<!--启用resourcemanager 自动恢复-->
<property>
	<name>hadoop.zk.address</name>
	<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
<!--配置Zookeeper地址作为状态存储和leader选举-->
<property>
	<name>yarn.resourcemanager.address.rm1</name>
	<value>hadoop1:8032</value>
</property>
<!--rm1端口号-->
<property>
	<name>yarn.resourcemanager.scheduler.address.rm1</name>
	<value>hadoop1:8034</value>
</property>
<!-- rm1调度器的端口号-->
<property>
	<name>yarn.resourcemanager.webapp.address.rm1</name>
	<value>hadoop1:8088</value>
</property>
<!-- rm1 webapp端口号-->
<property>
	<name>yarn.resourcemanager.address.rm2</name>
	<value>hadoop2:8032</value>
</property>
<property>
	<name>yarn.resourcemanager.scheduler.address.rm2</name>
	<value>hadoop2:8034</value>
</property>
<property>
	<name>yarn.resourcemanager.webapp.address.rm2</name>
	<value>hadoop2:8088</value>
</property>
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
<property>
	<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
	<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!--执行MapReduce需要配置的shuffle过程-->
<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
</property>
<property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>4</value>
</property>
</configuration>

3.3 向所有节点同步 YARN 配置文件

在 hadoop1 节点上修改完 YARN 相关配置之后,将修改的配置文件远程复制到 hadoop2节点和 hadoop3 节点,具体操作如下所示。

[root@hadoop1 hadoop]# deploy.sh /usr/local/hadoop/etc/hadoop/mapred-site.xml /usr/local/hadoop/etc/hadoop/ slave
[root@hadoop1 hadoop]# deploy.sh /usr/local/hadoop/etc/hadoop/yarn-site.xml /usr/local/hadoop/etc/hadoop/ slave

在这里插入图片描述

3.4 启动 YARN 集群

YARN HA 的实现依赖于 Zookeeper,所以需要优先启动 Zookeeper 集群。因为前面操作已经启动 Zookeeper 集群,所以该步骤可以跳过。

3.4.1 启动 YARN 集群

在 hadoop1 节点上,使用脚本一键启动 YARN 集群,具体操作如下所示:

[root@hadoop1 hadoop]# /usr/local/hadoop/sbin/start-yarn.sh 

在这里插入图片描述

3.4.2 启动备用 ResourceManager

因为 start-yarn.sh 脚本不包含启动备用 ResourceManager 进程的命令,所以需要在hadoop2 节点上单独启动 ResourceManaggr,具体操作如下所示。

[root@hadoop2 hadoop]# /usr/local/hadoop/sbin/yarn-daemon.sh start resourcemanager

在这里插入图片描述

3.5 YARN 集群测试

3.5.1 shell 命令查看RM状态

如果一个 ResourceManagsr 为 active 状态,另外一个说明 YARN 集群构建成功。
ResourceManager为standby 状态,

[root@hadoop2 hadoop]# /usr/local/hadoop/bin/yarn rmadmin -getServiceState rm1
active
[root@hadoop2 hadoop]# /usr/local/hadoop/bin/yarn rmadmin -getServiceState rm2
standby

在这里插入图片描述

3.5.2 Web 界面查看 YARN 集群

在浏览器中输入网址 http://hadoop1:8088(或者 http://hadoop2:8088),通过web 界面查看 YARN 集群消息,结果如果所示:
在这里插入图片描述

3.5.3 测试 YARN 集群是否可以正常运行 MapReduce程序

为了测试 YARN 集群是否可以正常运行 MapReduce程序,我们以 Hadoop 自带的wordcount示例来进行演示,具体操作如图 6-8所示。

[root@hadoop1 hadoop]# /usr/local/hadoop/bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.2.jar wordcount /test/words.log /test/out

在这里插入图片描述
在这里插入图片描述
至此 HADOOP的搭建基本完成,后续介绍 HADOOP 集群的运维管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2072579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣刷题(1)

两数之和 两数之和-力扣 思路&#xff1a; 动态开辟一个数组&#xff0c;用来存放下标&#xff1b;两个for循环嵌套来判断&#xff0c;数组中的两个数相加是否与target相等若相等&#xff0c;则将 * returnSize赋值为2&#xff0c;表示数组中两个数&#xff0c;并将arr数组…

数学建模之数据分析【九】:数据清理总结

文章目录 一、什么是数据清理二、为什么数据清理很重要三、执行数据清洁的步骤四、如何执行数据清理五、数据清理的Python库实现5.1 数据检查与探索5.2 使用df.info()检查数据信息5.3 检查分类和数字列5.4 检查分类列中唯一值的总数5.5 执行数据清理的步骤5.5.1 删除所有上述不…

真的爽到了!Coze的黑神话 “循环“ 闪亮登场,啥都能循环,让你一次通关!

心心念念了很久&#xff0c;Coze工作流终于支持循环操作啦&#xff0c;泪奔~~ 看&#xff0c;就在工作流节点的“选择器”和“意图识别”当中偷偷摸摸地多了一个“循环” 这玩意可比批处理强太多了&#xff0c;批处理只能在当前节点循环&#xff0c;做一些简单的循环任务还不错…

【日记】狗尾巴草与暗恋(1519 字)

写在前面 消极内容注意 正文 好想吃火龙果。 下周会变得异常艰难。因为事情已经垒到天上去了&#xff0c;还要来检查。 上午&#xff0c;同事送了一点水果&#xff0c;我从来没见过。问了一下别人&#xff0c;有的说是灯笼果&#xff0c;有的说是菇凉果、姑娘果。搜了一下&am…

深入理解Elasticsearch:让搜索性能飞起来!

Elasticsearch 概述 Elasticsearch是一个基于lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。 ELK 技术栈是Elasticsearch、Logstash、Kibana三大开元框架首字母大写简称。 而Elasticsearch 是一个开源的高扩展的分布式全文搜索引擎&#xff0c; 是整个 ELK技术…

polarctf靶场[WEB]Don‘t touch me、机器人、uploader、扫扫看

目录 [web]Dont touch me 考点&#xff1a;查看源代码、前端 [web]机器人 考点&#xff1a;robot协议 工具&#xff1a;御剑&#xff0c;kali dirsearch [web]覆盖 考点&#xff1a;parse_str覆盖 [web]扫扫看 考点&#xff1a;目录扫描 工具&#xff1a;御剑、kali d…

【冒泡排序算法】输入n个数进行排序

要求&#xff1a;输入n个数进行排序 实现&#xff1a;使用冒泡排序算法&#xff0c;使用C语言实现 冒泡排序的基本原理&#xff1a; 比较相邻元素&#xff1a;从数组的开始位置&#xff0c;比较每对相邻的元素。如果前一个元素大于后一个元素&#xff0c;则交换它们。重复过…

数组基本知识2

目录 前言 二维数组 使用原因 定义二维数组 访问数组元素 实例 前言 上一篇&#xff0c;我简单的复习了一维数组&#xff0c;本篇讲述二维数组的基本知识&#xff0c;帮助大家预习和复习。 二维数组 使用原因 本质原因&#xff1a;一维数组&#xff0c;已经无法满足解决…

OSPF路由配置--单区域

目录 因为OSPF有很多重要的特殊区域和内容,所以划分为多篇博客来配置 一. 实验拓扑图 二. 实验配置 三. 实验验证: 因为OSPF有很多重要的特殊区域和内容,所以划分为多篇博客来配置 不理解OSPF路由动态协议的可以回顾一下OSPF详解&#xff0c;下这一系列的实验都不再做解…

SpringBoot集成kafka-消息转发@sendTo()注解

SpringBoot集成kafka-消息转发sendTo 1、消费者2、生产者3、实体类对象4、JSON工具类5、配置文件application.yml6、测试类7、测试 1、消费者 启动消费者进行消息监听&#xff0c;消费者A监听到生产者发送的消息使用sendTo()注解将消息转发给消费者B package com.power.consu…

在树莓派5上使用pytroch进行模型训练—全流程笔记

在树莓派上运行pytroch模型&#x1f680; 在完成了树莓派的一系列基础配置学习之后&#xff0c;按照规划&#xff0c;下一步要做的就是在树莓派上安装一个pytorch&#xff0c;尝试运行一下深度学习的模型&#xff0c;如果可以实现且准速度有一定保证的话&#xff0c;就可以作为…

代码随想录算法训练营第50天|卡码网 98. 所有可达路径

1.卡码网 98. 所有可达路径 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1170 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0098.所有可达路径.html#总结 1.图的存储 本题我们使用邻接表 或者 邻接矩阵都可以&#xff0c;因为后台数据…

掌握路演艺术:创新大赛路演稿撰写指南

如何在创新大赛中脱颖而出&#xff1f;一份精心准备的路演稿是关键 前言开场白&#xff1a;抓住注意力的第一步项目概述&#xff1a;清晰传达核心价值市场分析&#xff1a;展示项目的市场潜力商业模式与盈利计划&#xff1a;务实的策略团队介绍&#xff1a;展现团队的实力与文化…

vue3的nginx配置文件配置(nginx只配置前端vue3的nginx.conf文件)

1、本地的访问网址的链接 http://localhost:5173/official-website/ 2、程序的配置 3、nginx.conf配置 #user nobody; worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/octet-stream;log_format main…

全网最细springboot学习笔记—SpringBoot配置SSL(https)

文章主要内容大致为&#xff1a; SpringBoot配置SSL&#xff08;https&#xff09; SpringBoot全局异常处理 SpringBoot 404页面处理 接下来让我们一起探讨三大框架之一的springboot框架&#xff1a; SpringBoot配置SSL&#xff08;https&#xff09; SpringBoot可以通过在appl…

如何使用ssm实现基于java的电脑硬件库存管理系统

TOC ssm145基于java的电脑硬件库存管理系统jsp 第1章 绪论 1.1 课题背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。所…

第四十六篇,PID心法解读

猛回头&#xff0c;有近半年的时光没输出了&#xff0c;看着昨天加班调的PID数据&#xff0c;灵光闪现了一下&#xff0c;赶紧记录。 参数整定找最佳&#xff0c;从小到大顺序查   先是比例后积分&#xff0c;最后再把微分加 曲线振荡很频繁&#xff0c;比例度盘要放大   曲…

基于Open Cv的数字图像手势识别系统,Python编程实现,可以识别以下6种手势,含代码和报告

该项目的目标是设计并实现一个能够实时识别特定手势的系统。系统将使用OpenCV库来捕获视频流&#xff0c;并通过图像处理技术来识别特定的手势。具体来说&#xff0c;系统将识别以下六种手势&#xff1a; 挥手 - 手掌水平移动。握拳 - 手指全部弯曲成拳头。坐起 - 模拟做仰卧起…

sft是mean-seeking rl是mode-seeking

原文链接 KL散度是D(P||Q)&#xff0c;P和Q谁在前谁在后是有讲究的&#xff0c;P在前&#xff0c;就从P采样。 D K L ( P ∣ ∣ Q ) E x − p ( x ) ( l o g ( P ( x ) / Q ( x ) ) ) D_{KL}(P||Q)E_{x-p(x)}(log(P(x)/Q(x))) DKL​(P∣∣Q)Ex−p(x)​(log(P(x)/Q(x)))想象一…

关于Java中@Component的使用中出现@Autowired为NULL的问题

目录&#xff1a; 关于Java中Component的使用中出现Autowired为NULL的问题解决过程 关于Java中Component的使用中出现Autowired为NULL的问题 解决过程 我在写一个项目中使用Component配置了一个RedisCompent在这里插入代码片类我将在AccountController和 UserinfoController中…