当前位置: 首页 > news >正文

【大数据技术基础】 课程 第3章 Hadoop的安装和使用 大数据基础编程、实验和案例教程(第2版)

第3章 Hadoop的安装和使用

3.1 Hadoop简介

        Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构。Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中。Hadoop的核心是分布式文件系统(Hadoop Distributed File System,HDFS)和MapReduce。

        Apache Hadoop版本分为三代,分别是Hadoop 1.0、Hadoop 2.0和Hadoop3.0。

        除了免费开源的Apache Hadoop以外,还有一些商业公司推出Hadoop的发行版。2008年,Cloudera成为第一个Hadoop商业化公司,并在2009年推出第一个Hadoop发行版。此后,很多大公司也加入了做Hadoop产品化的行列,比如MapR、Hortonworks、星环等。2018年10月,Cloudera和Hortonworks宣布合并。一般而言,商业化公司推出的Hadoop发行版也是以Apache Hadoop为基础,但是前者比后者具有更好的易用性、更多的功能以及更高的性能。

3.2 安装Hadoop前的准备工作

3.2.1 创建hadoop用户

本教程全部采用hadoop用户登录Linux系统,并为hadoop用户增加了管理员权限。在前面的“第2章 Linux系统的安装和使用”内容中,已经介绍了hadoop用户创建和增加权限的方法,请一定按照该方法创建hadoop用户,并且使用hadoop用户登录Linux系统,然后再开始下面的学习内容。本教程所有学习内容,都是采用hadoop用户登录Linux系统。

3.2.2 更新APT

本教程第2章介绍了APT软件作用和更新方法,为了确保Hadoop安装过程顺利进行,建议按照第2章介绍的方法,用hadoop用户登录Linux系统后打开一个终端,执行下面命令更新APT软件:

sudo apt-get update

3.2.3 安装SSH

Ubuntu默认已安装了SSH客户端,因此,这里还需要安装SSH服务端,请在Linux的终端中执行以下命令:

sudo apt-get install openssh-server

安装后,可以使用如下命令登录本机:

ssh localhost

执行该命令后会出现如图3-1所示的提示信息(SSH首次登录提示),输入“yes”,然后按提示输入密码hadoop,就登录到本机了。

首先,请输入命令“exit”退出刚才的SSH,就回到了原先的终端窗口;然后,可以利用ssh-keygen生成密钥,并将密钥加入到授权中,命令如下:

cd ~/.ssh/        # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa    # 会有提示,都按回车即可
cat ./id_rsa.pub >> ./authorized_keys  # 加入授权

此时,再执行ssh localhost命令,无需输入密码就可以直接登录了,如图所示。

3.2.4 安装Java环境

执行如下命令创建“/usr/lib/jvm”目录用来存放JDK文件:

cd /usr/lib
sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件

执行如下命令对安装文件进行解压缩:

cd ~ #进入hadoop用户的主目录
cd Downloads
sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm

下面继续执行如下命令,设置环境变量:

vim ~/.bashrc

上面命令使用vim编辑器打开了hadoop这个用户的环境变量配置文件,请在这个文件的开头位置,添加如下几行内容:

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

保存.bashrc文件并退出vim编辑器。然后,继续执行如下命令让.bashrc文件的配置立即生效:

source ~/.bashrc

这时,可以使用如下命令查看是否安装成功

java -version

 如果能够在屏幕上返回如下信息,则说明安装成功:

java version "1.8.0_162"

Java(TM) SE Runtime Environment (build 1.8.0_162-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

3.3 安装Hadoop

Hadoop包括三种安装模式:

单机模式:只在一台机器上运行,存储是采用本地文件系统,没有采用分布式文件系统HDFS;

伪分布式模式:存储采用分布式文件系统HDFS,但是,HDFS的名称节点和数据节点都在同一台机器上;

分布式模式:存储采用分布式文件系统HDFS,而且,HDFS的名称节点和数据节点位于不同机器上。

3.3.1 下载安装文件

本教程采用的Hadoop版本是3.1.3,可以到Hadoop官网下载安装文件(http://mirrors.cnnic.cn/apache/hadoop/common/)

请使用hadoop用户登录Linux系统,打开一个终端,执行如下命令:

sudo tar -zxf ~/下载/hadoop-3.1.3.tar.gz -C /usr/local    # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-3.1.3/ ./hadoop      # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop       # 修改文件权限

Hadoop解压后即可使用,可以输入如下命令来检查 Hadoop是否可用,成功则会显示 Hadoop版本信息:

cd /usr/local/hadoop
./bin/hadoop version

3.3.2 单机模式配置

Hadoop默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。Hadoop附带了丰富的例子,运行如下命令可以查看所有例子:

cd /usr/local/hadoop
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar

这里选择运行grep例子 

cd /usr/local/hadoop
mkdir input
cp ./etc/hadoop/*.xml ./input   # 将配置文件复制到input目录下
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/*          # 查看运行结果

3.3.3 伪分布式模式配置

1. 修改配置文件

修改以后,core-site.xml文件的内容如下:

vim /usr/local/hadoop/etc/hadoop/core-site.xml
<configuration><property><name>hadoop.tmp.dir</name><value>file:/usr/local/hadoop/tmp</value><description>Abase for other temporary directories.</description></property><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property>
</configuration>

同样,需要修改配置文件hdfs-site.xml,修改后的内容如下:

vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
<configuration><property><name>dfs.replication</name><value>1</value></property><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/tmp/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/tmp/dfs/data</value></property>
</configuration>

2. 执行名称节点格式化

修改配置文件以后,要执行名称节点的格式化,命令如下:

cd /usr/local/hadoop
./bin/hdfs namenode -format

如果格式化成功,会看到“successfully formatted”的提示信息

3. 启动Hadoop

执行下面命令启动Hadoop:

cd /usr/local/hadoop
./sbin/start-dfs.sh  #start-dfs.sh是个完整的可执行文件,中间没有空格

如果出现如图3-5所示的SSH提示,输入yes即可:

4

5. 使用Web界面查看HDFS信息

6. 运行Hadoop伪分布式实例

要使用HDFS,首先需要在HDFS中创建用户目录(本教程全部统一采用hadoop用户名登录Linux系统),命令如下:

cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /user/hadoop

接着需要把本地文件系统的“/usr/local/hadoop/etc/hadoop”目录中的所有xml文件作为输入文件,复制到分布式文件系统HDFS中的“/user/hadoop/input”目录中,命令如下:

cd /usr/local/hadoop
./bin/hdfs dfs -mkdir input  #在HDFS中创建hadoop用户对应的input目录
./bin/hdfs dfs -put ./etc/hadoop/*.xml input  #把本地文件复制到HDFS中

现在就可以运行Hadoop自带的grep程序,命令如下:

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'

运行结束后,可以通过如下命令查看HDFS中的output文件夹中的内容:

./bin/hdfs dfs -cat output/*

执行结果如图所示

7. 关闭Hadoop

如果要关闭Hadoop,可以执行下面命令:

cd /usr/local/hadoop
./sbin/stop-dfs.sh

8. 配置PATH变量

首先使用vim编辑器打开“~/.bashrc”这个文件,然后,在这个文件的最前面位置加入如下单独一行:

export PATH=$PATH:/usr/local/hadoop/sbin

在后面的学习过程中,如果要继续把其他命令的路径也加入到PATH变量中,也需要继续修改“~/.bashrc”这个文件。当后面要继续加入新的路径时,只要用英文冒号“:”隔开,把新的路径加到后面即可,比如,如果要继续把“/usr/local/hadoop/bin”路径增加到PATH中,只要继续追加到后面,如下所示:

export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin

添加后,执行命令“source ~/.bashrc”使设置生效。设置生效后,在任何目录下启动Hadoop,都只要直接输入start-dfs.sh命令即可,同理,停止Hadoop,也只需要在任何目录下输入stop-dfs.sh命令即可。


3.3.4 分布式模式配置

Hadoop集群安装配置教程_Hadoop3.1.3_Ubuntu_厦大数据库实验室博客

Hadoop 集群的安装配置大致包括以下步骤:

步骤1:选定一台机器作为 Master;

步骤2:在Master节点上创建hadoop用户、安装SSH服务端、安装Java环境;

步骤3:在Master节点上安装Hadoop,并完成配置;

步骤4:在其他Slave节点上创建hadoop用户、安装SSH服务端、安装Java环境;

步骤5:将Master节点上的“/usr/local/hadoop”目录复制到其他Slave节点上;

步骤6:在Master节点上开启Hadoop;

1. 网络配置

假设集群所用的两个节点(机器)都位于同一个局域网内。如果两个节点使用的是虚拟机安装的Linux系统,那么两者都需要更改网络连接方式为“桥接网卡”模式,才能实现多个节点互连,如下图所示。此外,一定要确保各个节点的Mac地址不能相同,否则会出现 IP冲突。如果是采用导入虚拟机镜像文件的方式安装Linux系统,则有可能出现两台机器的MAC地址是相同的,因为一台机器复制了另一台机器的配置,因此,需要改变机器的MAC地址,如下图所示,可以点击界面右边的“刷新”按钮随机生成 MAC 地址,这样就可以让两台机器的MAC地址不同了。

网络配置完成以后,可以查看一下机器的IP地址,可以使用ifconfig命令查看。本教程在同一个局域网内部的两台机器的IP地址分别是192.168.1.121和192.168.1.122。 

由于集群中有两台机器需要设置,所以,在接下来的操作中,一定要注意区分Master节点和Slave节点。为了便于区分Master节点和Slave节点,可以修改各个节点的主机名,这样,在Linux系统中打开一个终端以后,在终端窗口的标题和命令行中都可以看到主机名,就比较容易区分当前是对哪台机器进行操作。 

在Ubuntu中,我们在 Master 节点上执行如下命令修改主机名:

sudo vim /etc/hostname

打开这个文件以后,里面就只有“dblab-VirtualBox”这一行内容,可以直接删除,并修改为“Master”(注意是区分大小写的),然后,保存退出vim编辑器,这样就完成了主机名的修改,需要重启Linux系统才能看到主机名的变化。

执行如下命令打开并修改Master节点中的“/etc/hosts”文件:

sudo vim /etc/hosts

192.168.1.121   Master

192.168.1.122   Slave1

把Slave节点上的“/etc/hostname”文件中的主机名修改为“Slave1”,

sudo vim /etc/hostname

同时,修改“/etc/hosts”的内容,在hosts文件中增加如下两条IP和主机名映射关系:

sudo vim /etc/hosts

192.168.1.121   Master

192.168.1.122   Slave1

修改完成以后,请重新启动Slave节点的Linux系统。

需要在各个节点上都执行如下命令,测试是否相互ping得通,如果ping不通,后面就无法顺利配置成功:

ping Master -c 3   # 只ping 3次就会停止,否则要按Ctrl+c中断ping命令
ping Slave1 -c 3

2. SSH无密码登录节点

必须要让Master节点可以SSH无密码登录到各个Slave节点上。首先,生成Master节点的公匙,如果之前已经生成过公钥,必须要删除原来生成的公钥,重新生成一次,因为前面我们对主机名进行了修改。具体命令如下:

cd ~/.ssh              # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa*           # 删除之前生成的公匙(如果已经存在)
ssh-keygen -t rsa       # 执行该命令后,遇到提示信息,一直按回车就可以

为了让Master节点能够无密码SSH登录本机,需要在Master节点上执行如下命令:

cat ./id_rsa.pub >> ./authorized_keys

完成后可以执行命令“ssh Master”来验证一下,可能会遇到提示信息,只要输入yes即可,测试成功后,请执行“exit”命令返回原来的终端。

接下来,在Master节点将上公匙传输到Slave1节点:

scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/

接着在Slave1节点上,将SSH公匙加入授权:

mkdir ~/.ssh       # 如果不存在该文件夹需先创建,若已存在,则忽略本命令
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub    # 用完以后就可以删掉

如果有其他Slave节点,也要执行将Master公匙传输到Slave节点以及在Slave节点上加入授权这两步操作。

这样,在Master节点上就可以无密码SSH登录到各个Slave节点了,可在Master节点上执行如下命令进行检验:

ssh Slave1


【stop】

3. 配置PATH变量

首先执行命令“vim ~/.bashrc”,也就是使用vim编辑器打开“~/.bashrc”文件,然后,在该文件最上面的位置加入下面一行内容:

export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

4. 配置集群/分布式环境

在配置集群/分布式模式时,需要修改“/usr/local/hadoop/etc/hadoop”目录下的配置文件,这里仅设置正常启动所必须的设置项,包括workers 、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml共5个

(1)修改文件workers

本教程让Master节点仅作为名称节点使用,因此将workers文件中原来的localhost删除,只添加如下一行内容:

Slave1

(2)修改文件core-site.xml

请把core-site.xml文件修改为如下内容:

<configuration><property><name>fs.defaultFS</name><value>hdfs://Master:9000</value></property><property><name>hadoop.tmp.dir</name><value>file:/usr/local/hadoop/tmp</value><description>Abase for other temporary directories.</description></property>
</configuration>

(3)修改文件hdfs-site.xml

<configuration><property><name>dfs.namenode.secondary.http-address</name><value>Master:50090</value></property><property><name>dfs.replication</name><value>1</value></property><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/tmp/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/tmp/dfs/data</value></property>
</configuration>

(4)修改文件mapred-site.xml

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.jobhistory.address</name><value>Master:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>Master:19888</value></property><property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property> 
</configuration>

(5)修改文件 yarn-site.xml

<configuration><property><name>yarn.resourcemanager.hostname</name><value>Master</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
</configuration>

首先在Master节点上执行如下命令:

cd /usr/local
sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件
sudo rm -r ./hadoop/logs/*   # 删除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop

然后在Slave1节点上执行如下命令:

sudo rm -r /usr/local/hadoop    # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop

首次启动Hadoop集群时,需要先在Master节点执行名称节点的格式化(只需要执行这一次,后面再启动Hadoop时,不要再次格式化名称节点),命令如下: 

hdfs namenode -format

现在就可以启动Hadoop了,启动需要在Master节点上进行,执行如下命令:

start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

5. 执行分布式实例

执行分布式实例过程与伪分布式模式一样,首先创建HDFS上的用户目录,命令如下:

hdfs dfs -mkdir -p /user/hadoop

然后,在HDFS中创建一个input目录,并把“/usr/local/hadoop/etc/hadoop”目录中的配置文件作为输入文件复制到input目录中,命令如下:

hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

接着就可以运行 MapReduce 作业了,命令如下:

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'

最后,关闭Hadoop集群,需要在Master节点执行如下命令:

stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver

3.4 本章小结

        Hadoop是当前流行的分布式计算框架,在企业中得到了广泛的部署和应用。本章重点介绍如何安装Hadoop,从而为后续章节开展HDFS和MapReduce编程实践奠定基础。

        Hadoop是基于Java开发的,需要运行在JVM中,因此,需要为Hadoop配置相应的Java环境。Hadoop包含三种安装模式,即单机模式、伪分布式模式和分布式模式。本章分别介绍了三种不同模式的安装配置方法。在初学阶段,建议采用伪分布式模式配置,这样可以快速构建起Hadoop实战环境,有效开展基础编程工作。

相关文章:

【大数据技术基础】 课程 第3章 Hadoop的安装和使用 大数据基础编程、实验和案例教程(第2版)

第3章 Hadoop的安装和使用 3.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台&#xff0c;为用户提供了系统底层细节透明的分布式基础架构。Hadoop是基于Java语言开发的&#xff0c;具有很好的跨平台特性&#xff0c;并且可以部署在廉价的计算机集群中。H…...

DDR4与DDR3服务器内存的关键区别有哪些?

内存作为服务器性能的关键组件之一&#xff0c;已经经历了从DDR3到DDR4的过渡。DDR4内存相较于DDR3在多个方面有所提升&#xff0c;包括速度、带宽、功耗以及数据传输效率等。然而&#xff0c;尽管DDR4内存在性能上占有优势&#xff0c;DDR3内存依然在一些特定场景中得到了广泛…...

OceanBase 的探索与实践

作者&#xff1a;来自 vivo 互联网数据库团队- Xu Shaohui 本文总结了目前我们遇到的痛点问题并通过 OceanBase 的技术方案解决了这些痛点问题&#xff0c;完整的描述了 OceanBase 的实施落地&#xff0c;通过迁移到 OceanBase 实践案例中遇到的问题与解决方案让大家能更好的了…...

2024年安全员-A证证模拟考试题库及安全员-A证理论考试试题

2024年安全员-A证模拟考试题库及理论考试试题&#xff08;一&#xff09; 单选题 根据《建筑施工企业主要负责人、项目负责人和专职安全生产管理人员安全生产管理规定》&#xff0c;项目负责人每月带班生产时间不得少于本月施工时间的&#xff08; &#xff09;。 A. 60% B. …...

安装Docker并使用WSL

引言 Windows Subsystem for Linux (WSL) 是一个在Windows上运行Linux二进制可执行文件&#xff08;ELF格式&#xff09;的兼容层。它允许开发者直接在Windows上运行Linux环境&#xff0c;而无需使用虚拟机。Docker是一个开源的应用容器引擎&#xff0c;它允许开发者打包应用以…...

【TCP 网络通信(发送端 + 接收端)实例 —— Python】

TCP 网络通信&#xff08;发送端 接收端&#xff09;实例 —— Python 1. 引言2. 创建 TCP 服务器&#xff08;接收端&#xff09;2.1 代码示例&#xff1a;TCP 服务器2.2 代码解释&#xff1a; 3. 创建 TCP 客户端&#xff08;发送端&#xff09;3.1 代码示例&#xff1a;TCP…...

PostgreSQL和Oracle的sql差异

PostgreSQL和Oracle的sql差异 1.rownum &#xff08;1&#xff09;Oracle分页查询使用rownum&#xff0c;PostgreSQL使用limit offset ORACLEPOSTGRESQLselect * from (select rownum r,e.* from emp e where rownum <5) t where r>0;select * from emp limit 5 offset…...

阻塞队列详解

阻塞队列介绍 队列 是限定在一端进行插入&#xff0c;另一端进行删除的特殊线性表。先进先出(FIFO)线性表。允许出队的一端称为队头&#xff0c;允许入队的一端称为队尾。 数据结构演示网站&#xff1a; https://www.cs.usfca.edu/~galles/visualization/Algorithms.html Q…...

kali安装谷歌输入法

临时隐匿你IP地址 ifconfig 查询kali现在所用ip ifconfig eth0 所需要修改的ip/掩码24 修改临时ip格式命令 安装中文输入法命令 临时隐匿你IP地址 ifconfig 查询kali现在所用ip ifconfig eth0 所需要修改的ip/掩码24 修改临时ip格式命令安装中文输入法命令 apt-get in…...

C语言:编译与链接

本篇博客给大家带来的是代码从运行到生成可执行文件的流程和原理 &#x1f41f;&#x1f41f;文章专栏&#xff1a;C语言 &#x1f680;&#x1f680;若有问题评论区下讨论&#xff0c;我会及时回答 ❤❤欢迎大家点赞、收藏、分享 你们的支持就是我创造的动力 今日思想&#xf…...

VTK编程指南<五>:VTK中的坐标系统、空间变换及VTK矩阵详解

1、坐标系统 计算机图形学里常用的坐标系统主要有 4 种&#xff0c;分别是 Model 坐标系统、World 坐标系统、View坐标系统和 Display坐标系统(这些名词在不同的书里的中文表述均有所差别&#xff0c;所以直接使用英文名词表示)&#xff0c;此外还有两种表示坐标点的方式&#…...

Linux centos7 下载MySQL5.7仓库的命令

wget 是一个非常强大的命令行工具&#xff0c;用于从网络上下载文件。它是 Linux 和其他 Unix-like 系统中常用的工具之一。wget 命令的各个参数有着不同的含义&#xff0c;下面是您提供的命令 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.onarch.r…...

Java Serializable 序列化

Java的Serializable接口是Java序列化机制的核心&#xff0c;它允许一个对象的状态被转换为字节流&#xff0c;从而可以方便地进行存储或传输。 序列化后的对象可以被写到数据库、存储到文件系统&#xff0c;或者通过网络传输。 要在 Java 中使一个类可序列化&#xff0c;你需要…...

【QNX+Android虚拟化方案】136 - QNX 侧 Coredump 文件解析

【QNX+Android虚拟化方案】136 - QNX 侧 Coredump 文件解析 1. 初始化 QNX 开发环境2. 使用 gdb 解析 Coredump3. 查看 backtrace:bt4. 查看所有线程信息5. 打印线程19的回溯信息6. 打印所有线程的回溯信息7. gdb info 相关的指令8. 查看使用了哪些共享库9. 查看出错的行号及地…...

ORB-SLAM2 ---- 词袋模型BOW

文章目录 一、回环检测的重要性二、回环检测的方法三、词袋模型四、词典五、实例展示1. 计算评分2. 找出有相同单词的关键帧3. 用词袋进行快速匹配 六、总结 一、回环检测的重要性 在前面的学习我们知道&#xff0c;噪声的影响是不可消除的&#xff0c;而上一帧的误差不可避免的…...

win11无法检测到其他显示器-NVIDIA

https://www.nvidia.cn/software/nvidia-app/ https://cn.download.nvidia.cn/nvapp/client/11.0.1.163/NVIDIA_app_v11.0.1.163.exe 下载安装后&#xff0c;检测驱动、更新驱动。...

基于Java+Swing+Mysql的网络聊天室

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…...

docker安装Elasticsearch

公网即可拉取镜像&#xff0c;这个镜像是可以拉得到的&#xff0c;版本号根据自己需要的来 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.15运行命令&#xff0c;xxxxxxxxxxxxxxxxxxxxxxxx_password 为自己的密码 docker run -d --name elasticsearch \-…...

Elasticsearch入门之HTTP高级查询操作

前言 上一篇博客我们学习了es的一些基础操作如下&#xff1a; 创建索引&#xff08;创建表 create table&#xff09;查看索引&#xff08;查看表show tables&#xff09;查看单个索引&#xff08;查看单个表show create table&#xff09;删除索引&#xff08;删除表&#x…...

前端知识1html

VScode一些快捷键 Ctrl/——注释 !——生成html框架元素 *n——生成n个标签 直接书写html的名字回车生成对应的标签 常见标签 span&#xff1a; <span style"color: red;">hello</span> <span>demo</span> span实现&#xff1a; 标题…...

《黑神话:悟空》闪退,提示D3D12崩溃,游戏崩溃无法启动是什么原因?要怎么解决?

《黑神话&#xff1a;悟空》闪退、D3D12崩溃及游戏无法启动&#xff1a;原因、解决方案与预防措施 作为一名软件开发从业者&#xff0c;我深知电脑游戏运行时可能遇到的各种问题&#xff0c;尤其是像《黑神话&#xff1a;悟空》这样的高品质游戏&#xff0c;其对硬件和系统配置…...

[GESP202312 五级] 烹饪问题

题目传送门 B3930 [GESP202312 五级] 烹饪问题 题目描述 有 N N N 种食材&#xff0c;编号从 0 0 0 至 N − 1 N-1 N−1&#xff0c;其中第 i i i 种食材的美味度为 a i a_i ai​。 不同食材之间的组合可能产生奇妙的化学反应。具体来说&#xff0c;如果两种食材的美味…...

[代码随想录10]栈和队列

前言 栈和队列在STL中扮演的什么角色呢&#xff1f;我们知道STL的六大组件是&#xff1a;容器&#xff0c;适配器&#xff0c;算法&#xff0c;迭代器&#xff0c;空间配置器&#xff0c;仿函数&#xff0c;而我们今天要学的栈和队列就是属于适配器里面的&#xff0c;为什么栈和…...

TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面

前言 前篇文章使用Tesseract进行图片文字识别介绍了如何安装TesseractOCR与TesseractOCR的命令行使用。但在日常使用过程中&#xff0c;命令行使用还是不太方便的&#xff0c;因此今天介绍一下如何使用WPF/C#构建TesseractOCR简单易用的用户界面。 普通用户使用 参照上一篇教…...

Java、JavaWeb、数据库-图书管理系统

这一章主要是把上一章写在网页里的java 代码从网页中分离出来&#xff0c;放在专门的servlet类中。每一个servlet类对应一个数据库的表。 规范性问题&#xff1a; 1、dao包存放有关数据库的信息&#xff1a;BaseDao包就放数据库加载驱动和增删改和关闭资源&#xff1b;而其他…...

轻量化特征融合 | YOLOv8 引入一种基于增强层间特征相关性的轻量级特征融合网络 | 北理工新作

本改进已同步到Magic框架 摘要—无人机图像中的小目标检测由于分辨率低和背景融合等因素具有挑战性,导致特征信息有限。多尺度特征融合可以通过捕获不同尺度的信息来增强检测,但传统策略效果不佳。简单的连接或加法操作无法充分利用多尺度融合的优势,导致特征之间的相关性不…...

U盘文件乱码:原因、恢复、预防与总结

U盘文件乱码现象解析 U盘作为我们日常生活中常用的便携式存储设备&#xff0c;时常会遭遇文件乱码的问题。这种乱码现象通常表现为文件名变成一堆无意义的字符&#xff0c;文件内容无法正常查看&#xff0c;甚至文件根本无法被打开。当我们在电脑上插入U盘&#xff0c;准备查看…...

OpenStack介绍

OpenStack概述 OpenStack是一个开源的云计算管理平台软件,主要用于构建和管理云计算环境。它允许企业或组织通过数据中心的物理服务器创建和管理虚拟机、存储资源和网络等云计算服务。其核心组件包括计算(Nova)、网络(Neutron)、存储(Cinder、Swift)等。这些组件相互协作…...

OpenGL编译用户着色器shader

shader相信很多朋友们都听说过&#xff0c;shader就是运行再GPU上的程序。虽然是这么说&#xff0c;但是我们发现&#xff0c;很多IDE开发工具比如说visual studio 没有办法直接去运行shader代码。这是因为&#xff0c;许多编译器不会自动将shader文件编译成可执行的代码然后发…...

C++ 已经知道,中序和后序,推算前序的方法。

已经知道&#xff0c;中序和后序&#xff0c;推算前序的方法。 #include<iostream> using namespace std; string ldr_str,lrd_str;//中序遍历和后序遍历 void build(int l1,int r1,int l2,int r2){if(l1>r1) return ;//边界条件,说明已经没有元素了cout<<lrd_s…...

unity打包到安卓帧率降低

这个问题遇到过很多次了我的做法就是直接设置Application.targetFrameRate60 参考...

计算机网络复习——概念强化作业

物理层负责网络通信的二进制传输 用于将MAC地址解析为IP地址的协议为RARP。 一个交换机接收到一帧,其目的地址在它的MAC地址表中查不到,交换机应该向除了来的端口外的所有其它端口转发。 关于ICMP协议,下面的论述中正确的是ICMP可传送IP通信过程中出现的错误信息。 在B类网络…...

DO、DTO、VO都是干什么的?

DO、DTO、VO 是三个常见的Java 对象&#xff0c;它们都是用来承载数据的&#xff0c;但是在不同的场景下有着不同的用途. 1.DO(Domain Object):领域对象&#xff0c;也称为实体对象。D0 通常用于数据库表的映射&#xff0c;DO中包含了实体的属性以及对实体的操作方法。DO 对应…...

深入探索 Node.js:构建强大的后端应用

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在…...

【Agent】构建智能诗歌创作系统:基于多 Agent 的协同创作实现

在探索大语言模型的创意应用过程中&#xff0c;我们开发了一个基于多 Agent 的智能诗歌创作系统。本文将介绍如何通过多个专业化的 Agent 协同工作&#xff0c;实现根据地点和天气信息自动创作诗歌的功能。 GitHub Code 项目地址 核心架构设计 1. Agent 基类设计 from pydan…...

【Git】:远程操作

目录 新建远程仓库 克隆远程仓库 向远程仓库推送 拉取远程仓库 配置 Git 忽略特殊文件 给命令配置别名 我们可以自己搭建⼀台运行 Git 的服务器&#xff0c;不过现阶段&#xff0c;为了学 Git 先搭个服务器绝对是小题大作。好在这个世界上有个叫 GitHub 的神奇的网站&#xff0…...

服务器数据恢复—LINUX下各文件系统删除/格式化的数据恢复可行性分析

Linux操作系统是世界上流行的操作系统之一&#xff0c;被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统&#xff08;EXT2/EXT3/EXT4/Reiserfs/Xfs&#xff0…...

基于python django的药材数据可视化系统的设计与实现,可对各类药材数据做一个统计分析可视化

研究背景 随着中医药文化的不断传承与发展&#xff0c;传统中药材的市场需求逐渐增加。然而&#xff0c;随着药材种类繁多、来源复杂、品质参差不齐&#xff0c;如何高效地管理、分析与展示中药材的相关数据&#xff0c;成为现代中药产业面临的重要课题。传统的药材数据管理方…...

docker及docker exec命令学习笔记

docker exec 是一个常用的 Docker 命令&#xff0c;允许你在已经运行的容器中执行命令或启动新的进程。以下是详细介绍和常见用法&#xff1a; 基本语法 docker exec [OPTIONS] CONTAINER COMMAND [ARG...]参数详解 1. CONTAINER指定目标容器的名字或容器 ID。可以通过以下命…...

【pyspark学习从入门到精通24】机器学习库_7

目录 聚类 在出生数据集中寻找簇 主题挖掘 回归 聚类 聚类是机器学习中另一个重要的部分&#xff1a;在现实世界中&#xff0c;我们并不总是有目标特征的奢侈条件&#xff0c;因此我们需要回归到无监督学习的范式&#xff0c;在那里我们尝试在数据中发现模式。 在出生数据…...

Unity 策略游戏地图上的网格是如何实现的

在Unity中实现策略游戏地图上的网格&#xff0c;主要涉及到地图数据的处理、地图的加载与渲染、以及玩家在地图上的移动与碰撞检测等关键步骤。以下是对这些步骤的详细解释&#xff1a; 一、地图数据的处理 收集地图数据&#xff1a;这包括地形高度、地形纹理、建筑物、树木等…...

【MySQL 进阶之路】锁详解

MySQL 锁详解 1. 锁的基本概念 锁在数据库中是用来保证数据一致性和防止并发冲突的一种机制。MySQL 中的锁可以分为不同的类型和粒度&#xff0c;每种锁都有特定的使用场景和特点。了解锁的类型、作用以及如何避免锁带来的问题是提升数据库性能和避免数据冲突的关键。 2. 锁…...

RK3588--解码H264(mpp-dec-h264-to-yuv-file)

1. 简介 源码下载:https://download.csdn.net/download/mao0514/90096131 本例完成H264格式文件解码,并保存为yuv格式文件。参考mpp_dec_test重写,进行了一部分精简。 瑞芯微提供的媒体处理软件平台(Media Process Platform,简称 MPP)是适用于瑞芯微芯片系列的 通用媒体…...

解决Conda虚拟环境中pip下载包总是到base环境的问题

conda本地创建的虚拟环境使用pip安装一些包总是安装到base环境中&#xff0c;导致无法正确进行环境隔离&#xff0c;下面是一些解决办法 方法一、使用python -m pip安装 1.1、验证虚拟环境的pip版本是哪个版本&#xff0c;如下所示&#xff0c;本人的demo虚拟环境直接使用pip…...

PyCharm 中设置虚拟环境

在 PyCharm 中设置虚拟环境的步骤如下&#xff1a; 1. 创建新项目时设置虚拟环境 1. 打开 PyCharm 并选择 New Project。 2. 在 Location 中指定项目路径。 3. 在右侧的 Python Interpreter 下&#xff0c;选择 New Environment。 Environment: 选择 Virtualenv。 Loca…...

M9484C VXG 矢量信号发生器- 110GHz-

M9484C VXG 矢量信号发生器 - 110GHz- M9484C VXG 是一款矢量信号发生器&#xff0c;在每个通道上提供 2.5 GHz 调制带宽&#xff0c;能够生成高达 54 GHz 的信号。 这款 VXG 矢量信号发生器可以组成经过校准和同步的全方位综合解决方案&#xff0c;帮助您更快测试下一代无线…...

机器学习详解(3):线性回归之代码详解

文章目录 1 数据预处理2 构建线性回归模型并绘制回归线初始化方法前向传播&#xff1a;forward_propagation代价函数&#xff1a;cost_function反向传播&#xff1a;backward_propagation参数更新&#xff1a;update_parameters训练方法&#xff1a;train代码运行结果 3 使用Py…...

工业检测基础-工业相机选型及应用场景

以下是一些常见的工业检测相机种类、检测原理、应用场景及选型依据&#xff1a; 2D相机 检测原理&#xff1a;基于二维图像捕获&#xff0c;通过分析图像的明暗、纹理、颜色等信息来检测物体的特征和缺陷.应用场景&#xff1a;广泛应用于平面工件的外观检测&#xff0c;如检测…...

标准状态下一个气体分子每秒平均碰撞次数的估算

要估算在标准状态&#xff08;0C, 1个大气压&#xff09;下&#xff0c;一个气体分子在1秒内与其他分子的碰撞次数&#xff0c;我们可以使用一些基本的物理和化学原理。这个过程涉及到气体动力学理论&#xff0c;特别是麦克斯韦-玻尔兹曼分布。 计算气体分子的平均速率&#xf…...

使用PHPUnit使用本地调试代替远程调试,快速提高开发效率

Laravel 是一个在 Linux 环境下表现非常出色的 PHP 框架&#xff0c;但它在 Windows 环境下可能会遇到一些兼容性和配置问题。为了调试或没试的方便可以在 Windows 环境下进行 Laravel PHPUnit进行本地调试和测试。 本地主要针对断点调试效果非常高效。 在 Laravel 中&#x…...