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

Ubuntu从零创建Hadoop集群

目录

前言

前提准备

1.设置网关和网段

2.查看虚拟机IP及检查网络 

3.Ubuntu相关配置

镜像源配置

下载  vim编辑器 

4.设置静态IP和SSH免密(可选)

设置静态IP  

SSH免密

5.JDK环境部署

6.Hadoop环境部署

7.配置 Hadoop 配置文件

HDFS集群规划

HDFS集群配置

1.配置works文件

2.配置hadoop-env.sh文件

3.配置core-site.xml文件

4.配置hdfs-site.xml文件

5.格式化NameNode与启动HDFS集群

YARN&MapReduce集群规划

1.配置mapred-env.sh文件

2.配置mapred-site.xml文件

3.配置yarn-env.sh文件

4.配置yarn-site.xml文件

5.启动YARN集群&MapReduce作业历史服务器


前言

        本次创建Hadoop集群是基于Ubuntu的一系列操作

前提准备

  1. 必要的Linux知识,熟悉Linux命令,vim等编辑器的操作
  2. VMware Workstation 软件及Ubuntu的 .iso 镜像文件
  3. 三台Ubuntu虚拟机node1,node2,node3

1.设置网关和网段

      在VMware软件中,点击编辑,点击虚拟网络编辑器,点击VMnet8

  • 网段(子网IP):192.168.88.0
  • 网关:192.168.88.2

2.查看虚拟机IP及检查网络 

进入第一台Ubuntu虚拟机node1的UI桌面,打开命令提示符,输入如下命令:

  •    ip  a :  查看IP地址
  •   ping www.baidu.com:检查网络是否正常(CTRL+Z停止ping命令)
#查看虚拟机IP
ip a
#检查网络正常
ping  www.baidu.com

注:IP异常无法查看,在我的电脑-管理-服务和应用程序-服务下拉列表中下拉,有五项关于VMware的程序,全部启动即可。

3.Ubuntu相关配置

在IP和网络正常的情况下,首先要更新软件包列表或者切换镜像源

  • 镜像源配置
  1. Ubuntu 镜像源:输入命令 sudo apt update 更新软件包列表,输入命令sudo apt upgrade更新软件版本

#更新软件包列表
sudo apt update
#更新软件版本
sudo apt upgrade
  1.  如果不想使用Ubuntu镜像源,则可以切换镜像源,切换国内镜像源下载软件包时下载速度更快以下是切换镜像源步骤及一些国内可选镜像源:

           2.1.备份原配置文件:

#备份source.list文件到/etc/apt/目录,生成.bak文件
sudo cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
#如果操作失误,想恢复原配置,则使用如下命令将备份配置文件覆盖现有的镜像源配置文件:
sudo cp -a  /etc/apt/sources.list.bak  /etc/apt/sources.list

           2.2.切换镜像源:

                  2.21.阿里镜像源:

修改sources.list文件,将http://archive.ubuntu.comhttp://security.ubuntu.com替换成https://mirrors.aliyun.com/

sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.aliyun.com/@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.aliyun.com/@g" /etc/apt/sources.list

                   2.22.清华镜像源:

sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn/ubuntu/@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn/ubuntu/@g" /etc/apt/sources.list

切换了镜像源后,通过sudo apt update sudo apt upgrade更新软件包列表及软件包版本

  • 下载  vim编辑器 

         1.下载vim编辑器 : 方便以后编辑改写文件

#下载vim编辑器
sudo apt install vim
#除了vim,熟悉nano编辑器的话,也可以安装nano
sudo apt install nano 

    4.设置静态IP和SSH免密(可选)

    • 设置静态IP  
    #进入文件配置目录
    cd  /etc/netplan
    #查看当前目录文件,配置文件是一个01-network-manager-all.yaml大致文件,也可能文件名不同
    ls
    #切换成root用户,防止权限不足无法修改文件
    su -
    #备份文件
    sudo cp 01-network-manager-all.yaml 01-network-manager-all.yaml.bak
    #使用vim编辑器编辑该文件
    sudo vim 01-network-manager-all.yaml
    

     进入01-network-manager-all.yaml配置文件后,配置如下:

    #前提:不懂vim编辑器的去搜索一下常规操作
    # i 进行编辑, 编辑完后,ESC  退出编辑,到命令模式,:wq  保存并退出network:version: 2renderer: networkd  #ui桌面更适合使用NetworkManagerethernets:ens33:  #替换为你的网络接口名称,ip a 命令可查看dhcp4: false  #禁用动态IPaddresses: [192.168.101] #设置成你想设置的静态IPgateway4: 192.168.88.2   #网关nameservers:addresses: [8.8.8.8]  #DNS

    保存关闭配置文件后,执行以下命令应用新的网络配置:

    #应用网络配置
    sudo netplan apply
    #检查配置IP是否成功
    ip a#成功配置会和你设置的IP相同

     注:如果在进入01-network-manager-all.yaml配置文件后报错,则可能是权限不足,解决方案如下:

    #先切换root用户,再尝试进入
    su -
    sudo vim /etc/netplan/01-network-manager-all.yaml
    #如果还是报错,则修改文件权限
    sudo chown root:root /etc/netplan/01-network-manager-all.yaml
    • SSH免密

    方法1: 直接在/etc/hosts中添加三台虚拟机IP,操作如下:

    #进入hosts文件
    vim /etc/hosts
    #加入IP
    192.168.88.101  node1  #格式: 虚拟机ip  主机名
    192.168.88.102  node2
    192.168.88.103  node3 #三台虚拟机都要操作,加入IP保存退出即可

    方法2:添加密钥实现,操作如下:

    #生成SSH密钥对
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    #将生成的公钥添加到 ~/.ssh/authorized_keys 文件中,并确保其权限正确
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    #在 node1 上执行以下命令,使用 ssh-copy-id 命令将公钥复制到其他节点
    ssh-copy-id node@node2
    ssh-copy-id node@node3
    #在 node2 上执行以下命令,使用 ssh-copy-id 命令将公钥复制到其他节点
    ssh-copy-id node@node1
    ssh-copy-id node@node3
    #在 node3 上执行以下命令,使用 ssh-copy-id 命令将公钥复制到其他节点
    ssh-copy-id node@node1
    ssh-copy-id node@node2
    #从 node1 尝试无密码登录到其他节点,验证SSH免密是否成功
    ssh node@node2
    ssh node@node3

    5.JDK环境部署

    注:JDK版本以1.8为例

    官网下载jdk-8u441-linux-x64.tar.gz:Java Downloads | Oracle 中国

    将JDK压缩文件包拖入虚拟机中,记住自己拖放再哪,这里以拖放到根目录为例:

    #解压缩jdk文件到/usr/local
    tar -zxvf jdk-8u441-linux-x64.tar.gz -C /usr/local#注:如果你不想解压到这路径,可以自定义创建一个文件夹存放
    #先  mkdir -p /export/myserver 创建空文件夹,再解压
    

    在解压完后,配置好Java的环境变量:

    #对于单个用户的环境变量设置,你可以编辑 ~/.bashrc 文件。
    #如果你希望所有用户都能使用 Hadoop
    #则需要编辑全局的环境变量文件(如 /etc/profile或/etc/environment)#配置JAVA_HOME环境变量
    #编辑~/.bashrc文件
    vim  ~/.bashrc
    #添加环境变量
    export JAVA_HOME=/usr/local/jdk #设置jdk安装目录
    export PATH=$PATH:$JAVA_HOME/bin  #将bin目录添加到path中

    保存退出后,执行以下命令使JDK环境变量立即生效并检查:

    #使环境变量立即生效
    source ~/.bashrc
    #验证环境变量配置是否成功
    java -version

    使用scp命令将JDK文件分别复制给node2,node3:

    #先切换到jdk解压的目录
    cd /usr/local/
    #复制给node2,node3
    scp -r jdk node2:`pwd`/
    scp -r jdk node3:`pwd`/

    然后按以上相同操作分别给node2和node3配置环境变量。

    6.Hadoop环境部署

    注:Hadoop版本以3.4.1为例

    官网下载Hadoop:Apache Hadoop

    将Hadoop压缩包拖入Ubuntu虚拟机中,通过tar命令解压,这里以拖放到根目录为例:

    #解压缩Hadoop文件到/usr/local
    tar -zxvf hadoop-3.4.1.tar.gz -C /usr/local

    配置Hadoop环境变量:

    #配置HADOOP_HOME环境变量
    #编辑~/.bashrc文件
    vim  ~/.bashrc
    #添加环境变量
    export HADOOP_HOME="/usr/local/hadoop-3.4.1" #指定Hadoop的安装目录
    export PATH="$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin" #将bin/sbin添加到PATH中
    export HADOOP_CONF_DIR="$HADOOP_HOME/etc/hadoop" #指定Hadoop的配置文件目录
    

    保存退出后,执行以下命令使Hadoop环境变量立即生效并检查:

    #使环境变量立即生效
    source ~/.bashrc
    #验证环境变量配置是否成功
    hadoop version

    其他两台虚拟机node2,node3按jdk的操作scp过去即可。

    7.配置 Hadoop 配置文件

    首先,在配置前,让我们了解以下Hadoop相关知识:

    1.Hadoop基础架构:中心化模式(也叫主从模式)

    2.Hadoop三大核心组件:HDFS,MapReduce,YARN

    2.1.HDFS(Hadoop Distributed File System):HDFS 是 Hadoop 的分布式文件系统,设计用于存储大规模数据集,并提供高容错性和高吞吐量的数据访问。

    核心组件

    • NameNode:管理文件系统的命名空间(namespace),维护文件块映射信息,是整个集群的核心管理者。
    • DataNode:存储实际的数据块,并执行客户端请求的读写操作。
    • Secondary NameNode:辅助 NameNode 进行元数据的检查点操作,帮助减轻 NameNode 的负担,但不作为备份。

    2.2.YARN( Yet Another Resource Negotiator):YARN 是 Hadoop 的资源管理和调度框架,负责管理集群资源并调度应用程序的任务。

    核心组件

    • ResourceManager:全局的资源管理器,负责整个集群的资源分配和调度。
    • NodeManager:每个节点上的代理,负责监控节点的状态并向 ResourceManager 报告。
    • ApplicationMaster:为每个应用程序启动的进程,负责与 ResourceManager 协商资源,并与 NodeManager 交互以执行具体的任务。
    • Proxy Server:用于提供一个安全的代理服务,以防止直接访问ResourceManager和NodeManager的Web界面。它主要用于集群外部用户的安全访问。

    2.3.MapReduce:MapReduce 是 Hadoop 中的一个编程模型和执行框架,用于并行处理大规模数据集。它通过将任务分解为 Map 和 Reduce 两个阶段来实现高效的分布式计算。

    核心组件

    • JobHistory Server :用于记录和展示已完成的MapReduce作业的历史信息。这对于分析和调试历史作业非常有用。

    工作流程

    1. Map 阶段:将输入数据集划分为多个独立的小任务(称为 map tasks),并行处理这些任务,生成中间键值对。
    2. Shuffle 和 Sort 阶段:将 Map 阶段生成的中间键值对进行分区、排序和合并,以便后续的 Reduce 阶段使用。
    3. Reduce 阶段:对经过 Shuffle 和 Sort 阶段处理后的数据进行聚合操作,生成最终结果。
    • HDFS集群规划

    在开始前,我们首先对HDFS集群进行规划:

    节点服务
    node1NameNode  DataNode  SecondaryNameNode
    node2DataNode
    node3DataNode

     NameNode 主角色   DataNode从角色  SecondaryNameNode辅助角色

    • HDFS集群配置

    配置HDFS集群,我们主要涉及到如下文件的修改:

    workers:          配置从节点(DataNode)有哪些

    hadoop-env.sh:配置Hadoop的相关环境变量

    core-site.xml: Hadoop核心配置文件

    hdfs-site.xml: HDFS核心配置文件 这些文件均存在与$HADOOP_HOME/etc/hadoop文件夹中。

    1.配置works文件
    # 进入配置文件目录
    cd /usr/local/etc/hadoop
    # 编辑workers文件
    vim workers
    # 填入如下内容,表示集群记录了三个DataNode从节点
    node1
    node2
    node3
    
    2.配置hadoop-env.sh文件
    # 填入如下内容# JAVA_HOME,指明JDK环境的位置在哪
    export JAVA_HOME=/usr/local/jdk# HADOOP_HOME,指明Hadoop安装位置
    export HADOOP_HOME=/usr/local/hadoop # HADOOP_CONF_DIR,指明Hadoop配置文件目录位置
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop# HADOOP_LOG_DIR,指明Hadoop运行日志目录位置
    export HADOOP_LOG_DIR=$HADOOP_HOME/logs  # 修正变量名为HADOOP_LOG_DIR
    
    3.配置core-site.xml文件
    #在文件内部填入如下内容
    <configuration><!-- 默认文件系统 --><property><name>fs.defaultFS</name><value>hdfs://node1:8020</value><description>表示 NameNode 运行在 node1 节点上,并且监听端口 8020</description></property><!-- I/O 缓冲区大小 --><property><name>io.file.buffer.size</name><value>131072</value><description>用于序列文件的缓冲区大小</description></property><!-- Hadoop 临时目录 --><property><name>hadoop.tmp.dir</name><value>/usr/local/hadoop/tmp</value><description>其他临时目录的基础</description></property><!-- 垃圾回收周期 --><property><name>fs.trash.interval</name><value>1440</value><description>垃圾检查点之间的分钟数</description></property>
    </configuration>
    
    4.配置hdfs-site.xml文件

    4.1首先,先创建节点目录

    sudo mkdir -p /usr/local/hadoop/data/namenode
    sudo mkdir -p /usr/local/hadoop/data/datanode
    sudo mkdir -p /usr/local/hadoop/data/secondarynamenode

    4.2然后再配置 

    <configuration><!-- NameNode 相关配置 --><!-- NameNode 存储元数据的目录 --><property><name>dfs.namenode.name.dir</name><value>/usr/local/hadoop/data/namenode</value><description>确定DFS名称节点应在本地文件系统的什么位置存储名称表</description></property><!-- Secondary NameNode 相关配置 --><!-- Secondary NameNode 的检查点目录 --><property><name>dfs.namenode.checkpoint.dir</name><value>/usr/local/hadoop/data/secondarynamenode</value><description>确定DFS(分布式文件系统)次级名称节点应在本地文件系统的什么位置存储用于合并的临时镜像</description></property><!-- DataNode 相关配置 --><!-- DataNode 存储块数据的目录 --><property><name>dfs.datanode.data.dir</name><value>/usr/local/hadoop/data/datanode</value><description>确定DFS数据节点应在本地文件系统的什么位置存储其数据块</description></property><!-- 副本数配置 --><!-- 数据块的副本数 --><property><name>dfs.replication</name><value>3</value><description>默认块复制</description></property><!-- 权限配置 --><!-- 是否启用权限检查 --><property><name>dfs.permissions.enabled</name><value>true</value><description>HDFS启动禁用权限</description></property></configuration>
    5.格式化NameNode与启动HDFS集群
    # 为确保安全,这里以普通用户node启动集群
    su - node
    # 格式化namenode
    hadoop namenode -format# 启动hdfs集群
    start-dfs.sh
    # 关闭hdfs集群
    stop-dfs.sh# 如果遇到命令未找到的错误,表明环境变量未配置好,可以以绝对路径执行
    /usr/local/hadoop/sbin/start-dfs.sh
    /usr/local/hadoop/sbin/stop-dfs.sh

    HDFS的配置文件修改好后,需要分发到其它的服务器节点中:

    scp works hadoop-env.sh core-site.xml hdfs-site.xml node2:`pwd`
    scp works hadoop-env.sh core-site.xml hdfs-site.xml node3:`pwd`

    启动完成后,可以在浏览器打开:http://node1:9870

    • YARN&MapReduce集群规划
    节点角色
    node1ResourceManager NodeManager ProxyServer JobHistoryServer
    node2NodeManager
    node3NodeManager

     ResourceManager主角色 NodeManager从角色 ProxyServer&JobHistoryServer辅助角色

    • YARN&MapReduce集群配置

    配置YARN&MapReduce集群,我们主要涉及到如下文件的修改:

    mapred-env.sh:  用于设置 MapReduce 相关的环境变量

    mapred-site.xml:用于配置 MapReduce 框架的属性

    yarn-env.sh:       用于设置 YARN 相关的环境变量

    yarn-site.xml:     用于配置 YARN 的属性

    1.配置mapred-env.sh文件
    # 设置Java的安装路径
    export JAVA_HOME=/usr/local/jdk# 设置MapReduce的日志目录
    export HADOOP_MAPRED_HOME=/usr/local/hadoop# 设置MapReduce的临时目录
    export HADOOP_MAPRED_LOG_DIR=${HADOOP_MAPRED_HOME}/logs# 设置MapReduce的PID文件目录
    export HADOOP_MAPRED_PID_DIR=${HADOOP_MAPRED_HOME}/pids# 设置MapReduce的临时目录
    export HADOOP_MAPRED_TMP_DIR=${HADOOP_MAPRED_HOME}/tmp
    2.配置mapred-site.xml文件
    <configuration><!-- 配置MapReduce框架使用YARN --><property><name>mapreduce.framework.name</name><value>yarn</value><description>MapReduce的运行框架设置为yarn</description></property><!-- 配置MapReduce作业历史服务器地址 --><property><name>mapreduce.jobhistory.address</name><value>node1:10020</value><description>MapReduce作业历史服务器的地址</description></property><!-- 配置MapReduce作业历史服务器Web UI地址 --><property><name>mapreduce.jobhistory.webapp.address</name><value>node1:19888</value><description>MapReduce JobHistory服务器Web UI的地址</description></property><!-- 配置MapReduce任务的默认并行度 --><property><name>mapreduce.map.memory.mb</name><value>1024</value><description>提高映射(map)任务性能</description></property><property><name>mapreduce.reduce.memory.mb</name><value>2048</value><description>提升归约任务的性能</description></property>
    </configuration>
    3.配置yarn-env.sh文件
    # 设置Java的安装路径
    export JAVA_HOME=/usr/local/jdk
    #设置Hadoop的安装路径
    export HADOOP_HOME=/usr/local/hadoop
    # 设置YARN的日志目录
    export YARN_LOG_DIR=${HADOOP_HOME}/logs# 设置YARN的PID文件目录
    export YARN_PID_DIR=${HADOOP_HOME}/pids# 设置YARN的临时目录
    export YARN_TMP_DIR=${HADOOP_HOME}/tmp# 设置ResourceManager的JVM堆大小
    export YARN_RESOURCEMANAGER_OPTS="-Xmx2048m"# 设置NodeManager的JVM堆大小
    export YARN_NODEMANAGER_OPTS="-Xmx2048m"
    4.配置yarn-site.xml文件

    4.1首先,先创建节点目录:

    #创建/data/nm-local-dir目录
    sudo mkdir -p /usr/local/hadoop/data/nm-local-dir
    #给予用户权限,这里将  USER  替换为你自己的用户名
    sudo chown -R $USER:$USER /usr/local/hadoop/data

    4.2.再进行配置: 

    <configuration><!-- 配置ResourceManager的地址 --><property><name>yarn.resourcemanager.hostname</name><value>node1</value><description>资源管理器的主机名</description></property><!-- 配置ResourceManager的Web UI地址 --><property><name>yarn.resourcemanager.webapp.address</name><value>node1:8088</value><description>资源管理器Web应用程序的地址</description></property><!-- 配置NodeManager的本地目录 --><property><name>yarn.nodemanager.local-dirs</name><value>/usr/local/hadoop/data/nm-local-dir</value><description>用于存储容器日志和中间数据的以逗号分隔的目录列表</description></property><!-- 配置NodeManager的资源管理器地址 --><property><name>yarn.nodemanager.resource.memory-mb</name><value>8192</value><description>可用于容器的物理内存总量</description></property><!-- 配置NodeManager的CPU核心数 --><property><name>yarn.nodemanager.resource.cpu-vcores</name><value>4</value><description>可用于容器的CPU核心总数</description></property><!-- 配置NodeManager的健康检查脚本 --><property><name>yarn.nodemanager.health-checker.script.path</name><value>/usr/local/hadoop/bin/health_check.sh</value><description>检查节点健康状况的脚本路径</description></property><!-- 配置YARN的日志聚合 --><property><name>yarn.log-aggregation-enable</name><value>true</value><description>是否启用日志聚合</description></property><!-- 配置日志保留时间 --><property><name>yarn.log-aggregation.retain-seconds</name><value>604800</value><description>历史服务器上保留聚合日志(以秒为单位)的时间</description></property>
    </configuration>
    5.启动YARN集群&MapReduce作业历史服务器
    # 启动YARN
    start-yarn.sh# 启动MapReduce作业历史服务器
    mr-jobhistory-daemon.sh start historyserver

    MapReduce和YARN的配置文件修改好后,需要分发到其它的服务器节点中:

    #进入Hadoop配置文件目录
    cd /usr/local/hadoop/etc/hadoop
    #复制给node2,node3
    scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node2:`pwd`
    scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node3:`pwd`

    最后,打开 http://node1:8088 即可看到YARN集群的监控页面(ResourceManager的WEB UI)

    相关文章:

    Ubuntu从零创建Hadoop集群

    目录 前言 前提准备 1.设置网关和网段 2.查看虚拟机IP及检查网络 3.Ubuntu相关配置 镜像源配置 下载 vim编辑器 4.设置静态IP和SSH免密(可选) 设置静态IP SSH免密 5.JDK环境部署 6.Hadoop环境部署 7.配置 Hadoop 配置文件 HDFS集群规划 HDFS集群配置 1.配…...

    GPIO概念

    GPIO通用输入输出口 在芯片内部存在多个GPIO&#xff0c;每个GPIO用于管理多个芯片进行输入&#xff0c;输出工作 引脚电平 0v ~3.3v&#xff0c;部分引脚可容任5v 输出模式下可控制端口输出高低电平&#xff0c;可以驱动LED&#xff0c;控制蜂鸣器&#xff0c;模拟通信协议&a…...

    Node.js, Bun, Deno 比较概述

    以下是 Node.js、Bun 和 Deno 的对比分析 概览 对比维度Node.jsDenoBun首次发布200920202022创始人Ryan DahlRyan Dahl&#xff08;Node.js 原作者&#xff09;Jarred Sumner运行时引擎V8&#xff08;Chrome&#xff09;V8&#xff08;Chrome&#xff09;JavaScriptCore&#…...

    C# 类库打包dll文件

    目录 前言操作流程注意事项 前言 在C#中&#xff0c;有多种方式可以对代码进行加密&#xff0c;以保护源代码不被轻易查看或修改&#xff0c;这篇文章主要介绍将C# cs类文件加密为dll文件的方式进行保护。 操作流程 在 Visual Studio 中&#xff0c;选择“创建新项目”。 选…...

    Linux中的UDP编程接口基本使用

    UDP编程接口基本使用 本篇介绍 在前面网络基础部分已经介绍了网络的基本工作模式&#xff0c;有了这些理论基础之后&#xff0c;下面先从UDP编程开始从操作部分深入网络 在本篇中&#xff0c;主要考虑下面的内容&#xff1a; 创建并封装服务端&#xff1a;了解创建服务端的…...

    RAG项目实战:金融问答系统

    需求痛点 私有知识很多&#xff0c;如何让大模型只选择跟问题有关的知识进行参考呢&#xff1f; 需求分析 是否可以使用关键词匹配呢&#xff1f;以前的搜索主要使用关键词匹配&#xff0c;这个要求太高了&#xff0c;需要提前抽取准备好关键词&#xff0c;有点像以前SEO的工…...

    大白话React第十一章React 相关的高级特性以及在实际项目中的应用优化

    假设我们已经对 React 前端框架的性能和可扩展性评估有了一定了解&#xff0c;接下来的阶段可以深入学习 React 相关的高级特性以及在实际项目中的应用优化&#xff0c;以下是详细介绍及代码示例&#xff1a; 1. React 高级特性的深入学习 1.1 React 并发模式&#xff08;Con…...

    虚拟机Linux操作(持续更新ing)

    虚拟机操作(持续更新ing) 虚拟机基本操作(Linux) # Linux # 立刻关机 poweroff # 立刻关机&#xff0c;可以选择数字或者具体时间 shutdown -h now # 立刻重启&#xff0c;可以选择数字或者具体时间 shutdown -r now # 立刻重启 reboot # cd 切换目录,下面用根目录举例 cd /…...

    【开源-线程池(Thread Pool)项目对比】

    一些实现**线程池&#xff08;Thread Pool&#xff09;**功能的开源项目的对比分析。 线程池功能的开源项目 项目名称语言优点缺点适用场景开源代码链接ThreadPoolC简单易用&#xff0c;代码简洁&#xff1b;适合快速原型开发。功能较为基础&#xff0c;不支持动态调整线程数…...

    JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式)

    JMeter 实战项目脚本录制最佳实践&#xff08;含 BadBoy 录制方式&#xff09; 一、项目背景 在软件测试过程中&#xff0c;使用 JMeter 进行性能测试和功能测试是常见的操作。本实战项目将详细介绍如何使用 JMeter 自带工具以及 BadBoy 进行脚本录制&#xff0c;并完善脚本以…...

    Jackson注解实战:@JsonInclude的妙用

    在日常的Java开发中&#xff0c;我们经常需要将Java对象序列化为JSON格式&#xff0c;以便进行数据传输或存储。然而&#xff0c;有时候我们并不希望在JSON中包含某些空值或不必要的字段&#xff0c;这不仅会增加数据的冗余性&#xff0c;还可能对后续的处理造成困扰。Jackson库…...

    CAN总线通信协议学习1——物理层

    首先来看看CAN是怎么产生的&#xff1a;简单理解&#xff0c;CAN就是一种“拥有特别连接方式”的数据传输的总线&#xff0c;其有特定的一些规则。 &#xff08;注&#xff1a;资料及图片来源于知乎博主TOMOCAT。&#xff09; CAN总线的结构 查阅参考文献&#xff0c;OSI标准…...

    Vim 常用快捷键大全:跳转、编辑、查找替换全解析

    摘要&#xff1a; Vim 是一款非常强大的文本编辑器&#xff0c;许多程序员和系统管理员都离不开它。 本文详细介绍了 Vim 编辑器中的常用快捷键和命令&#xff0c;从基本模式、光标移动、编辑操作到查找替换&#xff0c;再到文件保存等常用操作&#xff0c;帮助你快速上手并提…...

    【Python 数据结构 2.时间复杂度和空间复杂度】

    Life is a journey —— 25.2.28 一、引例&#xff1a;穷举法 1.单层循环 所谓穷举法&#xff0c;就是我们通常所说的枚举&#xff0c;就是把所有情况都遍历了的意思。 例&#xff1a;给定n&#xff08;n ≤ 1000&#xff09;个元素ai&#xff0c;求其中奇数有多少个 判断一…...

    【Qt QML】QML鼠标事件(MouseArea)

    QML鼠标事件全面解析 一、MouseArea基础概念 在 QML 中,鼠标事件是处理用户与界面元素交互的重要部分。QML 提供了多种方式来处理鼠标事件,MouseArea 是 QML 中用于处理鼠标事件的核心元素,它可以覆盖在其他元素之上,捕获鼠标操作并触发相应的信号。 1、基本用法 import …...

    LeetCode 202. 快乐数 java题解

    https://leetcode.cn/problems/happy-number/description/ 哈希表 class Solution {public boolean isHappy(int n) {if(n1) return true;HashSet<Integer> setnew HashSet<>();while(n!1&&!(set.contains(n))){//没找到结果&#xff1b;没有重复出现过se…...

    《认知·策略·跃迁:新能源汽车工程师的深度学习系统构建指南》

    --- ## 前言&#xff1a;为什么传统学习法正在杀死你的竞争力&#xff1f; 在新能源汽车领域&#xff0c;我们正经历着每18个月知识体系更新迭代的指数级变革。当磷酸铁锂电池能量密度刚突破200Wh/kg时&#xff0c;固态电池已进入量产倒计时&#xff1b;当自动驾驶还在L2级徘…...

    PHP环境安装达梦数据库驱动实操

    PHP环境安装达梦数据库驱动实操 一、环境准备 达梦数据库安装 从达梦官网下载对应系统版本的DM8开发版或企业版&#xff0c;完成安装并确保数据库服务正常运行。安装后需记录数据库的安装路径&#xff08;如Windows默认路径为D:\dmdbms&#xff0c;Linux为/dm/server&#xff0…...

    Electron + Vite + React + TypeScript 跨平台开发实践指南

    Electron Vite React TypeScript 跨平台开发全栈实践指南 开发环境的搭建(node.js&#xff0c;npm的安装)请参见我的文章 2025Q1 核心组件版本矩阵 组件版本关键改进特性Electron30.0.0原生ESM支持、V8引擎性能优化30%Vite6.0.0多核编译加速、SSR增强模式React21.0.0并发…...

    Java---入门基础篇(下)---方法与数组

    前言 本篇文章主要讲解有关方法与数组的知识点 ,是基础篇的一部分 , 而在下一篇文章我会讲解类和对象的知识点 入门基础篇上的链接给大家放在下面啦 ! Java---入门基础篇(上)-CSDN博客 感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb; 欢迎各位大佬指点…...

    UE5 学习系列(二)用户操作界面及介绍

    这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

    《Playwright:微软的自动化测试工具详解》

    Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

    如何理解 IP 数据报中的 TTL?

    目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

    Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

    文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

    【Linux】Linux 系统默认的目录及作用说明

    博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

    【网络安全】开源系统getshell漏洞挖掘

    审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

    【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

    目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

    DAY 26 函数专题1

    函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

    Linux安全加固:从攻防视角构建系统免疫

    Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

    Qt的学习(一)

    1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...