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

Hadoop单机及集群部署

目录

    • 一、Hadoop 单机模式部署
      • 1. 环境准备
      • 2. 安装 Java
      • 3. 下载并安装 Hadoop
      • 4. 配置环境变量
      • 5. 配置 Hadoop
        • 编辑 core-site.xml
        • 编辑 hdfs-site.xml
        • 编辑 mapred-site.xml
        • 编辑 yarn-site.xml
      • 6. 格式化 Namenode
      • 7. 启动 Hadoop 服务
      • 8. 验证 Hadoop
      • 注意事项
    • 二、Hadoop 集群模式部署
      • 1. 环境准备
      • 2. 设置 SSH 免密码登录
      • 3. 下载并安装 Hadoop
      • 4. 配置 Hadoop
        • 编辑 core-site.xml
        • 编辑 hdfs-site.xml
        • 编辑 mapred-site.xml
        • 编辑 yarn-site.xml
        • 配置 slaves 文件
      • 5. 启动 Hadoop 集群
      • 6. 验证集群状态
      • 注意事项
    • 三、Hadoop 使用案例:Word Count
      • 1. 创建输入文件
      • 2. 编写 MapReduce 程序
      • 3. 编译并运行程序
    • 四、使用 Python 实现 Word Count
      • 1. 环境准备
      • 2. 编写 Mapper 和 Reducer
        • Mapper (mapper.py)
        • Reducer (reducer.py)
      • 3. 设置可执行权限
      • 4. 上传输入文件到 HDFS
      • 5. 使用 Hadoop Streaming 运行作业
      • 6. 查看结果
      • 7. Python 实现 Word Count 示例
      • 8. 注意事项
      • 9. 总结
      • 10. 查看结果
    • 五、总结与注意事项
      • 常见问题
      • 优化建议

下面是关于如何在单机和集群环境中部署Hadoop的详细指南,以及部署过程中的注意事项和一个实际使用案例。我们将涵盖从基础安装到配置细节,并讨论一些常见的问题和解决方案。

一、Hadoop 单机模式部署

1. 环境准备

  • 操作系统:Linux (推荐使用 Ubuntu 20.04 或 CentOS 7)
  • Java:Hadoop 需要 Java 环境,推荐使用 OpenJDK 8。
  • SSH:Hadoop 需要 SSH 访问,因此要确保 SSH 服务已安装并运行。

2. 安装 Java

在 Ubuntu 中:

sudo apt update
sudo apt install openjdk-8-jdk

在 CentOS 中:

sudo yum install java-1.8.0-openjdk

验证 Java 安装:

java -version

3. 下载并安装 Hadoop

访问 Hadoop 官网 下载最新版本的 Hadoop。

wget https://downloads.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
tar -xzvf hadoop-3.3.1.tar.gz
mv hadoop-3.3.1 /usr/local/hadoop

4. 配置环境变量

编辑 ~/.bashrc 文件,添加以下内容:

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

应用更改:

source ~/.bashrc

5. 配置 Hadoop

编辑 core-site.xml

路径:$HADOOP_HOME/etc/hadoop/core-site.xml

<configuration><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property>
</configuration>
编辑 hdfs-site.xml

路径:$HADOOP_HOME/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/hadoop_data/hdfs/namenode</value></property><property><name>dfs.datanode.data.dir</name><value>file:///usr/local/hadoop/hadoop_data/hdfs/datanode</value></property>
</configuration>
编辑 mapred-site.xml

复制模板文件并编辑:

cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml

路径:$HADOOP_HOME/etc/hadoop/mapred-site.xml

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>
编辑 yarn-site.xml

路径:$HADOOP_HOME/etc/hadoop/yarn-site.xml

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

6. 格式化 Namenode

hdfs namenode -format

7. 启动 Hadoop 服务

start-dfs.sh
start-yarn.sh

8. 验证 Hadoop

访问 Hadoop Web 界面:

  • Namenode: http://localhost:9870
  • ResourceManager: http://localhost:8088

注意事项

  • 确保 Java 环境配置正确。
  • 确保 SSH 服务正常运行。
  • 检查配置文件路径和参数的正确性。

二、Hadoop 集群模式部署

1. 环境准备

  • 多台服务器,至少 3 台(1 个 NameNode,2 个 DataNode)。
  • 网络:确保各节点之间可以互相访问。
  • 操作系统:Linux (Ubuntu 或 CentOS)。
  • Java:在所有节点上安装 Java。

2. 设置 SSH 免密码登录

在主节点上生成 SSH 密钥:

ssh-keygen -t rsa

将公钥复制到所有从节点:

ssh-copy-id user@datanode1
ssh-copy-id user@datanode2

3. 下载并安装 Hadoop

在所有节点上安装 Hadoop,步骤与单机安装相同。

4. 配置 Hadoop

编辑 core-site.xml

在所有节点上配置相同的 core-site.xml:

<configuration><property><name>fs.defaultFS</name><value>hdfs://namenode:9000</value></property>
</configuration>
编辑 hdfs-site.xml

在所有节点上配置相同的 hdfs-site.xml:

<configuration><property><name>dfs.replication</name><value>2</value></property><property><name>dfs.namenode.name.dir</name><value>file:///usr/local/hadoop/hadoop_data/hdfs/namenode</value></property><property><name>dfs.datanode.data.dir</name><value>file:///usr/local/hadoop/hadoop_data/hdfs/datanode</value></property>
</configuration>
编辑 mapred-site.xml

在所有节点上配置相同的 mapred-site.xml:

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>
编辑 yarn-site.xml

在所有节点上配置相同的 yarn-site.xml:

<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
</configuration>
配置 slaves 文件

在 NameNode 上,编辑 $HADOOP_HOME/etc/hadoop/slaves 文件,添加所有 DataNode 的主机名:

datanode1
datanode2

5. 启动 Hadoop 集群

在 NameNode 上执行:

start-dfs.sh
start-yarn.sh

6. 验证集群状态

访问 Namenode 和 ResourceManager 的 Web 界面,确保所有节点正常运行。

注意事项

  • 确保所有节点的时钟同步。
  • 确保网络配置正确,各节点之间可访问。
  • 检查每个节点的配置文件,确保一致性。

三、Hadoop 使用案例:Word Count

1. 创建输入文件

在 HDFS 中创建一个目录,并上传一个文本文件:

hdfs dfs -mkdir -p /user/hadoop/input
hdfs dfs -put localfile.txt /user/hadoop/input

2. 编写 MapReduce 程序

以下是一个简单的 Word Count Java 程序:

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public class WordCount {public static class TokenizerMapperextends Mapper<Object, Text, Text, IntWritable>{private final static IntWritable one = new IntWritable(1);private Text word = new Text();public void map(Object key, Text value, Context context) throws IOException, InterruptedException {String[] tokens = value.toString().split("\\s+");for (String token : tokens) {word.set(token);context.write(word, one);}}}public static class IntSumReducerextends Reducer<Text, IntWritable, Text, IntWritable> {private IntWritable result = new IntWritable();public void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable val : values) {sum += val.get();}result.set(sum);context.write(key, result);}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "word count");job.setJarByClass(WordCount.class);job.setMapperClass(TokenizerMapper.class);job.setCombinerClass(IntSumReducer.class);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]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}

3. 编译并运行程序

编译程序:

javac -classpath `hadoop classpath` -d wordcount_classes WordCount.java
jar -cvf wordcount.jar -C wordcount_classes/ .

运行程序:

hadoop jar wordcount.jar WordCount /user/hadoop/input /user/hadoop/output

当然可以使用 Python 来实现 Word Count 的 Hadoop MapReduce 程序。Python 提供了一个名为 Hadoop Streaming 的工具,可以通过管道方式使得我们可以使用 Python、Perl、Ruby 等语言来编写 Map 和 Reduce 函数。

下面是使用 Python 实现的 Word Count 示例。

四、使用 Python 实现 Word Count

1. 环境准备

确保你的 Hadoop 环境支持 Hadoop Streaming,可以通过以下命令查看:

hadoop jar /usr/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-3.3.1.jar

如果没有报错,那么你的 Hadoop 支持 Streaming。

2. 编写 Mapper 和 Reducer

Mapper (mapper.py)

Mapper 的任务是读取输入文件的每一行,将每个单词输出为一个键值对 (word, 1)

#!/usr/bin/env pythonimport sys# 读取标准输入
for line in sys.stdin:# 去除前后空格并分割成单词words = line.strip().split()for word in words:# 输出键值对print(f"{word}\t1")

保存为 mapper.py

Reducer (reducer.py)

Reducer 的任务是汇总 Mapper 的输出,统计每个单词出现的次数。

#!/usr/bin/env pythonimport syscurrent_word = None
current_count = 0
word = None# 从标准输入读取数据
for line in sys.stdin:# 去除前后空格并解析输入line = line.strip()word, count = line.split('\t', 1)# 将 count 转换为 inttry:count = int(count)except ValueError:continue# 检查当前单词是否与之前的单词相同if current_word == word:current_count += countelse:if current_word:# 输出当前单词的计数print(f"{current_word}\t{current_count}")current_word = wordcurrent_count = count# 输出最后一个单词的计数
if current_word == word:print(f"{current_word}\t{current_count}")

保存为 reducer.py

3. 设置可执行权限

确保这两个 Python 脚本具有可执行权限:

chmod +x mapper.py
chmod +x reducer.py

4. 上传输入文件到 HDFS

确保 HDFS 已经运行,创建输入目录并上传数据文件:

hdfs dfs -mkdir -p /user/hadoop/input
hdfs dfs -put localfile.txt /user/hadoop/input

5. 使用 Hadoop Streaming 运行作业

使用 Hadoop Streaming 工具运行 MapReduce 作业:

hadoop jar /usr/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-3.3.1.jar \-input /user/hadoop/input \-output /user/hadoop/output \-mapper mapper.py \-reducer reducer.py \-file mapper.py \-file reducer.py

参数说明:

  • -input:指定输入数据所在的 HDFS 目录。
  • -output:指定输出结果存储的 HDFS 目录。
  • -mapper:指定 Mapper 的执行脚本。
  • -reducer:指定 Reducer 的执行脚本。
  • -file:将本地文件发送到 Hadoop 分布式缓存中,以便在集群节点上执行。

6. 查看结果

hdfs dfs -cat /user/hadoop/output/part-00000

7. Python 实现 Word Count 示例

假设 localfile.txt 内容如下:

Hello Hadoop
Hello Python
Hello World

运行以上命令后,输出结果可能如下:

Hadoop    1
Hello     3
Python    1
World     1

8. 注意事项

  1. 输入输出路径:确保输入路径正确,输出路径不存在(Hadoop 不允许输出路径已存在)。
  2. 权限问题:检查脚本的执行权限。
  3. Python 版本:确保 Python 版本与环境兼容。
  4. 换行符问题:确保输入文件中的换行符格式正确(Linux 使用 LF,而不是 CRLF)。

9. 总结

通过以上步骤,我们成功地使用 Python 实现了一个简单的 Hadoop Word Count 程序。Hadoop Streaming 提供了极大的灵活性,可以使用任意支持标准输入输出的编程语言来实现 MapReduce 作业。这使得开发者能够利用熟悉的编程语言进行大规模数据处理。

如果在开发过程中遇到任何问题,请确保查看 Hadoop 和 Python 的错误日志,以便更快地定位问题并进行调试。

10. 查看结果

hdfs dfs -cat /user/hadoop/output/part-r-00000

五、总结与注意事项

常见问题

  1. SSH 问题:确保所有节点之间的 SSH 无密码访问正常。
  2. Java 环境问题:确认所有节点上的 Java 版本一致。
  3. Hadoop 版本问题:确保所有节点的 Hadoop 版本一致。
  4. 文件权限问题:确保 HDFS 中的文件权限正确,避免权限问题导致的作业失败。
  5. 内存和资源配置:合理配置每个节点的内存和资源分配,以提高作业执行效率。

优化建议

  • 使用 HDFS 进行大规模数据存储,提高数据的可靠性和可用性。
  • 合理设置副本数量,根据集群规模和业务需求进行调整。
  • 监控集群状态,使用工具(如 Ambari、Ganglia)对 Hadoop 集群进行实时监控和管理。

通过以上步骤,您可以成功部署 Hadoop 单机和集群环境,并运行简单的 MapReduce程序进行数据处理。在实际生产环境中,还需要根据具体需求进行进一步优化和调整。

相关文章:

Hadoop单机及集群部署

目录 一、Hadoop 单机模式部署1. 环境准备2. 安装 Java3. 下载并安装 Hadoop4. 配置环境变量5. 配置 Hadoop编辑 core-site.xml编辑 hdfs-site.xml编辑 mapred-site.xml编辑 yarn-site.xml 6. 格式化 Namenode7. 启动 Hadoop 服务8. 验证 Hadoop注意事项 二、Hadoop 集群模式部…...

使用es-hadoop同步hive和es之间数据

&#x1f4bb;近期在华为云连接es时的时候发现不能输入账号密码&#xff0c;后面联系华为工程师了解到&#xff0c;华为云默认是非安全模式&#xff0c;即不需要输入账号密码。 如果对你有所帮助&#xff0c;欢迎点赞收藏关注不迷路哦&#x1f493; 目录 使用es-hadoop同步h…...

Java - 泛型 + JUnit

一、泛型(参数化类型,在编译时确定) 泛型是一种可以接收数据类型的数据类型(可以这么理解) 作用&#xff1a; 1.能对加入到集合中的数据类型进行约束 2.遍历的时候&#xff0c;不需要进行类型转换&#xff0c;提高效率(因为遍历时&#xff0c;默认的是Object,需要进行类型转换的…...

vue3实现包含表格的Word文件导出

vue3实现包含表格的Word文件导出 近期遇到一个要求&#xff0c;需要在网页上导出Word文档&#xff0c;文档中有表格&#xff0c;也有普通的数据&#xff0c;查阅了很多资料&#xff0c;总算比较完美的解决了&#xff0c;记录一下 先上一下最终效果 演示视频 vue3项目根据Wor…...

【深度学习】TTS,CosyVoice,推理部署的代码原理讲解分享

文章目录 demo代码加载配置文件speech_tokenizer_v1.onnx(只在zero_shot的时候使用)campplus.onnx(只为了提取说话人音色embedding)`campplus_model` 的作用代码解析具体过程解析总结示意图CosyVoiceFrontEndCosyVoiceModel推理过程总体推理过程推理速度很慢: https://git…...

flask高频面试题

目录 高频面试题及答案1. 如何在Flask中处理数据库迁移&#xff1f;2. Flask如何处理文件上传&#xff1f;3. 如何在Flask中处理跨域请求&#xff08;CORS&#xff09;&#xff1f;4. 如何在Flask中实现用户认证&#xff1f;5. Flask如何处理会话&#xff1f;6. Flask如何处理表…...

尚硅谷谷粒商城项目笔记——五、使用docker安装mysql

五、使用docker安装mysql 注意&#xff1a; 因为电脑是AMD芯片&#xff0c;自己知识储备不够&#xff0c;无法保证和课程中用到的环境一样&#xff0c;所以环境都是自己根据适应硬件软件环境重新配置的&#xff0c;这里的虚拟机使用的是VMware。 使用 Docker 安装 MySQL 与安…...

filebeat + logstash使用笔记

背景 本文中有2台主机&#xff1a; &#xff08;1&#xff09;1.1.1.1是OpenStack的nova节点&#xff0c;安装filebeat &#xff08;2&#xff09;1.1.1.2是logstash节点 在1.1.1.1上通过filebeat读取OpenStack的nova-compute组件日志&#xff08;/var/log/nova/nova-compute.…...

学校考场电子钟设置自动开关机,节能环保

在标准化考试中&#xff0c;准确的时间显示对于确保考试的公正性和秩序至关重要。然而&#xff0c;传统的电子钟系统往往存在一些问题&#xff0c;影响了考试管理的效率。 一、学校普通电子钟使用问题 二、学校考场电子钟优点 学校同步时钟系统通过自动同步网络或卫星时间的方式…...

短剧APP系统开发带来了哪些发展空间?

在影视行业快速发展的时期&#xff0c;短剧作为一种新兴的影视模式&#xff0c;获得了大众的欢迎。目前&#xff0c;短剧行业巨大的发展空间&#xff0c;再次成为大众关注的焦点。 随着移动互联网的发展&#xff0c;信息技术不断升级进步&#xff0c;短剧APP系统的开发&#x…...

PaddlePaddle / PaddleOCR踩坑记,动手实现一个OCR服务器

文章目录 一、环境搭建1、官网2、准备环境 二、编码实现一个web程序 一、环境搭建 1、官网 https://gitee.com/paddlepaddle/PaddleOCR#/paddlepaddle/PaddleOCR/blob/main/doc/doc_ch/quickstart.md 2、准备环境 本地环境坑太多了&#xff0c;好在官网还有一种基于docker搭…...

JeecgBoot低代码平台简单记录

BasicModal弹窗 Usage 由于弹窗内代码一般作为单文件组件存在&#xff0c;也推荐这样做&#xff0c;所以示例都为单文件组件形式 注意v-bind"$attrs"记得写&#xff0c;用于将弹窗组件的attribute传入BasicModal组件 attribute&#xff1a;是属性的意思&#xff0c;…...

零基础入门转录组数据分析——机器学习算法之xgboost(筛选特征基因)

零基础入门转录组数据分析——机器学习算法之xgboost&#xff08;筛选特征基因&#xff09; 目录 零基础入门转录组数据分析——机器学习算法之xgboost&#xff08;筛选特征基因&#xff09;1. xgboost基础知识2. xgboost&#xff08;Rstudio&#xff09;——代码实操2. 1 数据…...

C#开发常见面试题三(浅复制和深复制的区别)

C#开发常见面试题三(浅复制和深复制的区别) 一.浅复制和深复制定义 &#xff08;1&#xff09;浅复制&#xff1a;复制一个对象的时候&#xff0c;仅仅复制原始对象中所有的非静态类型成员和所有的引用类型成员的引用。&#xff08;新对象和原对象将共享所有引用类型成员的实…...

Linux/C 高级——Linux命令

从这里开始&#xff0c;我们展开对Linux/c 高级的学习&#xff0c;首先介绍的是在Linux/c高级中&#xff0c;Linux的部分 目录 1.Linux简介 1.1Linux起源 1.2查看系统版本命令 1.3分层结构 1.4系统关机重启命令 2.Linux安装工具 2.1软件包安装 2.1.1软件包的管理机制 …...

怎么在 tailwindcss 项目中自定义一些可复用的样式

在 Tailwind CSS 项目中自定义可复用的样式有几种常用方法: 使用 apply 指令 你可以在 CSS 文件中使用 apply 指令来创建可复用的样式类: layer components {.btn-primary {apply py-2 px-4 bg-blue-500 text-white font-semibold rounded-lg shadow-md hover:bg-blue-700 f…...

在vue3中 引入echarts

安装&#xff1a;npm install echarts --save 方式一&#xff1a;直接在组件中引用 <template><divref"myChart"id"myChart":style"{ width: 800px, height: 400px }"></div></template><script>import * as echa…...

栈和队列(数据结构)

1. 栈(Stack) 1.1 概念 栈 &#xff1a;一种特殊的线性表&#xff0c;其 只允许在固定的一端进行插入和删除元素操作 。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO &#xff08; Last In First Out &#xff09;的原…...

如何实现ElementUI表单项label的文字提示?

在Vue和ElementUI的丰富组件库中,定制化表单是常见的需求之一。那么如何在表单项label后添加文字提示,以提升用户体验呢? 首先我们来看一下效果图: 这里我们鼠标移动到❓图标上就会出现提示 在 ElementUI 中,el-form-item 组件允许使用 slot 自定义 label。通过在 el-fo…...

c++中的标准库

前言 hello&#xff0c;我是文宇。 正文 C标准库是C编程语言的基本组成部分之一&#xff0c;它为开发人员提供了一套丰富和强大的工具和功能&#xff0c;以便快速开发高效、可靠和可移植的应用程序。C标准库由两个主要部分组成&#xff1a;STL&#xff08;Standard Template…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...