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

Hadoop的概述与安装

Hadoop的概述与安装

  • 一、Hadoop内部的三个核心组件
    • 1、HDFS:分布式文件存储系统
    • 2、YARN:分布式资源调度系统
    • 3、MapReduce:分布式离线计算框架
    • 4、Hadoop Common(了解即可)
  • 二、Hadoop技术诞生的一个生态圈
    • 数据采集存储
    • 数据清洗预处理
    • 数据统计分析
    • 数据迁移
    • 数据可视化
    • zookeeper
  • 三、主要围绕Apache的Hadoop发行版本来学习
  • 四、Hadoop的安装的四种模式
  • 五、Hadoop的伪分布安装流程
  • 六、格式化HDFS集群
  • 七、启动HDFS和YARN
  • 八、Hadoop的完全分布式安装
    • 1、克隆虚拟机
    • 2、安装JDK
    • 3、安装Hadoop完全分布式
    • 4、格式化HDFS
    • 5、启动HDFS和YARN

Hadoop技术 —— 脱自于Google的三篇论文(大数据软件一般都要求7*24小时不宕机)

把大数据中遇到的两个核心问题(海量数据的存储问题和海量数据的计算问题)全部解决了

一、Hadoop内部的三个核心组件

1、HDFS:分布式文件存储系统

分布式思想解决了海量数据的分布式存储问题

三个核心组件组成

  • NameNode:主节点
    • 存储整个HDFS集群的元数据(目录结构)
    • 管理整个HDFS集群
  • DataNode:数据节点/从节点
    • 存储数据的,DataNode以Block块的形式进行文件存储
  • SecondaryNameNode:小秘书
    • 帮助NameNode合并日志数据的(元数据)

2、YARN:分布式资源调度系统

解决分布式计算程序的资源分配以及任务监控问题

Mesos:分布式资源管理系统(YARN的替代品)

两个核心组件组成

  • ResourceManager:主节点
    • 管理整个YARN集群的,同时负责整体的资源分配
  • NodeManager:从节点
    • 真正负责进行资源提供的

3、MapReduce:分布式离线计算框架

分布式思想解决了海量数据的分布式计算问题

4、Hadoop Common(了解即可)

二、Hadoop技术诞生的一个生态圈

数据采集存储

flume、Kafka、hbase、hdfs

数据清洗预处理

MapReduce、Spark

数据统计分析

Hive、Pig

数据迁移

sqoop

数据可视化

ercharts

zookeeper

三、主要围绕Apache的Hadoop发行版本来学习

官网:https://hadoop.apache.org

apache hadoop发行版本

  • hadoop1.x
  • hadoop2.x
  • hadoop3.x
    • hadoop3.1.4

四、Hadoop的安装的四种模式

hadoop软件中HDFS和YARN是一个系统,而且是一个分布式的系统,同时他们还是一种主从架构的软件。

第一种:本地安装模式:只能使用MapReduce,HDFS、YARN均无法使用 —— 基本不用

第二种:伪分布安装模式:hdfs和yarn的主从架构软件全部安装到同一个节点上

第三种:完全分布式安装模式:hdfs和yarn的主从架构组件安装到不同的节点上

第四种:HA高可用安装模式:hdfs和yarn的主从架构组件安装到不同节点上,同时还需要把他们的主节点多安装两三个,但是在同一时刻只能有一个主节点对外提供服务 —— 借助Zookeeper软件才能实现

修改配置文件:hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-env.sh、mapred-site.xml、yarn-site.xml、yarn-env.sh、workers、log4j.properties、capacity-scheduler.xml、dfs.hosts、dfs.hosts.exclude

五、Hadoop的伪分布安装流程

1、需要在Linux上先安装JDK,Hadoop底层是基于Java开发的

  • 环境变量的配置主要有两个地方可以配置
/etc/profile:系统环境变量
~/.bash_profile:用户环境变量
环境变量配置完成必须重新加载配置文件
source  环境变量文件路径

2、配置当前主机的主机映射以及ssh免密登录

3、安装本地版本的Hadoop

  • 上传 —— 使用xftp将Windows下载好的hadoop-3.1.4.tar.gz传输到/opt/software目录下
  • 解压 —— tar -zxvf hadoop-3.1.4.tar.gz -C /opt/app
  • 配置环境变量
    • vim /etc/profile
    • export HADOOP_HOME=/opt/app/hadoop-3.1.4
      export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    • source /etc/profile

4、安装伪分布式版本的Hadoop

修改各种各样的hadoop配置文件即可

  • hadoop-env.sh 配置Java的路径
vim hadoop-env.sh
#第54行
export JAVA_HOME=/opt/app/jdk1.8.0_371
#第58行
export HADOOP_HOME=/opt/app/hadoop-3.1.4
#第68行
export HADOOP_CONF_DIR=/opt/app/hadoop-3.1.4/etc/hadoop
#最后一行
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

image-20230718210944383

  • core-site.xml 配置HDFS和YARN的一些共同的配置项
    • 配置HDFS的NameNode路径
    • 配置HDFS集群存储的文件路径
vim core-site.xml
<!--在configuration标签中增加如下配置-->
<configuration><!-- 指定HDFS中NameNode的地址 --><property><name>fs.defaultFS</name><value>hdfs://single:9000</value></property><!-- 指定hadoop运行时产生文件的存储目录  HDFS相关文件存放地址--><property><name>hadoop.tmp.dir</name><value>/opt/app/hadoop-3.1.4/metaData</value></property><!-- 整合hive 用户代理设置 --><property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.root.groups</name><value>*</value></property></configuration>

image-20230822161902347

  • hdfs-site.xml 配置HDFS的相关组件
    • 配置NameNode的web访问路径、DN的web访问网站,SNN的web访问路径等等
vim hdfs-site.xml
<configuration><!-- 指定HDFS副本的数量 --><property><name>dfs.replication</name><!-- hdfs的dn存储的block的备份数--><value>1</value></property><!--hdfs取消用户权限校验--><property><name>dfs.permissions.enabled</name><value>false</value></property><property><name>dfs.namenode.http-address</name><value>0.0.0.0:9870</value>
<!-- 50070,9870--> </property><property><name>dfs.datanode.http-address</name><value>0.0.0.0:9864</value>
<!-- 50075,9864--> </property><property><name>dfs.secondary.http-address</name><value>0.0.0.0:9868</value>
<!-- 50090,9868--> </property><!--用于指定NameNode的元数据存储目录--><property><name>dfs.namenode.name.dir</name><value>/opt/app/hadoop-3.1.4/metaData/dfs/name1,/opt/app/hadoop-3.1.4/metaData/dfs/name2</value></property>
</configuration>

image-20230822192047054

  • mapred-env.sh 配置MR程序运行时的关联的软件(Java YARN)路径
vim mapred-env.sh
#最后一行
export JAVA_HOME=/opt/app/jdk1.8.0_371

image-20230718212027604

  • mapred-site.xml 配置MR程序运行环境
    • 配置将MR程序在YARN上运行
vim mapred-site.xml
<!-- 指定mr运行在yarn上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property><!-- 指定MR APP Master需要用的环境变量  hadoop3.x版本必须指定--><property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><!-- 指定MR 程序 map阶段需要用的环境变量 hadoop3.x版本必须指定--><property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><!-- 指定MR程序 reduce阶段需要用的环境变量 hadoop3.x版本必须指定--><property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property>
<property><name>mapreduce.map.memory.mb</name><value>250</value>
</property>
<property><name>mapreduce.map.java.opts</name><value>-Xmx250M</value>
</property>
<property><name>mapreduce.reduce.memory.mb</name><value>300</value>
</property>
<property><name>mapreduce.reduce.java.opts</name><value>-Xmx300M</value>
</property><property><name>mapreduce.jobhistory.address</name><value>single:10020</value>
</property>
<property><name>mapreduce.jobhistory.webapp.address</name><value>single:19888</value>
</property>

image-20230718212347926

image-20230822192150660

  • yarn-env.sh 配置YARN关联的组件路径
vim  yarn-env.sh
#最后一行
export JAVA_HOME=/opt/app/jdk1.8.0_371

image-20230718212518831

  • yarn-site.xml 配置YARN的相关组件
    • 配置RM、NM的web访问路径等等
vim yarn-site.xml
<!-- reducer获取数据的方式 --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 指定YARN的ResourceManager的地址 --><property><name>yarn.resourcemanager.hostname</name><!-- 指定yarn的RM组件安装到哪个主机上--><value>single</value></property><property><name>yarn.application.classpath</name><!-- 指定yarn软件在运行时需要的一些环境路径--><value>/opt/app/hadoop-3.1.4/etc/hadoop,/opt/app/hadoop-3.1.4/share/hadoop/common/*,/opt/app/hadoop-3.1.4/share/hadoop/common/lib/*,/opt/app/hadoop-3.1.4/share/hadoop/hdfs/*,/opt/app/hadoop-3.1.4/share/hadoop/hdfs/lib/*,/opt/app/hadoop-3.1.4/share/hadoop/mapreduce/*,/opt/app/hadoop-3.1.4/share/hadoop/mapreduce/lib/*,/opt/app/hadoop-3.1.4/share/hadoop/yarn/*,/opt/app/hadoop-3.1.4/share/hadoop/yarn/lib/*</value></property>
<!-- yarn.resourcemanager.webapp.address:指的是RM的web访问路径-->
<!-- 日志聚集功能启动 -->
<property><name>yarn.log-aggregation-enable</name><value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property><name>yarn.log-aggregation.retain-seconds</name><value>604800</value>
</property><property><name>yarn.log.server.url</name><value>http://single:19888/jobhistory/logs</value>
</property>
<!--关闭yarn对虚拟内存的限制检查 -->
<property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value>
</property>

image-20230718212909109

image-20230822192349611

  • workers/slaves 配置HDFS和YARN的从节点的主机
    • 配置DN和NM在哪些节点上需要安装
vim workers
<!-- 将localhost改为single -->
single

image-20230718213001560

  • log4j.properties —— 配置Hadoop运行过程中日志输出目录
vim log4j.properties
#第19行
hadoop.log.dir=/opt/app/hadoop-3.1.4/logs 
#指定Hadoop运行过程中日志输出目录

image-20230719092759757

六、格式化HDFS集群

hdfs namenode -format

七、启动HDFS和YARN

  • HDFS

    • start-dfs.sh

    报错

    image-20230718213604928

    解决方案:

    vim /etc/profile
    #在最后一行加入以下内容
    # HADOOP 3.X版本还需要增加如下配置
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root
    #然后使配置文件生效
    source /etc/profile
    

    image-20230718213809936

    image-20230718214052308

    • stop-dfs.sh
    • 提供了一个web访问网站,可以监控整个HDFS集群的状态信息
      http://ip:9870 hadoop3.x
      ip:50070 hadoop2.x
  • yarn

    • start-yarn.sh

    image-20230718214130649

    • stop-yarn.sh
    • 提供了一个web网站,可以监控整个YARN集群的状态:
      http://ip:8088

八、Hadoop的完全分布式安装

1、克隆虚拟机

三台虚拟机需要配置IP、主机名、主机IP映射、ssh免密登录、时间服务器的安装同步、yum数据仓库更换为国内镜像源

image-20230719095947238

image-20230719095813819

image-20230719100610519

image-20230719101920020

时间服务器chrony的安装同步

yum install -y chrony

image-20230719103934985

先配置主服务器

vim /etc/chrony.conf

在第7行添加allow 192.168.31.0/24

image-20230719104240688

再配置两台从服务器

vim /etc/chrony.conf

就将3 - 6行的server删除后,添加一行server node1 iburst

image-20230719104606877

开启服务

image-20230719104959143

2、安装JDK

此处省略,如需请查看之前博客

3、安装Hadoop完全分布式

  • hdfs.site.xml
<configuration><property><name>dfs.replication</name><value>3</value></property><!--secondary namenode地址--><property><name>dfs.namenode.secondary.http-address</name><value>node3:9868</value></property><!--hdfs取消用户权限校验--><property><name>dfs.permissions.enabled</name><value>false</value>      </property><property><name>dfs.namenode.datanode.registration.ip-hostname-check</name><value>true</value></property>
</configuration>

image-20230719112153586

  • yarn.site.xml
<configuration>
<!-- reducer获取数据的方式 --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 指定YARN的ResourceManager的地址 --><property><name>yarn.resourcemanager.hostname</name><value>node2</value></property><property><name>yarn.application.classpath</name><value>/opt/app/hadoop-3.1.4/etc/hadoop,/opt/app/hadoop-3.1.4/share/hadoop/common/*,/opt/app/hadoop-3.1.4/share/hadoop/common/lib/*,/opt/app/hadoop-3.1.4/share/hadoop/hdfs/*,/opt/app/hadoop-3.1.4/share/hadoop/hdfs/lib/*,/opt/app/hadoop-3.1.4/share/hadoop/mapreduce/*,/opt/app/hadoop-3.1.4/share/hadoop/mapreduce/lib/*,/opt/app/hadoop-3.1.4/share/hadoop/yarn/*,/opt/app/hadoop-3.1.4/share/hadoop/yarn/lib/*</value></property>
</configuration>

image-20230719112649613

  • mapred-site.xml
 <!-- 指定mr运行在yarn上 --><property><name>mapreduce.framework.name</name><value>yarn</value></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>

image-20230719112903402

共需配置九个相关文件

image-20230719113122255

然后将node1上的/opt/app发送到node2和node3节点上的/opt上

scp -r /opt/app root@node2:/opt

4、格式化HDFS

namenode所在节点格式化

hdfs namenode -format

5、启动HDFS和YARN

1、 HDFS是在namenode所在节点启动(node1)

2、YARN是在RM所在节点启动(node2)

相关文章:

Hadoop的概述与安装

Hadoop的概述与安装 一、Hadoop内部的三个核心组件1、HDFS&#xff1a;分布式文件存储系统2、YARN&#xff1a;分布式资源调度系统3、MapReduce&#xff1a;分布式离线计算框架4、Hadoop Common&#xff08;了解即可&#xff09; 二、Hadoop技术诞生的一个生态圈数据采集存储数…...

进程、线程与构造方法

进程、线程与构造方法 目录 一&#xff0e; 进程与线程1. 通俗解释2. 代码实现3. 线程生命周期&#xff08;图解&#xff09; 二&#xff0e; 构造方法 一&#xff0e; 进程与线程 1. 通俗解释 进程&#xff1a;就像电脑上运行的软件&#xff0c;例如QQ等。 线程&#xff1a;…...

04 Linux补充|C/C++

目录 Linux补充 C语⾔ C语言中puts和printf的区别&#xff1f; Linux补充 (1)ubuntu安装ssh服务端openssh-server命令&#xff1a; ubuntu安装后默认只有ssh客户端&#xff0c;只能去连其它ssh服务器&#xff1b;其它客户端想要连接这个ubuntu系统&#xff0c;需要安装部署…...

利用python制作AI图片优化工具

将模糊图片4K高清化效果如下&#xff1a; 优化前的图片 优化后如下图&#xff1a; 优化后图片变大变清晰了效果很明显 软件界面如下&#xff1a; 所用工具和代码&#xff1a; 1、所需软件包 网盘链接&#xff1a;https://pan.baidu.com/s/1CMvn4Y7edDTR4COfu4FviA提取码&…...

React v6(仅支持函数组件,不支持类组件)与v5版本路由使用详情和区别(详细版)

1.路由安装(默认安装最新版本6.15.0) npm i react-router-dom 2.路由模式 有常用两种路由模式可选&#xff1a;HashRouter 和 BrowserRouter。 ①HashRouter&#xff1a;URL中采用的是hash(#)部分去创建路由。 ②BrowserRouter&#xff1a;URL采用真实的URL资源&#xff0c;…...

(数字图像处理MATLAB+Python)第十二章图像编码-第一、二节:图像编码基本理论和无损编码

文章目录 一&#xff1a;图像编码基本理论&#xff08;1&#xff09;图像压缩的必要性&#xff08;2&#xff09;图像压缩的可能性A&#xff1a;编码冗余B&#xff1a;像素间冗余C&#xff1a;心理视觉冗余 &#xff08;3&#xff09;图像压缩方法分类A&#xff1a;基于编码前后…...

【Unity编辑器扩展】| 顶部菜单栏扩展 MenuItem

前言【Unity编辑器扩展】 | 顶部菜单栏扩展 MenuItem一、创建多级菜单二、创建可使用快捷键的菜单项三、调节菜单显示顺序和可选择性四、创建可被勾选的菜单项五、右键菜单扩展5.1 Hierarchy 右键菜单5.2 Project 右键菜单5.3 Inspector 组件右键菜单六、AddComponentMenu 特性…...

golang读取键盘功能按键输入

golang读取键盘功能按键输入 需求 最近业务上需要做一个终端工具&#xff0c;能够直接连到docker容器中进行交互。 技术选型 docker官方提供了python sdk、go sdk和remote api。 https://docs.docker.com/engine/api/sdk/ 因为我们需要提供命令行工具&#xff0c;因此采用g…...

用sklearn实现线性回归和岭回归

此文为ai创作&#xff0c;今天写文章的时候发现创作助手限时免费&#xff0c;想测试一下&#xff0c;于是就有了这篇文章&#xff0c;看的出来&#xff0c;效果还可以&#xff0c;一行没改。 线性回归 在sklearn中&#xff0c;可以使用线性回归模型做多变量回归。下面是一个示…...

结构型模式-桥接模式

用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化。这种类型的设计模式属于结构型模式&#xff0c;它通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&#xff0c;使得实体类的功能独立于接口实现类&#xf…...

缓存的放置时间和删除时间

缓存的放置时间和删除时间是指缓存中存储的数据的生命周期。这两个时间点非常重要&#xff0c;因为它们决定了缓存数据的有效期和何时应该从缓存中删除。 缓存的放置时间&#xff08;Cache Put Time&#xff09;&#xff1a;这是指数据首次放入缓存的时间点。当数据被放入缓存时…...

内网穿透实战应用-如何通过内网穿透实现远程发送个人本地搭建的hMailServer的邮件服务

文章目录 1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpolar内网映射工…...

ensp基础命令大全(华为设备命令)

路漫漫其修远兮&#xff0c;吾将上下而求索 今天写一些曾经学习过的网络笔记&#xff0c;希望对您的学习有所帮助。 OSPF,BGP,IS-IS的命令笔记没有写上来&#xff0c;计划单独写&#xff0c;敬请期待&#xff0c;或者您可以在这个网站查查 &#xff1a; 万能查询网站 …...

thinkphp6 入门(4)--数据库操作 增删改查

一、设计数据库表 比如我新建了一个数据库表&#xff0c;名为test 二、配置数据库连接信息 本地测试 直接在.env中修改&#xff0c;不用去config/database.php中修改 正式环境 三、增删改查 引入Db库 use think\facade\Db; 假设新增的控制器路径为 app\test\control…...

MyBatisPlus 基础实现(一)

说明 创建一个最基本的MyBatisPlus项目&#xff0c;参考官网。 依赖 MyBatisPlus 依赖&#xff0c;最新版是&#xff1a;3.5.3.2 &#xff08;截止2023-9-4&#xff09;。 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-bo…...

jmeter 计数器Counter

计数器可以用于生成动态的数值或字符串&#xff0c;以模拟不同的用户或数据。 计数器通常与用户线程组结合使用&#xff0c;以生成不同的变量值并在测试中应用。以下是计数器的几个常用属性&#xff1a; 变量前缀&#xff08;Variable Name Prefix&#xff09;&#xff1a;定义…...

OpenCV(十九):模板匹配

1.模板匹配&#xff1a; OpenCV提供了一个模板匹配函数&#xff0c;用于在图像中寻找给定模板的匹配位置。 2.图像模板匹配函数matchTemplate void matchTemplate( InputArray image, InputArray templ, OutputArray result, int method, InputArray mask noArray() ); image…...

【iOS】Category、Extension和关联对象

Category分类 Category 是 比继承更为简洁 的方法来对Class进行扩展,无需创建子类就可以为现有的类动态添加方法。 可以给项目内任何已经存在的类 添加 Category甚至可以是系统库/闭源库等只暴露了声明文件的类 添加 Category (看不到.m 文件的类)通过 Category 可以添加 实例…...

支持向量机(一)

文章目录 前言分析数据集线性可分情况下的支持向量机原始问题凸优化包解法对偶问题凸优化包解法 数据集线性不可分情况下的线性支持向量机与软间隔最大化 前言 在支持向量机中&#xff0c;理论逻辑很简单&#xff1a;最大化最小的几何间隔。但是实际编写代码过程中有一个小点需…...

MyBatis中至关重要的关系映射----全方面介绍

目录 一 对于映射的概念 1.1 三种关系映射 1.2 resultType与resultMap的区别 resultType&#xff1a; resultMap&#xff1a; 二&#xff0c;一对一关联查询 2.1 嵌套结果集编写 2.2 案例演示 三&#xff0c;一对多关联查询 3.1 嵌套结果集编写 3.3 案例演示 四&…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...