Ubuntu26.04-Hadoop3.5.0搭建hive4.2.0

Ubuntu26.04-Hadoop3.5.0搭建hive4.2.0

准备

HDFS配置

bash 复制代码
vim $HADOOP_HOME/etc/hadoop/core-site.xml 
xml 复制代码
  <!--配置所有节点的lhz用户都可作为代理用户-->
  <property>
    <name>hadoop.proxyuser.lhz.hosts</name>
    <value>*</value>
  </property>

  <!--配置lhz用户能够代理的用户组为任意组-->
  <property>
    <name>hadoop.proxyuser.lhz.groups</name>
    <value>*</value>
  </property>

  <!--配置lhz用户能够代理的用户为任意用户-->
  <property>
    <name>hadoop.proxyuser.lhz.users</name>
    <value>*</value>
  </property>

启动Hadoop

bash 复制代码
# 启动hadoop
start-hadoop.sh
# 检查hadoop进程
jps
# 检查各端口
netstat -aplnt | grep java

安装MySQL

升级软件列表

bash 复制代码
sudo apt update

升级内核和软件

bash 复制代码
sudo apt -y dist-upgrade

在线安装MySQL

bash 复制代码
sudo apt -y install mysql-server

修改mysql密码

  1. 登录MySQL

    bash 复制代码
    sudo mysql -u root
  2. 修改MySQL密码

    sql 复制代码
    -- 查看现有root用户
    SELECT user, host, plugin FROM mysql.user WHERE user='root';
    
    -- 修改root@localhost的认证方式为密码认证
    ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'lihaozhe';
    FLUSH PRIVILEGES;

设置MySQL远程访问

  1. 登录MySQL后,修改现有用户的host

    sql 复制代码
    UPDATE mysql.user SET host='%' WHERE user='root' AND host='localhost';
    FLUSH PRIVILEGES;
  2. 修改MySQL配置文件

    bash 复制代码
    sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

    找到并修改bind-address

    bash 复制代码
    # 将这行:
    bind-address = 127.0.0.1
    
    # 改为:
    bind-address = 0.0.0.0
    # 或者注释掉这行(#bind-address = 127.0.0.1)

重启MySQL服务

bash 复制代码
sudo systemctl restart mysql

远程客户端测试

bash 复制代码
mysql -h lihaozhe03 -uroot -p

安装hive

bash 复制代码
# 将软件上传到 /home/lhz/opt 目录
wget -P ~/opt https://dlcdn.apache.org/hive/hive-4.2.0/apache-hive-4.2.0-bin.tar.gz
# 解压hive
tar -zxvf ~/opt/apache-hive-4.2.0-bin.tar.gz -C ~/opt
# 目录改名
mv  ~/opt/apache-hive-4.2.0-bin  ~/opt/hive-4
# 进入配置文件目录
cd  ~/opt/hive-4/conf
# 编辑环境配置文件
vim hive-env.sh
# 编辑配置文件
vim hive-site.xml

hive-env.sh

hadoop 安装路径 export HADOOP_HOME=/home/lhz/opt/hadoop-3/

hive 配置文件路径 export HIVE_CONF_DIR=/home/lhz/opt/hive-4/conf/****

bash 复制代码
export JAVA_HOME=/home/lhz/opt/jdk-25
export HADOOP_HOME=/home/lhz/opt/hadoop-3/
export HIVE_CONF_DIR=/home/lhz/opt/hive-4/conf/

hive-site.xml

需要修改的位置提炼如下:

xml 复制代码
<configuration>
  <!-- ======== MetaStore 元数据库连接 (MySQL) ======== -->

  <!-- 元数据库 JDBC 连接 URL (MySQL, utf8 编码, 禁用 SSL) -->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://lihaozhe03:3306/hive?allowPublicKeyRetrieval=true&amp;useUnicode=true&amp;createDatabaseIfNotExist=true&amp;characterEncoding=UTF8&amp;useSSL=false&amp;useServerPrepStmts=false&amp;rewriteBatchedStatements=true&amp;cachePrepStmts=true&amp;allowMultiQueries=true&amp;serverTimeZone=Asia/Shanghai&amp;sslMode=DISABLED</value>
  </property>

  <!-- JDBC 驱动类: MySQL Connector/J 8.x -->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
  </property>

  <!-- 元数据库用户名 -->
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>

  <!-- 元数据库密码 (明文, 生产环境应考虑加密) -->
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>lihaozhe</value>
  </property>

  <!-- ======== 数据仓库目录 ======== -->

  <!-- Hive 表数据在 HDFS 上的默认存储根目录 -->
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  </property>

  <!-- ======== 临时 / 下载目录 ======== -->

  <!-- MR 任务在 HDFS 上的临时工作目录 -->
  <property>
    <name>hive.exec.scratchdir</name>
    <value>/user/hive/tmp</value>
  </property>

  <!-- MR 任务在本地节点上的临时工作目录 -->
  <property>
    <name>hive.exec.local.scratchdir</name>
    <value>/home/lhz/data/hive/local</value>
    <description>Local scratch space for Hive jobs</description>
  </property>

  <!-- ADD JAR/FILE 时资源下载到本地的暂存目录 -->
  <property>
    <name>hive.downloaded.resources.dir</name>
    <value>/home/lhz/data/hive/resources</value>
    <description>Temporary local directory for added resources in the remote file system.</description>
  </property>

  <!-- ======== 日志 ======== -->

  <!-- 查询日志在 HDFS 上的存放路径 -->
  <property>
    <name>hive.querylog.location</name>
    <value>/user/hive/log</value>
  </property>

  <!-- ======== MetaStore 服务 ======== -->

  <!-- 远程 MetaStore 服务 URI (空表示使用内嵌模式, 当前为本地 MetaStore) -->
  <property>
    <name>hive.metastore.uris</name>
    <!--<value>thrift://lihaozhe03:9083</value>-->
    <value/>
  </property>

  <!-- ======== HiveServer2 服务端口与绑定地址 ======== -->

  <!-- HiveServer2 Thrift 监听端口 (beeline / JDBC 客户端连接此端口) -->
  <property> 
    <name>hive.server2.thrift.port</name> 
    <value>10000</value>
  </property>

  <!-- HiveServer2 绑定的网络地址 (0.0.0.0 表示监听所有网卡) -->
  <property> 
    <name>hive.server2.thrift.bind.host</name> 
    <value>0.0.0.0</value>
  </property>

  <!-- HiveServer2 Web UI 绑定的地址 -->
  <property>
    <name>hive.server2.webui.host</name>
    <value>0.0.0.0</value>
  </property>

  <!-- HiveServer2 Web UI 端口 (浏览器访问 http://localhost:10002) -->
  <property>
    <name>hive.server2.webui.port</name>
    <value>10002</value>
  </property>

  <!-- ======== HiveServer2 会话与安全 ======== -->

  <!-- 长轮询(异步执行)超时时间, 客户端等待查询结果的超时 -->
  <property> 
    <name>hive.server2.long.polling.timeout</name> 
    <value>5000ms</value>
  </property>

  <!-- 启用用户代理(doAs): 以提交查询的用户身份而非 HiveServer2 进程用户执行 MR 任务 -->
  <property>
    <name>hive.server2.enable.doAs</name>
    <value>true</value>
  </property>

  <!-- ======== DataNucleus(ORM) 配置 - 当前已注释 ======== -->
  <!--
  <property>
  <name>datanucleus.autoCreateSchema</name>
  <value>false</value>
  </property>

  <property>
  <name>datanucleus.fixedDatastore</name>
  <value>true</value>
  </property>
  -->

  <!-- ======== 执行引擎与杂项 ======== -->

  <!-- 查询执行引擎: mr / tez / spark (当前使用 MapReduce) -->
  <property>
    <name>hive.execution.engine</name>
    <value>mr</value>
  </property>

  <!-- 跳过 MetaStore schema 版本校验 (不同版本兼容时可设为 false) -->
  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
  </property>

  <!-- HiveServer2 操作日志本地路径 -->
  <property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>/home/lhz/data/hive/tmp/operation_logs</value>
  </property>

  <!-- 辅助 JAR 路径, 通过分布式缓存传递给 YARN MR 容器 classpath -->
  <property>
    <name>hive.aux.jars.path</name>
    <value>file:///home/lhz/opt/hive-4/lib/commons-collections-3.2.2.jar</value>
  </property>
</configuration>

注意:上面配置文件中的路径在 vi 编辑器下 全局替换 本案例已经替换过了无需执行

bash 复制代码
:%s@\${system:java.io.tmpdir}@/tmp/hive-log@g

不要使用图形化 不然每次保存后3215行都会有个 &#8 特殊字符 如果产生删除即可 具体报错信息 后面有单独的描述

配置环境变量

bash 复制代码
vim ~/.profile
bash 复制代码
export HIVE_HOME=/home/lhz/opt/hive-4
export HCATALOG_HOME=/home/lhz/opt/hive-4/hcatalog

export PATH=$PATH:$HIVE_HOME/bin:$HCATALOG_HOME/bin:$HCATALOG_HOME/sbin

完整

bash 复制代码
export NODE_HOME=$HOME/opt/node-v24

export JAVA_HOME=$HOME/opt/jdk-25

export MAVEN_HOME=$HOME/opt/maven

export SCALA_HOME=$HOME/opt/scala-2

export ZOOKEEPER_HOME=$HOME/opt/zookeeper-3

export HDFS_NAMENODE_USER=lhz
export HDFS_SECONDARYNAMENODE_USER=lhz
export HDFS_DATANODE_USER=lhz
export HDFS_ZKFC_USER=lhz
export HDFS_JOURNALNODE_USER=lhz
export HADOOP_SHELL_EXECNAME=lhz

export YARN_RESOURCEMANAGER_USER=lhz
export YARN_NODEMANAGER_USER=lhz

export HADOOP_HOME=$HOME/opt/hadoop-3
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native

export HIVE_HOME=/home/lhz/opt/hive-4
export HCATALOG_HOME=/home/lhz/opt/hive-4/hcatalog

export PATH=$PATH:$NODE_HOME/bin:$JAVA_HOME/bin:$MAVEN_HOME/bin:$SCALA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$HCATALOG_HOME/bin:$HCATALOG_HOME/sbin
bash 复制代码
source ~/.profile

上传 MySQL 连接驱动 jar 包到 hive 安装目录的lib目录下:

复制代码
$HIVE_HOME/lib

删除原有的 protobuf-java-3.25.5.jar 文件

上传 jar 包有两个 分别为:

  • mysql-connector-j-9.7.0.jar
  • protobuf-java-4.35.0.jar
bash 复制代码
rm -f $HIVE_HOME/lib/protobuf-java-3.25.5.jar

guava版本冲突

删除 hive/lib目录中的 guava-22.0.jar

拷贝hadoop/share/hadoop/common/lib目录中的 guava-33.4.8-jre.jar 到 hive/lib 目录

bash 复制代码
rm -f $HIVE_HOME/lib/guava-22.0.jar
cp -v $HADOOP_HOME/share/hadoop/common/lib/guava-33.4.8-jre.jar $HIVE_HOME/lib

初始化hive的元数据库

注意初始初始元数据库之前 保证 hadoop 和 mysql 正常启动
推荐现在mysql 手动创建 hive 元数据库

sql 复制代码
create database hive default character set utf8;

Linux控制台执行以下命令初始化 hive 元数据库

bash 复制代码
schematool -initSchema -dbType  mysql -verbose

报错解解决:

bash 复制代码
Exception in thread "main" java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8
at [row,col,system-id]: [3215,96,"file:/usr/local/hive/conf/hive-site.xml"]
at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:3051)
...
at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
Caused by: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8
at [row,col,system-id]: [3215,96,"file:/usr/local/hive/conf/hive-site.xml"]
at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:621)
...
at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:3034)
... 17 more

报错原因:

hive-site.xml配置文件中,3215行(见报错记录第二行)有特殊字符

解决办法:

进入hive-site.xml文件,跳转到对应行,删除里面的 &#8 特殊字符即可
bash 复制代码
Caused by: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
	at java.net.URI.checkPath(URI.java:1822)
	at java.net.URI.<init>(URI.java:745)
	at org.apache.hadoop.fs.Path.initialize(Path.java:260)

解决方案:将hive-site.xml配置文件的
hive.querylog.location
hive.exec.local.scratchdir
hive.downloaded.resources.dir
三个值(原始为$标识的相对路径)写成绝对值
bash 复制代码
# 全局替换
:%s@\${system:java.io.tmpdir}@/tmp/hive-log@g

中文乱码

bash 复制代码
mysql -uroot -p
sql 复制代码
use hive;
sql 复制代码
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
flush privileges;

远程模式

lihaozhe03

bash 复制代码
hive --service metastore
hive --service hiveserver2  
# hive --service hiveserver2 与 hiveserver2 start 作用相同

# 启动服务端 后台运行
hive --service metastore &
hive --service hiveserver2 &

# 启动服务端 后台运行
nohup hive --service metastore > /dev/null 2>&1 &
nohup hive --service hiveserver2 > /dev/null 2>&1 &

bash 中 0、1、2 三个数字分别代表 STDIN_FILENO 、 STDOUT_FILENO 、STDERR_FILENO ,

即标准输入(一般是键盘),

标准输出(一般是显示屏,准确的说是用户终端控制台),

标准错误(输出错信息输出)。

数字 含义
0 标准输入(一般是键盘)
1 标准输出(一般是显示屏,准确的说是用户终端控制台)
2 标准错误(输出错信息输出)

/dev/null看作"黑洞". 它等价于一个只写文件.

所有写入它的内容都会永远丢失.

而尝试从它那儿读取内容则什么也读不到

启动hive脚本

start-hive.sh

bash 复制代码
nohup hive --service metastore > /dev/null 2>&1 &
nohup hive --service hiveserver2 > /dev/null 2>&1 &

为脚本添加可执行权限

bash 复制代码
chmod +x start-hive.sh

分发启动脚本

bash 复制代码
mv start-hive.sh /home/lhz/opt/hive-4/bin/

客户端连接

beeline 连接
bash 复制代码
beeline -u jdbc:hive2://lihaozhe03:10000 -n root
beeline --silent=true -u jdbc:hive2://lihaozhe03:10000 -n lhz
beeline 连接参数
bash 复制代码
Option Description  
--autoCommit=[true/false] ---进入一个自动提交模式:beeline --autoCommit=true  
--autosave=[true/false]   ---进入一个自动保存模式:beeline --autosave=true  
--color=[true/false]    ---显示用到的颜色:beeline --color=true  
--delimiterForDSV= DELIMITER ---分隔值输出格式的分隔符。默认是"|"字符。  
--fastConnect=[true/false]  ---在连接时,跳过组建表等对象:beeline --fastConnect=false  
--force=[true/false]    ---是否强制运行脚本:beeline--force=true  
--headerInterval=ROWS   ---输出的表间隔格式,默认是100: beeline --headerInterval=50  
--help ---帮助  beeline --help  
--hiveconf property=value  ---设置属性值,以防被hive.conf.restricted.list重置:beeline --hiveconf prop1=value1   
--hivevar name=value   ---设置变量名:beeline --hivevar var1=value1  
--incremental=[true/false]  ---输出增量
--isolation=LEVEL  ---设置事务隔离级别:beeline --isolation=TRANSACTION_SERIALIZABLE  
--maxColumnWidth=MAXCOLWIDTH ---设置字符串列的最大宽度:beeline --maxColumnWidth=25  
--maxWidth=MAXWIDTH ---设置截断数据的最大宽度:beeline --maxWidth=150  
--nullemptystring=[true/false]  ---打印空字符串:beeline --nullemptystring=false  
--numberFormat=[pattern]     ---数字使用DecimalFormat:beeline --numberFormat="#,###,##0.00"  
--outputformat=[table/vertical/csv/tsv/dsv/csv2/tsv2] ---输出格式:beeline --outputformat=tsv   
--showHeader=[true/false]   ---显示查询结果的列名:beeline --showHeader=false  
--showNestedErrs=[true/false] ---显示嵌套错误:beeline --showNestedErrs=true  
--showWarnings=[true/false] ---显示警告:beeline --showWarnings=true  
--silent=[true/false]  ---静默方式执行,不显示执行过程信息:beeline --silent=true  
--truncateTable=[true/false] ---是否在客户端截断表的列     
--verbose=[true/false]  ---显示详细错误信息和调试信息:beeline --verbose=true  
-d <driver class>  ---使用一个驱动类:beeline -d driver_class  
-e <query>  ---使用一个查询语句:beeline -e "query_string"  
-f <file>  ---加载一个文件:beeline -f filepath  多个文件用-e file1 -e file2
-n <username>  ---加载一个用户名:beeline -n valid_user  
-p <password>  ---加载一个密码:beeline -p valid_password  
-u <database URL> ---加载一个JDBC连接字符串:beeline -u db_URL
hive 连接
bash 复制代码
hive

启动客户端后连接

bash 复制代码
!connect jdbc:hive2://lihaozhe3:10000 -n lhz

浏览器访问

http://lihaozhe03:10002/

关闭 hive 脚本

编写 stop-hive.sh 脚本 kill 掉后台 RunJar 进程

bash 复制代码
#!/bin/bash  

# 查找并杀死所有 RunJar 进程  
pids=$(ps -ef | grep RunJar | grep -v grep | awk '{print $2}')  

# 检查是否有找到任何 PID
if [ -n "$pids" ]; then
    # 按行kill并输出
    for pid in $pids; do
    	echo "Killing the following RunJar processes PID: $pid"
        kill -9 $pid
    done
else
    echo "No RunJar processes found."
fi

脚本添加可执行权限

bash 复制代码
chmod +x stop-hive.sh

分发脚本

bash 复制代码
mv stop-hive.sh /home/lhz/opt/hive-4/bin/

体验

sql 复制代码
use default;
create table person (
	id int,
    phonenum bigint,
    salary decimal(16, 2),
    name string
);
show tables;
insert into person values (1001,13966668888,9999.99,"张三");
bash 复制代码
vim /home/lhz/person.txt

内容如下:

复制代码
songsong,bingbing_lili,xiao song:18_xiaoxiao song:19
longlong,pingping_liuliu,xiao long:8_xiaoxiao long:9

drop table person;
create table person (
    name string,
    friends array<string>,
    childrens map<string,int>
)
 row format delimited fields terminated by ',' 
 collection items terminated by '_' 
 map keys terminated by ':' 
 lines terminated by '\n';
sql 复制代码
load data local inpath '/home/lhz/person.txt' into table person; 
sql 复制代码
drop table data;
create table data (
    name string, 
   	amount int
)
 row format delimited fields terminated by ',' 
 lines terminated by '\n';
 load data local inpath  '/home/lhz/data.txt' into table data; 
sql 复制代码
select count(*) from data;
select count(*) from data group by name;
select name,max(t) from data group by name;
select name,max(t) from data group by name order by max(t) ;
sql 复制代码
# 本地
set mapreduce.framework.name=local;
set hive.exec.mode.local.auto=true;
# yarn
set mapreduce.framework.name=yarn;
set hive.exec.mode.local.auto=false;

# 向量模式
set hive.vectorized.execution.enabled=true;
set hive.vectorized.execution.enabled=false;

set mapreduce.framework.name=local;
set hive.exec.mode.local.auto=true;
set hive.vectorized.execution.enabled=true; 

同步hive到其它节点

停止hive服务,执行以下命令,这样在任意集群节点都可以启动hive

bash 复制代码
scp -rv ~/opt/hive-4 lhz@lihaozhe01:~/opt
scp -rv ~/opt/hive-4 lhz@lihaozhe02:~/opt

配置环境变量

bash 复制代码
export NODE_HOME=$HOME/opt/node-v24

export JAVA_HOME=$HOME/opt/jdk-25

export MAVEN_HOME=$HOME/opt/maven

export SCALA_HOME=$HOME/opt/scala-2

export ZOOKEEPER_HOME=$HOME/opt/zookeeper-3

export HDFS_NAMENODE_USER=lhz
export HDFS_SECONDARYNAMENODE_USER=lhz
export HDFS_DATANODE_USER=lhz
export HDFS_ZKFC_USER=lhz
export HDFS_JOURNALNODE_USER=lhz
export HADOOP_SHELL_EXECNAME=lhz

export YARN_RESOURCEMANAGER_USER=lhz
export YARN_NODEMANAGER_USER=lhz

export HADOOP_HOME=$HOME/opt/hadoop-3
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native

export HIVE_HOME=/home/lhz/opt/hive-4
export HCATALOG_HOME=/home/lhz/opt/hive-4/hcatalog

export PATH=$PATH:$NODE_HOME/bin:$JAVA_HOME/bin:$MAVEN_HOME/bin:$SCALA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$HCATALOG_HOME/bin:$HCATALOG_HOME/sbin
相关推荐
AllData公司负责人1 天前
数据集成管理|AIIData数据中台实现MySQL、Hive、Oracle一键接入Doris
大数据·数据库·人工智能·hive·mysql·oracle·数据分析
泰克教育官方账号1 天前
泰涨知识 | Hive集群环境部署
数据仓库·hive·hadoop
婉然从物1 天前
Flink SQL 元数据持久化实战:从“每次重启表消失”到“Hive Metastore 永久存储”
hive·sql·flink
龙石数据2 天前
MySQL 全量同步到 Hive 怎么做?三步配置教程
数据库·hive·mysql·数据治理·数据中台
心中有国也有家2 天前
E-Brufen 技术选型全景:Flutter + 鸿蒙 + Hive CE
hive·hadoop·学习·flutter·华为·harmonyos
数据库小学妹2 天前
数据库架构入门到进阶:单机、主从、分库分表到分布式的选型实战
数据仓库·分布式数据库·数据治理·数据库架构·架构设计·数据分层
DataPulse*2 天前
Hive常用参数调优十二板斧
hive·hadoop·硬件架构
TTBIGDATA3 天前
【Ambari Plus】12.Flink 安装
hive·hadoop·flink·ambari·hdp·cdh·bigtop
心中有国也有家3 天前
Flutter 鸿蒙适配第一步:从 hive 迁移到 hive\_ce
hive·学习·flutter·华为·harmonyos