hadoop(服务器伪分布式搭建)

1. 报错 Windows 上写的脚本 拷贝到 Linux(比如 CentOS)系统时会出现。

bash: ./set_java_home.sh: /bin/bash^M: bad interpreter: No such file or directory

报错原因

^M 是 Windows 的换行符(\r\n)
Linux 使用的是 Unix 格式的换行符(\n)
所以你的脚本第一行的 #!/bin/bash 实际上变成了:
#!/bin/bash^M

解决方法把脚本转换为 Unix 格式

使用 dos2unix 命令

dos2unix set_java_home.sh
##如果没有下面就是安装命令
yum install dos2unix -y

2. 解决centos里面多版本java,统中默认的 Java(通过 alternatives 指定的)自动同步到 JAVA_HOME,以保证一致性。

#!/bin/bash# 配置你的 Java 安装路径(按你提供的内容)
JAVA8_PATH="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64"
JAVA11_PATH="/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64"# 参数校验
if [[ $1 == "8" ]]; thenecho "🔄 正在切换到 Java 8..."sudo alternatives --set java $JAVA8_PATH/jre/bin/javasudo alternatives --set javac $JAVA8_PATH/bin/javacexport JAVA_HOME=$JAVA8_PATH
elif [[ $1 == "11" ]]; thenecho "🔄 正在切换到 Java 11..."sudo alternatives --set java $JAVA11_PATH/bin/javasudo alternatives --set javac $JAVA11_PATH/bin/javacexport JAVA_HOME=$JAVA11_PATH
elseecho "❌ 参数错误,请输入 8 或 11,例如:"echo "   source ./switch-java.sh 8"echo "   source ./switch-java.sh 11"return 1
fi# 清理旧 PATH 中的 JAVA_HOME 相关路径
export PATH=$(echo "$PATH" | awk -v RS=: -v ORS=: '/java/ {next} {print}' | sed 's/:$//')# 加入新 JAVA_HOME/bin
export PATH=$JAVA_HOME/bin:$PATH# 显示结果
echo "✅ 已切换至 JAVA_HOME: $JAVA_HOME"
java -version
##到对应位置运行这个脚本,前面加上source,就是全局运行,不加的话就是在一个进程里面运行,检查的时候可能检查不到
source switch-java.sh 8
source switch-java.sh 11
##检查命令
echo $JAVA_HOME

下图是切换Java8的source scripts/switch-java.sh 8
在这里插入图片描述
下图是切换java11的source scripts/switch-java.sh 11
在这里插入图片描述

设置重新启动服务器,以后默认的环境变量中的java的版本

vim ~/.bashrc
##添加
# 每次登录自动设置 Java 8 为默认(你自己上面脚本存放的位置)
source $HOME/scripts/switch-java.sh 8
或
# 每次登录自动设置 Java 11 为默认$HOME指的是根目录root
source $HOME/scripts/switch-java.sh 11
# 最后执行
source ~/.bashrc

Hadoop

安装教程
官网链接:https://hadoop.apache.org/releases.html
不同的安装包的区别

文件名含义
source源码包,需要你自己编译(不推荐初学者)
binary官方编译好的二进制包(✅推荐)
binary-aarch64针对 ARM 架构的电脑(如苹果 M1/M2、树莓派)
binary-lean精简版本(一般不推荐)

推荐下载的安装包:Hadoop 3.3.6 binary
下载地址:https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
下载完成后上传到服务器
我上传的目录是/usr/local

cd /usr/local/
tar -zxvf hadoop-3.3.6.tar.gz
mv hadoop-3.3.6 hadoop

执行完上述命令后Hadoop 安装路径是 /usr/local/hadoop
在这里插入图片描述
配置环境变量配置文件

vim ~/.bashrc
#把下面的内容写到配置文件里面
#我的java已经配置了,不需要配置java了如图
# Hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

在这里插入图片描述

#让配置文件生效重新加载
source ~/.bashrc
#测试是否生效,如下图已经安装完成
hadoop version

在这里插入图片描述

hadoop理解

干嘛用的:
是为了解决“单机无法处理超大数据”的问题,通过“分布式存储(HDFS)+ 分布式计算(MapReduce)”来高效地处理海量数据。
用于存储和处理超大规模数据(TB、PB 级别)。
原理:
1.把大文件切成小块分布存储在多台机器上(HDFS)
2.把任务拆成小任务并行处理,最后汇总结果(MapReduce)
核心组件与原理图解
在这里插入图片描述
Hadoop 核心原理组件解释

组件功能
HDFS分布式文件系统,把大文件切成块存到多台机器,每块默认保存 3 份(容错)
MapReduce分布式计算框架,把任务拆成 map → shuffle → reduce,分布式并行处理
YARN资源调度框架,决定哪些机器执行哪些任务
NameNodeHDFS 中的“总目录”,保存文件结构、块位置(元数据)
DataNode实际存储数据块的节点
ResourceManager管理所有节点资源,分配任务
NodeManager每个节点的“本地资源控制器”,接收任务并执行

应用场景:分布式存储和海量数据计算,用在“大数据”场景下。

场景描述
日志分析网站、APP、大型平台的用户访问日志分析(TB 级)
数据仓库(Hive)用 SQL 处理海量结构化数据
ETL 处理(+Sqoop)数据抽取(从 MySQL 导入)、转换、加载
搜索引擎爬虫把抓取网页分布式处理、存储
图像视频处理多节点同时处理图片/视频数据(如压缩、转码)
机器学习预处理对大规模训练数据进行 MapReduce 处理
互联网企业分析系统淘宝、百度、腾讯、头条等早期都用了 Hadoop 搭建离线数据处理平台

Hadoop优势

优势说明
高可扩展加机器就能扩容(线性扩展)
高容错自动备份副本,节点宕了也不会丢数据
大规模处理支持 TB/PB 级别数据处理
高性价比可用普通商用服务器构建分布式平台
开源生态丰富Hive、Spark、HBase、Flink 都能集成 Hadoop 存储

不适合的地方

不适合场景说明
实时计算(ms 级)Hadoop 是离线批处理,延迟分钟级
小数据场景启动 MapReduce 比处理本身还慢
高频低延迟系统比如金融交易系统、秒杀系统,不适合 Hadoop
高并发 OLTPHadoop 不支持事务处理和高并发读写操作

运行模式

模式是否需要配置 XML是否需要创建 tmp、namenode、datanode 等目录是否需要启动服务
1. 本地模式(Local Mode)❌ 不需要❌ 不需要❌ 不需要
2. 伪分布式模式✅ 需要✅ 必须创建✅ 启动 HDFS/YARN
3. 真分布式模式✅ 需要✅ 必须创建(不同节点)✅ 启动多节点服务

hadoop部署伪分布式

第一步创建 Hadoop 所需的工作目录

mkdir -p /usr/local/hadoop/tmp
mkdir -p /usr/local/hadoop/hdfs/namenode
mkdir -p /usr/local/hadoop/hdfs/datanode
目录作用
/usr/local/hadoop/tmpHadoop 运行时的临时文件目录(如锁文件、缓存)
/usr/local/hadoop/hdfs/namenode存储 NameNode 元数据(如文件目录结构、块位置)
/usr/local/hadoop/hdfs/datanode存储 DataNode 的实际数据块(HDFS 文件数据)

NameNode 认为 /usr/local/hadoop/hdfs/namenode 是它的持久存储位置。
DataNode 把数据块写入 /usr/local/hadoop/hdfs/datanode。
tmp 用来缓存、写日志、写运行时中间文件。

第 2 步:编辑配置文件
配置文件路径:/usr/local/hadoop/etc/hadoop/
2.1. core-site.xml

vim /usr/local/hadoop/etc/hadoop/core-site.xml

内容:需要外部访问配置hdfs://主机名称:9000

<configuration><property><name>fs.defaultFS</name><value>hdfs://主机名称(或者是你的ip注意要和下面的文件中的保持一致):9000</value></property><property><name>hadoop.tmp.dir</name><value>/usr/local/hadoop/tmp</value></property>
</configuration>

2.2 hdfs-site.xml

vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml

内容:

<configuration><!-- 设置副本数为1(伪分布式) --><property><name>dfs.replication</name><value>1</value></property><!-- NameNode 存储目录 --><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/hdfs/namenode</value></property><!-- DataNode 存储目录 --><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/hdfs/datanode</value></property><!-- DataNode 注册使用公网IP(重要) --><property><name>dfs.datanode.hostname</name><value>你自己的主机名称或者是ip</value></property><!-- DataNode 与客户端通信使用 hostname(IP) --><property><name>dfs.datanode.use.datanode.hostname</name><value>true</value></property><!-- 客户端使用 hostname(IP) 访问 DataNode --><property><name>dfs.client.use.datanode.hostname</name><value>true</value></property><!-- 开放 NameNode RPC(绑定到所有网卡) --><property><name>dfs.namenode.rpc-bind-host</name><value>0.0.0.0</value></property><!-- 可选:关闭主机名校验,允许 IP 注册 --><property><name>dfs.namenode.reject-unresolved-datanode-hostname</name><value>false</value></property></configuration>

2.3 mapred-site.xml

vim /usr/local/hadoop/etc/hadoop/mapred-site.xml

内容:

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>

2.4 yarn-site.xml

vim /usr/local/hadoop/etc/hadoop/yarn-site.xml

内容:

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

第三步配置免密登录

ssh-keygen -t rsa        # 全部回车
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ssh localhost            # 确保不需要输入密码

第四步:格式化 HDFS(只做一次)

hdfs namenode -format
#后面如果再需要格式化需要关闭这两个
stop-dfs.sh
stop-yarn.sh

第五步:启动命令

#停止命令
stop-dfs.sh
#启动命令
start-dfs.sh
start-yarn.sh
#jps用于列出当前系统中所有的HotSpot Java虚拟机进程
jps                             # 查看服务是否正常## 报错
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
#你在用 root 用户执行 start-dfs.sh 命令
#Hadoop 默认不允许你用 root 来启动 HDFS 守护进程(安全考虑)## 下面是解决方法 以及其他命令
#创建用户
useradd hadoop
passwd hadoop
#把Hadoop 安装目录权限改给 hadoop 用户:
chown -R hadoop:hadoop /usr/local/hadoop
#给hadoop用户赋予sudo权限(centos7)
usermod -aG wheel hadoop
#其他关于防火墙的命令可选
sudo firewall-cmd --permanent --add-port=9000/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
#切换用户
su - hadoop
vim ~/.bashrc #编辑,不同用户不同的环境变量文件
#切换完用户后从新配置java和hadoop的环境变量(如下图)
#我Java的环境变量是一个脚本文件(Java8 和java11需要切换),根据自己的需求配置
#保存后再执行(让配置文件生效)
source ~/.bashrc
#验证是否生效
echo $JAVA_HOME
echo $HADOOP_HOME
which hadoop

在这里插入图片描述
在这里插入图片描述总总结:hadoop是什么,是用来处理海量数据的,然后有两大核心模块,一个就是,分布式文件HDFS(Hadoop Distributed File System),里面有两种节点NameNode和DataNode ,HDFS会把一个大文件分成块(block默认大小是128MB)每个块会有多个副本存在不同的服务器上(默认3个),具体的内容存在DataNode里面,而NameNode相当于DataNode的目录。

hadoop操作上传,下载,读取文件的命令

#查看HDFS的根目录
hdfs dfs -ls /
# 创建用户目录
hdfs dfs -mkdir -p /user/hadoop
# 创建临时目录(某些程序可能会用到)
hdfs dfs -mkdir /tmp
# 设置临时目录权限为 777(某些程序依赖)
hdfs dfs -chmod -R 777 /tmp上传文件
hdfs dfs -put /本地路径/文件名 /HDFS目标路径
#列子
hdfs dfs -put /home/hadoop/files/剑来01.mp4 /user/hadoop/
#查看是否上传成功
hdfs dfs -ls /user/hadoop/

在这里插入图片描述

# 查看文件块和位置
hdfs fsck /user/hadoop/剑来01.mp4 -files -blocks -locations
输出:
Status: HEALTHY
# ✅ 文件健康,未缺块、未损坏Number of data-nodes:	1
# 📦 当前集群中只有1个 DataNode(单节点伪分布式)Number of racks:	1
# 📶 当前仅配置了1个机架(Rack)Total dirs:	0
# 📁 总共目录数量为0(因为只检查了一个文件)Total symlinks:	0
# 🔗 符号链接数量为0(HDFS中很少使用符号链接)Replicated Blocks:Total size:	2655188930 B# 📄 文件总大小约 2.65GBTotal files:	1# 📁 本次检查的文件数量Total blocks (validated):	20 (avg. block size 132759446 B)# 📦 文件被切分为20个块,每个块平均约132MB(符合HDFS默认128MB)Minimally replicated blocks:	20 (100.0 %)# ✅ 所有块至少有1个副本,符合设定的副本数Over-replicated blocks:	0 (0.0 %)# 📈 没有副本数量超出配置的块Under-replicated blocks:	0 (0.0 %)# 📉 没有副本数量不足的块Mis-replicated blocks:	0 (0.0 %)# ⚠️ 块没有分布不合理(如所有副本都集中在同一节点)的问题Default replication factor:	1# 🔁 当前系统默认副本数为1(单节点无法设置更高)Average block replication:	1.0# 📊 所有块平均有1个副本Missing blocks:	0# ❌ 没有缺失的块Corrupt blocks:	0# ❌ 没有损坏的块Missing replicas:	0 (0.0 %)# ❌ 所有副本都存在,没有副本缺失Blocks queued for replication:	0# 📋 没有等待复制的块(说明副本充足)Erasure Coded Block Groups:Total size:	0 BTotal files:	0Total block groups (validated):	0Minimally erasure-coded block groups:	0Over-erasure-coded block groups:	0# ✳️ 未使用 Erasure Coding(纠删码),这是一种高级存储方式,用于节省空间,当前未启用# 查看集群副本默认配置
hdfs getconf -confKey dfs.replication
# 输出文件大小
hdfs dfs -du -h /user/hadoop/
#下载
hdfs dfs -get /user/hadoop/剑来01.mp4 ./
#预览内容
#查看文件的开头
hdfs dfs -cat /user/hadoop/data1.txt | head
#查看结尾(日志)
hdfs dfs -tail /user/hadoop/log.txt
#查看前几行
hdfs dfs -cat /user/hadoop/data2.csv | head -n 5
#过滤
hdfs dfs -ls /user/hadoop/ | grep '\.csv'
#查找
hdfs dfs -find / -name "*.csv"
#查找特定名字
hdfs dfs -find / -name "data2025-*.txt"
#删除
hdfs dfs -rm /user/hadoop/剑来01.mp4
#用 hdfs dfs -ls 查看上传了哪些文件
#用 -cat、-tail、head 查看内容判断是不是你要的
#用 -du -h 看大小,或 grep / find 辅助筛选

Hadoop端口介绍

端口类型服务用法是否浏览器能访问
9000RPC通信端口NameNodeHadoop 命令通信(如 put、get、ls)❌ 不行,后台服务端口
9870Web UINameNode Web浏览 HDFS 目录、查看块位置✅ 可以
9864Web UIDataNode Web查看 DataNode 状态和数据块✅ 可以
8088Web UIYARN ResourceManager查看作业运行状态✅ 可以

hadoop安全模式

重新启动的时候会进入到安全模式

# 查看安全模式状态
hdfs dfsadmin -safemode get
#强制退出安全模式
hdfs dfsadmin -safemode leave
# 输出示例:
# Safe mode is ON
# 或
# Safe mode is OFF

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超详细 anji-captcha滑块验证springboot+uniapp微信小程序前后端组合

目录 1&#xff1a;pom文件引入jar包 2&#xff1a;配置文件 3&#xff1a;踩坑-1 4&#xff1a;踩坑-2 5&#xff1a;后端二次验证 6&#xff1a;自定义背景图 给用户做的一个小程序&#xff0c;被某局安全验证后&#xff0c;说登录太简单&#xff0c;没有验证码等行为认…

使用AVPlayer播放FairPlay DRM视频的最佳实践

01DRM 介绍DRM&#xff0c;即数字版权管理&#xff08;Digital Rights Management&#xff09;&#xff0c;是指使用加密技术保护视频内容、通过专业技术安全地存储和传输密钥&#xff08;加密密钥和解密密钥&#xff09;、并允许内容生产商设置商业规则&#xff0c;限制内容观…

《机器学习数学基础》补充资料:拉格朗日乘子法

瑞士数学家欧拉&#xff08;Leonhard Euler&#xff0c;1707-1783&#xff09;的大名&#xff0c;如雷贯耳——欧拉&#xff0c;是按德文发音翻译。欧拉不仅是公认的十八世纪最伟大的数学家&#xff0c;还是目前史上最多产的数学家。所著的书籍及论文多达 886 部&#xff08;篇…

【PTA数据结构 | C语言版】二叉堆的朴素建堆操作

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;将 n 个顺序存储的数据用朴素建堆操作调整为最小堆&#xff1b;最后顺次输出堆中元素以检验操作的正确性。 输入格式&#xff1a; 输入首先给出一个正整数 c&#xff08;≤1…

深入解析PyQt5信号与槽的高级玩法:解锁GUI开发新姿势

信号与槽机制是PyQt框架实现组件间通信的核心技术。掌握其高级用法能极大提升开发效率和代码灵活性。本文将通过六大核心模块&#xff0c;结合实战案例&#xff0c;全方位解析信号与槽的进阶使用技巧。自定义信号与槽的完全指南 1. 信号定义规范 class CustomWidget(QWidget):#…

gitee某个分支合并到gitlab目标分支

一、克隆Gitee仓库到本地 git clone https://gitee.com/用户名/仓库名.gitcd 仓库名二、添加 GitLab 仓库作为远程仓库 git remote add gitlab https://gitlab.com/用户名/仓库名.git三、查看所有远程仓库 git remote -v四、拉取 Gitee 上的目标分支 git fetch origin 分支名五…

PyQt5信号与槽(信号与槽的高级玩法)

信号与槽的高级玩法 高级自定义信号与槽 所谓高级自定义信号与槽&#xff0c;指的是我们可以以自己喜欢的方式定义信号与槽函 数&#xff0c;并传递参数。自定义信号的一般流程如下&#xff1a; &#xff08;1&#xff09;定义信号。 &#xff08;2&#xff09;定义槽函数。 &a…

第5天 | openGauss中一个用户可以访问多个数据库

接着昨天继续学习openGauss,今天是第五天了。今天学习内容是使用一个用户访问多个数据库。 老规矩&#xff0c;先登陆墨天轮为我准备的实训实验室 rootmodb:~# su - omm ommmodb:~$ gsql -r创建表空间music_tbs、数据库musicdb10 、用户user10 并赋予 sysadmin权限 omm# CREATE…

Vue3 Anime.js超级炫酷的网页动画库详解

简介 Anime.js 是一个轻量级的 JavaScript 动画库&#xff0c;它提供了简单而强大的 API 来创建各种复杂的动画效果。以下是 Anime.js 的主要使用方法和特性&#xff1a; 安装 npm install animejs 基本用法 <script setup> import { ref, onMounted } from "vu…

苦练Python第18天:Python异常处理锦囊

苦练Python第18天&#xff1a;Python异常处理锦囊 原文链接&#xff1a;https://dev.to/therahul_gupta/day-18100-exception-handling-with-try-except-in-python-3m5a 作者&#xff1a;Rahul Gupta 译者&#xff1a;倔强青铜三 前言 大家好&#xff0c;我是倔强青铜三。是一名…

JVM——如何对java的垃圾回收机制调优?

GC 调优的核心思路就是尽可能的使对象在年轻代被回收&#xff0c;减少对象进入老年代。 具体调优还是得看场景根据 GC 日志具体分析&#xff0c;常见的需要关注的指标是 Young GC 和 Full GC 触发频率、原因、晋升的速率、老年代内存占用量等等。 比如发现频繁会产生 Ful GC&am…

正则表达式使用示例

下面以 Vue&#xff08;前端&#xff09;和 Spring Boot&#xff08;后端&#xff09;为例&#xff0c;展示正则表达式在前后端交互中的应用&#xff0c;以邮箱格式验证为场景&#xff1a;1.前端<template><div class"register-container"><h3>用户…

云端微光,AI启航:低代码开发的智造未来

文章目录前言一、引言&#xff1a;技术浪潮中的个人视角初次体验腾讯云开发 Copilot1.1 低代码的时代机遇1.1.1 为什么低代码如此重要&#xff1f;1.2 AI 的引入&#xff1a;革新的力量1.1.2 Copilot 的亮点1.3 初学者的视角1.3.1 Copilot 带来的改变二、体验记录&#xff1a;云…

图片上传实现

图片上传change函数图片上传图片上传到服务器上传的图片在该页面中显示修改界面代码最终实现效果change函数 这里我们先用输入框控件来举例&#xff1a; 姓名&#xff1a;<input typetext classname>下面我们来写 js 语句&#xff0c;对控件进行绑事件来获取输入框内的…

【PTA数据结构 | C语言版】多叉堆的上下调整

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;将 n 个已经满足 d 叉最小堆顺序约束的数据直接读入最小堆&#xff1b;随后将下一个读入的数据 x 插入堆&#xff1b;再执行删顶操作并输出删顶的元素&#xff1b;最后顺次输…

selenium后续!!

小项目案例:实现批量下载网页中的资源根据15.3.2小节中的返回网页内容可知,用户只有获取了网页中的图片url才可以将图片下载到*在使用selenium库渲染网页后,可直接通过正则表达式过滤出指定的网页图片&#xff0c;从而实现批量下载接下来以此为思路来实现一个小项目案例。项目任…

深度解析Linux文件I/O三级缓冲体系:用户缓冲区→标准I/O→内核页缓存

在Linux文件I/O操作中&#xff0c;缓冲区的管理是一个核心概念&#xff0c;主要涉及用户空间缓冲区和内核空间缓冲区。理解这两者的区别和工作原理对于高效的文件操作至关重要。 目录 一、什么是缓冲区 二、为什么要引入缓冲区机制 三、三级缓冲体系 1、三级缓冲体系全景图…

【每日算法】专题十三_队列 + 宽搜(bfs)

1. 算法思路 BFS 算法核心思路 BFS&#xff08;广度优先搜索&#xff09;使用 队列&#xff08;Queue&#xff09;按层级顺序遍历图或树的节点。以下是 C 实现的核心思路和代码模板&#xff1a; 算法框架 #include <queue> #include <vector> #include <un…

【动手实验】发送接收窗口对 TCP传输性能的影响

环境准备 服务器信息 两台腾讯云机器 t04&#xff08;172.19.0.4&#xff09;、t11&#xff08;172.19.0.11&#xff09;&#xff0c;系统为 Ubuntu 22.04&#xff0c;内核为 5.15.0-139-generic。默认 RT 在 0.16s 左右。 $ ping 172.19.0.4 PING 172.19.0.4 (172.19.0.4) …

28、鸿蒙Harmony Next开发:不依赖UI组件的全局气泡提示 (openPopup)和不依赖UI组件的全局菜单 (openMenu)、Toast

目录 不依赖UI组件的全局气泡提示 (openPopup) 弹出气泡 创建ComponentContent 绑定组件信息 设置弹出气泡样式 更新气泡样式 关闭气泡 在HAR包中使用全局气泡提示 不依赖UI组件的全局菜单 (openMenu) 弹出菜单 创建ComponentContent 绑定组件信息 设置弹出菜单样…