云上配置Hadoop环境

Hadoop概述

Hadoop技术主要是由下面这三个组件组合而成的:
在这里插入图片描述
HDFS是一个典型的主从模式架构。

在这里插入图片描述

HDFS的基础架构

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

HDFS的集群搭建

一点准备工作

其实这一块没啥内容,就是将Hadoop官网下载下来的Hadoop的tar包上传到我们服务器上的文件目录下:
在这里插入图片描述
这里可以使用随便的文件传输工具,我使用与xshell配套的xftp:
在这里插入图片描述
使用下面的命令解压该tar包:
在这里插入图片描述
解压完成:
在这里插入图片描述
在这里插入图片描述
然后为该程序建立一个软链接:
在这里插入图片描述
在这里插入图片描述
进入hadoop程序的文件夹中进行浅浅地查看:
在这里插入图片描述
在Hadoop中,不同的文件夹具有特定的含义和功能。以下是一些Hadoop文件夹各个文件目录的含义:

bin目录:存放对Hadoop相关服务(如HDFS和YARN)进行操作的脚本。这些脚本提供了用户与Hadoop服务交互的接口,用于执行各种操作,如创建文件夹、设置权限等。

etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件。这些配置文件决定了Hadoop集群的行为和性能,包括HDFS和MapReduce的配置文件,如core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml等。

include:C语言相关的一些头文件。

lib:存放Linux系统的一些动态链接库(.so文件)。

libexec:存放配置Hadoop系统的脚本文件(.sh和.cmd)

sbin目录:管理员程序,(super-bin)存放启动或停止Hadoop相关服务的脚本。这些脚本允许用户方便地控制Hadoop服务的运行和停止。

license相关:存放许可证文件相关的文件。

share目录:存放Hadoop的依赖Java jar包和文档。这些jar包包含了Hadoop运行所需的各种库和模块,而文档则提供了有关Hadoop的使用和配置的详细信息。

至此,Hadoop的安装已经完毕,原料已经准备好了,准备做菜!

配置Hadoop中的HDFS文件集群

主要是进行一些文件的配置,配置下面四个文件:

1、workers:配置从节点(DataNode)有哪些
2、hadoop-env.sh:配置Hadoop的相关环境变量
3、core-site.xml:Hadoop核心配置文件
4、hdfs-site.xml:HDFS核心配置文件

这些文件均存在于$HADOOP_HOME/etc/hadoop文件夹中。

$HADOOP_HOME是我们后续要设置的环境变量,其指代Hadoop安装文件夹即/hadoop_server/hadoop。

配置环境变量主要有下面几个作用:

方便程序的运行:通过配置环境变量,我们可以指定程序运行时的路径。这样,程序在运行时就能快速找到所需的文件或资源,从而提高程序的运行效率。例如,配置了Java的环境变量后,我们就可以在任意位置执行Java程序,而不需要每次都指定Java的安装路径。

简化命令输入:环境变量可以存储一些常用的命令或路径,这样我们在命令行中就不需要每次都输入完整的命令或路径。通过配置环境变量,我们可以简化命令的输入,提高操作效率。

保持系统整洁:通过配置环境变量,我们可以将一些常用的工具或库的路径添加到系统中,而不需要将这些工具或库直接放在系统的根目录下。这样,可以保持系统的整洁和有序。

配置workers文件

进入配置文件目录:
在这里插入图片描述
使用vim编辑该文件目录下面的workers文件:
在这里插入图片描述
这里面一开始是默认的Hadoop配置,即默认的从节点localhost,因为俺只有一台服务器,因此这里就默认本地一台就可以:
在这里插入图片描述
如果你有很多台,那就可以把这行删了写上你所有从节点机器上的ip地址:
在这里插入图片描述

Ubuntu下jdk的安装

在进行下面的操作时这里有一个小插曲,我们还有一件事没做,就是配置JDK,因为Hadoop毕竟主要是用Java写的嘛,在Hadoop的文件目录中我刚刚也说了有很多相关Java的jar包需要运行,因此必须要jdk提供运行时环境,但是到这里的时候我发现我的系统重装过,Java环境没了,那这里就再补充一下安装jdk吧…

其实很简单,就一句命令即可:
在这里插入图片描述
我这里装的是open jdk,也就是开源版本的jdk,版本号为非常经典的Java 8,如果你要装高级一点的,要注意修改上面命令中的版本号。
在这里插入图片描述
出现上图就是安装完成了,Ubuntu系统会自动安装在下面的目录位置:
在这里插入图片描述

还有最重要的一步,配置环境变量:

打开~/.bashrc文件
在这里插入图片描述
打开后的样子是下面这样的,已经存在的是系统的环境变量:
在这里插入图片描述

找块空白的位置,输入下面的配置信息:
在这里插入图片描述
保存离开,然后重新source一下该文件以让其生效:
在这里插入图片描述
最后输入java -version命令查看是否成功配置:
在这里插入图片描述
输入javac查看是否成功:
在这里插入图片描述
至此,Java环境配置完毕。

配置hadoop-env.sh文件

同样是在该文件目录下,打开文件hadoop-env.sh:
在这里插入图片描述
这里主要做两件事情,配置Hadoop程序的位置、Java jdk的位置、hadoop配置文件位置以及hadoop运行日志文件的位置,这些是比较基本的配置:
在这里插入图片描述

保存离开。

配置core-site.xml文件

同样是在当前文件目录位置下,打开该文件:
在这里插入图片描述
填入我们节点的坐标信息:
在这里插入图片描述

上面配置文件的含义如下:

key:fs.defaultFS
含义:HDFS文件系统的网络通讯路径
值:hdfs://localhost:8020
– 协议为hdfs://
– namenode为localhost
– namenode通讯端口为8020

key:io.file.buffer.size
含义:io操作文件缓冲区大小
值:131072 bit

hdfs://localhost:8020为整个HDFS内部的通讯地址,应用协议为hdfs://(Hadoop内置协议)。

表明DataNode将和localhost的8020端口通讯,localhost是NameNode所在机器。

此配置固定了localhost必须启动NameNode进程。

配置hdfs-site.xml文件

同样是在当前文件目录下,打开该文件:
在这里插入图片描述

写入下面的内容:
在这里插入图片描述
在这里插入图片描述

写完后保存退出即可。

善后的一点内容

创建数据存储的目录

因为刚刚提过,hdfs文件系统的数据存放位置我们是配置了的,但是还并没有创建,因此我们要创建好些配置好的文件目录:

按照上面说的:
namenode数据存放在localhost的/data/nn目录下;
datanode数据存放在localhost的/data/dn目录下。

创建这两个文件目录:

在这里插入图片描述

上面命令中的-p命令选项意味着如果父目录不存在,那么 mkdir 会先创建它们。也就是说,如果 /data 这个目录不存在,mkdir -p /data/dn 会首先创建 /data,然后在 /data 下创建 nn。

配置一下Hadoop的环境变量

这是为了方便我们操作Hadoop,可以将Hadoop的一些脚本、程序配置到PATH中,方便后续的使用。

之前提过,在Hadoop文件夹中的bin、sbin两个文件夹内有许多的脚本和程序,现在来配置一下环境变量。

注意有两个位置都可以配置环境变量,一个是之前提过的~/.bashrc,另一个是/etc/profile,/etc/profile和~/.bashrc在Linux系统中都是配置文件,但二者区别如下:

级别与范围:

/etc/profile:这是一个系统级别的配置文件,用于设置全局的环境变量和执行系统范围的初始化命令。当登录到系统时,会首先读取/etc/profile文件来加载系统的环境变量。这个文件中的设置对所有用户都是有效的。
/.bashrc:这是一个用户级别的配置文件,位于当前用户的家目录中。它主要用于保存和加载不同用户的终端首选项和环境变量。每次用户登录时,在加载完/etc/profile后,会加载当前用户的/.bashrc文件。这个文件中的设置只对当前用户生效。

内容与用途:

/etc/profile:主要用于设置系统的环境信息,包括一些全局的环境变量。当系统首次启动或用户首次登录时,这个文件就会被执行。此外,/etc/profile还会从/etc/profile.d目录的配置文件中搜集shell的设置。
/.bashrc:主要用于定义用户的个性化设置,如别名(Aliases)、函数(functions)和环境变量等。用户可以在这里定义一些命令的别名,以简化命令的输入,提高操作效率。此外,每次修改/.bashrc后,使用source ~/.bashrc(或者. ~/.bashrc)就可以立刻加载修改后的设置,使之生效。

执行时机:

/etc/profile:在用户首次登录时执行。
~/.bashrc:每次新的bash shell被打开时执行,即每打开一个新的终端窗口,都会执行~/.bashrc。

总的来说,/etc/profile和~/.bashrc在Linux系统中都扮演着重要的角色,但它们的级别、范围、内容和执行时机都有所不同。/etc/profile更侧重于系统级别的全局设置,而~/.bashrc则更侧重于用户级别的个性化设置。

这里我依然选择在~./bashrc中配置,因为更贴合实际捏:

初始化并且启动hdfs文件服务器集群

使用如下命令:hadoop namenode -format 格式化那么namenode节点的系统环境:
在这里插入图片描述
看到上图的样子那么就证明初始化完毕。

接下来使用:start-dfs.sh 命令可以一键启动 hdfs 集群,使用 stop-dfs.sh ,命令可以一键停止 hdfs 集群,不过在启动过程中,你可能会遇到下面的错误情况:
在这里插入图片描述
办法:需要设置免密连接登录

首先运行

ssh localhost

如果还要输入密码的话,那就是你ssh没有配置好。这里要说一下的是ssh7.0之后就关闭了dsa的密码验证方式,如果你的秘钥是通过dsa生成的话,需要改用rsa来生成秘钥

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

再次运行

ssh localhost

如果不需要输入密码,说明ssh配置好了。接下来可以运行文件集群了。

输入start-dfs.sh启动hdfs集群:

在这里插入图片描述

上面这样就表示已经启动了捏,默认是后台启动的,如果要关掉需要使用上面说的另外一个命令嗷。

现在我们就可以访问所谓的Hadoop提供的一个webUI的界面:
在这里插入图片描述
我们可以在这个页面上找到我们之前在Shell中所看到的DataNode与NameNode:

在这里插入图片描述
可以看到因为我们只有一台服务器,因此只有一个数据节点。

##HDFS系统命令简介

在这里插入图片描述
如下面创建目录的命令:
在这里插入图片描述
查看命令:
在这里插入图片描述
上传命令:
在这里插入图片描述
等等,这里不再赘述,具体可以查阅别的文档。

补充一下关于SecondaryNameNode管理元数据的概念

在这里插入图片描述
在这里插入图片描述
edits记录每一次HDFS的操作,所以会逐渐变得越来越大。

所以,会存在多个edits文件确保不会有超大edits的存在以保证检索性能。

问题在于,当用户想要查看某文件内容如:/tmp/data/test.txt就需要在全部的edits中搜索(还需要按顺序从头到尾,避免后期改名或删除),效率非常低。

需要合并edits文件,得到最终的结果。
在这里插入图片描述
将全部的edits文件,合并为最终结果,即可得到一个FSImage文件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于元数据的合并,还记得HDFS集群有一个辅助角色:SecondaryNameNode吗?

没错,合并元数据的事情就是它干的。

SecondaryNameNode会通过http从NameNode拉取数据(edits和fsimage)。

然后合并完成后提供给NameNode使用。

Hadoop中的MapReduce和Yarn

MapReduce

分布式计算主要有两种:
在这里插入图片描述
在这里插入图片描述

对于我们要学习的MapReduce就是这种 分散->汇总 模式。

MapReduce 即Hadoop内提供的进行分布式计算的组件。

在这里插入图片描述

import org.apache.hadoop.conf.Configuration; // 导入Hadoop的配置类  
import org.apache.hadoop.fs.Path; // 导入Hadoop的文件系统路径类  
import org.apache.hadoop.io.IntWritable; // 导入Hadoop的可写整数类  
import org.apache.hadoop.io.Text; // 导入Hadoop的可写文本类  
import org.apache.hadoop.mapreduce.Job; // 导入Hadoop的MapReduce作业类  
import org.apache.hadoop.mapreduce.Mapper; // 导入Hadoop的Mapper类  
import org.apache.hadoop.mapreduce.Reducer; // 导入Hadoop的Reducer类  
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; // 导入Hadoop的文件输入格式类  
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; // 导入Hadoop的文件输出格式类  
  
import java.io.IOException; // 导入Java的IO异常类  
import java.util.StringTokenizer; // 导入Java的字符串分割器类  
  
// WordCount类定义MapReduce程序  
public class WordCount {  
  
  // TokenizerMapper类继承自Hadoop的Mapper类,用于处理输入数据并输出键值对  
  public static class TokenizerMapper  
       extends Mapper<Object, Text, Text, IntWritable>{  
  
    // 定义一个可写整数对象,其值为1,用于表示每个单词的计数初始值  
    private final static IntWritable one = new IntWritable(1);  
    // 定义一个可写文本对象,用于存储单词  
    private Text word = new Text();  
  
    // map方法处理输入数据,并输出键值对  
    public void map(Object key, Text value, Context context  
                    ) throws IOException, InterruptedException {  
      // 使用StringTokenizer类将输入的文本行分割成单词  
      StringTokenizer itr = new StringTokenizer(value.toString());  
      // 遍历分割得到的单词  
      while (itr.hasMoreTokens()) {  
        // 获取当前单词,并设置到word对象中  
        word.set(itr.nextToken());  
        // 输出键值对(单词,1)  
        context.write(word, one);  
      }  
    }  
  }  
  
  // IntSumReducer类继承自Hadoop的Reducer类,用于对具有相同键的值进行求和  
  public static class IntSumReducer  
       extends Reducer<Text,IntWritable,Text,IntWritable> {  
    // 定义一个可写整数对象,用于存储求和结果  
    private IntWritable result = new IntWritable();  
  
    // reduce方法接收键值对列表,并对具有相同键的值进行求和  
    public void reduce(Text key, Iterable<IntWritable> values,  
                       Context context  
                       ) throws IOException, InterruptedException {  
      int sum = 0;  
      // 遍历具有相同键的值列表  
      for (IntWritable val : values) {  
        // 累加每个值  
        sum += val.get();  
      }  
      // 将求和结果设置到result对象中  
      result.set(sum);  
      // 输出键值对(单词,求和结果)  
      context.write(key, result);  
    }  
  }  
  
  // main方法是程序的入口点  
  public static void main(String[] args) throws Exception {  
    // 创建Hadoop配置对象  
    Configuration conf = new Configuration();  
    // 创建MapReduce作业对象  
    Job job = Job.getInstance(conf, "word count");  
    // 设置作业的JAR包类  
    job.setJarByClass(WordCount.class);  
    // 设置Mapper类  
    job.setMapperClass(TokenizerMapper.class);  
    // 设置Combiner类(可选,用于在Mapper输出和Reducer输入之间减少数据传输量)  
    job.setCombinerClass(IntSumReducer.class);  
    // 设置Reducer类  
    job.setReducerClass(IntSumReducer.class);  
    // 设置输出键的类型  
    job.setOutputKeyClass(Text.class);  
    // 设置输出值的类型  
    job.setOutputValueClass(IntWritable.class);  
    // 设置输入文件路径  
    FileInputFormat.addInputPath(job, new Path(args[0]));  
    // 设置输出文件路径  
    FileOutputFormat.setOutputPath(job, new Path(args[1]));  
    // 提交作业并等待其完成,如果成功则返回0,否则返回非0值  
    System.exit(job.waitForCompletion(true) ? 0 : 1);  
  }  
}

这段代码包含了两个部分:Mapper和Reducer。Mapper将输入的文本分割成单词,并为每个单词输出一个键值对(单词,1)。Reducer接收这些键值对,并对具有相同键(即相同单词)的所有值进行求和,从而得到每个单词的频率。

Yarn

首先要注意的是,MapReduce是基于YARN运行的,即没有YARN”无法”运行MapReduce程序。

YARN 即Hadoop内提供的进行分布式资源调度的组件。

在这里插入图片描述

Yarn的架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
而历史服务器的功能很简单: 记录历史运行的程序的信息以及产生的日志并提供WEB UI站点供用户使用浏览器查看。

部署Yarn

首先要配置mapreduce:
在这里插入图片描述
主要就是两步,首先配置mapreduce的环境变量,即修改mapred-env.sh的文件在里面进行如下配置:
在这里插入图片描述
然后再配置一下mapred-site.xml文件,配置如下:

<?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 at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed 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 and
  limitations 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>localhost:10020</value>
    <description></description>
  </property>


  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>localhost: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:

编辑环境变量yarn-env.sh:在这里插入图片描述
配置yarn-site.xml文件:

<property>
<name>yarn.log.server.url</name>
<value>http://localhost:19888/jobhistory/logs</value>
<description/>
</property>
<property>
<name>yarn.web-proxy.address</name>
<value>localhost: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>localhost</value>
<description/>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
<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>

启动Yarn

配置完毕之后,就可以启动了,启动命令如下:
在这里插入图片描述
尝试一下:

在这里插入图片描述
可以发现此时多了几个Java的进程:
在这里插入图片描述
历史服务器的启动是单独的:
在这里插入图片描述
打开 http://ip:8088 即可看到YARN集群的监控页面(ResourceManager的WEB UI):
在这里插入图片描述

然后就可以正常使用Hadoop啦。

一点意外

腾讯云崩了…想给你们展示一下来着:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024考研调剂须知

----------------------------------------------------------------------------------------------------- 考研复试科研背景提升班 教你快速深入了解掌握考研复试面试中的常见问题以及注意事项&#xff0c;系统的教你如何在短期内快速提升自己的专业知识水平和编程以及英语…

Vue ElementUI el-input-number 改变控制按钮 icon 箭头为三角形

el-input-number 属性 controls-position 值为 right 时&#xff1b; <el-input-number v-model"num" controls-position"right" :min"1" :max"10"></el-input-number>原生效果 修改后效果 CSS 修改 .el-input-number…

点亮一颗 LED: 单片机 ch32v003 (RISC-V) 使用 rust 编写固件

首发日期 2024-04-09, 以下为原文内容: 使用 rust 编写单片机的程序 ? 很新, 但没问题. 使用 RISC-V CPU 的单片机 (比如 ch32v003) ? 也没问题. 同时使用 ? 哦嚯, 问题出现了 !! ch32v003 是一款使用 rv32ec 指令集的国产单片机, 很便宜 (某宝零卖只要 0.4 元一个, 在同档…

学习JavaEE的日子 Day33 File类,IO流

Day33 1.File类 File是文件和目录路径名的抽象表示 File类的对象可以表示文件&#xff1a;C:\Users\Desktop\hhy.txt File类的对象可以表示目录路径名&#xff1a;C:\Users\Desktop File只关注文件本身的信息&#xff08;文件名、是否可读、是否可写…&#xff09;&#xff0c…

基于SSM的电影网站(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的电影网站&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMv…

MySQL 全文检索

不是所有的数据表都支持全文检索 MySQL支持多种底层数据库引擎&#xff0c;但是并非所有的引擎支持全文检索 &#xff0c;目前最常用引擎是是MyISAM和InnoDB&#xff1b;前者支持全文检索&#xff0c;后者不支持。 booolean模式操作符 操作符含义必须有-必须不包含>包含对应…

Linux系统使用Docker部署Dashy导航页服务并实现公网环境访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起&#xff0c;形成自己的导航…

如何使用pgvector为RDS PostgreSQL构建专属ChatBot?

背景 越来越多的企业和个人希望能够利用LLM和生成式人工智能来构建专注于其特定领域的具备AI能力的产品。目前&#xff0c;大语言模型在处理通用问题方面表现较好&#xff0c;但由于训练语料和大模型的生成限制&#xff0c;对于专业知识和时效性方面存在一些局限。在信息时代&…

缓存穿透、缓存雪崩、缓存击穿的区别

缓存三兄弟&#xff08;穿透、雪崩、击穿&#xff09; 缓存穿透 定义 查询一个redis和数据库都不存在的值&#xff0c;数据库不存在则不会将数据写入缓存&#xff0c;所以这些请求每次都达到数据库。 解决办法是缓存空对象&#xff0c;如果数据库不存在则将空对象存入缓存&…

Python数据结构与算法——算法(贪心算法、动态规划

贪心算法 介绍&#xff1a;贪心算法又称贪婪算法&#xff0c;是指在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;它所做出的是在某种意义上的局部最优解。 贪心算法并不保证会得到最优解&#xff0c;但…

qemu源码解析(基于qemu9.0.0)

简介 QEMU是一个开源的虚拟化软件&#xff0c;它能够模拟各种硬件设备&#xff0c;支持多种虚拟化技术&#xff0c;如TCG、Xen、KVM等 TCG 是 QEMU 中的一个组件&#xff0c;它可以将高级语言编写的代码&#xff08;例如 C 代码&#xff09;转换为可在虚拟机中执行的低级代码…

InternlM2

第一次作业 基础作业 进阶作业 1. hugging face下载 2. 部署 首先&#xff0c;从github上git clone仓库 https://github.com/InternLM/InternLM-XComposer.git然后里面的指引安装环境

Day21_学点儿JavaEE__过滤器Filter(登录验证、编码处理)

1 为什么要使用过滤器 昨天已经总结过 当然&#xff0c;这仅仅是完成了一个简单的登录过程&#xff0c;即完成判断输入信息是否和数据库信息相匹配的操作&#xff0c;但是仍然可以通过直接输入地址的方式&#xff0c;在不登录的情况下访问相应的页面。而我们实际生活中的没登录…

ASUS华硕ROG幻16Air笔记本电脑GU605M原装出厂Win11系统工厂包下载,带有ASUSRecovery一键重置还原

适用型号&#xff1a;GU605MI、GU605MY、GU605MZ、GU605MV、GU605MU 链接&#xff1a;https://pan.baidu.com/s/1YBmZZbTKpIu883jYCS9KfA?pwd9jd4 提取码&#xff1a;9jd4 华硕原厂Windows11系统带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系统属性联机支持…

谷歌查问题

1&#xff0c;打开 it工具箱-里面啥都有 2&#xff0c;找到谷歌 3&#xff0c;访问gpt

跟TED演讲学英文:The next grand challenge for AI by Jim Fan

The next grand challenge for AI Link: https://www.ted.com/talks/jim_fan_the_next_grand_challenge_for_ai? Speaker: Jim Fan Date: October 2023 文章目录 The next grand challenge for AIIntroductionVocabularyTranscriptSummary后记 Introduction Researcher Jim…

深入理解MD5算法:原理、应用与安全

title: 深入理解MD5算法&#xff1a;原理、应用与安全 date: 2024/4/11 20:55:57 updated: 2024/4/11 20:55:57 tags: MD5算法数据安全哈希函数摘要算法安全漏洞SHA算法密码学 第一章&#xff1a;引言 导言 在当今数字化时代&#xff0c;数据安全和完整性变得至关重要。消息…

PHP婚恋小程序开发源码支持微信+公众号+APP

随着社会的发展和人们生活节奏的加快&#xff0c;传统的相亲方式已经不能满足现代人的需求。在此背景下&#xff0c;有人想到通过线上小程序的方式来满足更多的人进行相亲&#xff0c;所以在此情况下&#xff0c;婚恋相亲小程序由此出现。婚恋相亲小程序的功能有会员功能&#…

Postman接口测试工具

Postman接口测试工具 目录 Postman接口测试工具安装页面概述保存任务发送请求 安装 PostMan官方下载网址&#xff1a;https://www.getpostman.com/downloads/ 页面概述 保存任务 新建请求集合 命名为test 将刚刚的任务保存 选择新建的test集合 发送请求 新建窗口 request请…

解决源 “MySQL 8.0 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。

源 “MySQL 8.0 Community Server” 的 GPG 密钥已安装&#xff0c;但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。 失败的软件包是&#xff1a;mysql-community-server-8.0.31-1.el7.x86_64 GPG 密钥配置为&#xff1a;file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql…