一 Hive的下载
软件下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/ 这里下载的版本是:apache-hive-2.3.3-bin.tar.gz
官方安装配置文档:https://cwiki.apache.org/confluence/display/Hive/GettingStarted
二 Hive单用户安装
远程Metastore数据库
1 解压配置环境变量
#解压指定位置安装 [admin@node21 software]$ tar zxvf apache-hive-2.3.3-bin.tar.gz -C /opt/module/ [admin@node21 module]$ mv apache-hive-2.3.3-bin hive-2.3.3 #配置环境变量 [admin@node21 hive-2.3.3]$ sudo vi /etc/profile 末尾追加 export HIVE_HOME=/opt/module/hive-2.3.3 export PATH=$PATH:$HIVE_HOME/bin 重新编译环境变量生效 [admin@node21 hive-2.3.3]$ source /etc/profile
2 配置Hive文件
2.1 修改hive-env.sh
[admin@node21 conf]$ cd /opt/module/hive-2.3.3/conf [admin@node21 conf]$ cp hive-env.sh.template hive-env.sh [admin@node21 conf]$ vi hive-env.sh # HADOOP_HOME=${bin}/../../hadoop 打开注释修改 HADOOP_HOME=/opt/module/hadoop-2.7.6 # export HIVE_CONF_DIR= 打开注释修改 HIVE_CONF_DIR=/opt/module/hive-2.3.3/conf
2.2 修改hive-log4j.properties
修改hive的log存放日志到/opt/module/hive-2.3.3/logs
[admin@node21 conf]$ mv hive-log4j2.properties.template hive-log4j2.properties [admin@node21 conf]$ vi hive-log4j2.properties 找到 property.hive.log.dir = ${sys:java.io.tmpdir}/${sys:user.name} 修改 property.hive.log.dir = /opt/module/hive-2.3.3/logs
3 配置MySQL作为Metastore
默认情况下, Hive的元数据保存在了内嵌的 derby 数据库里, 但一般情况下生产环境使用 MySQL 来存放 Hive 元数据。
3.1 安装mysql
参考地址: https://www.cnblogs.com/frankdeng/p/9017384.html
安装mysql,拷贝 mysql-connector-java-5.1.9-bin.jar 放入 $HIVE_HOME/lib 下。
[admin@node21 software]$ cp mysql-connector-java-5.1.9.jar /opt/module/hive-2.3.3/lib/
3.2 修改配置文件
参数配置文档:https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin
复制hive-default.xml.template为hive-site.xml 文件,删除掉configuration里的配置信息,重新配置 MySQL 数据库连接信息。
[admin@node21 conf]$ vi hive-site.xml
删除命令:光标在configuration的下一行,输入:.,$-1d (光标所在行到 倒数第二行)回车,进行如下编辑
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!--Hive作业的HDFS根目录位置 --> <property> <name>hive.exec.scratchdir</name> <value>/user/hive/tmp</value> </property> <!--Hive作业的HDFS根目录创建写权限 --> <property> <name>hive.scratch.dir.permission</name> <value>733</value> </property> <!--hdfs上hive元数据存放位置 --> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <!--连接数据库地址,名称 --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://node21/hive?createDatabaseIfNotExist=true</value> </property> <!--连接数据库驱动 --> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <!--连接数据库用户名称 --> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <!--连接数据库用户密码 --> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </property> <!--客户端显示当前查询表的头信息 --> <property> <name>hive.cli.print.header</name> <value>true</value> </property> <!--客户端显示当前数据库名称信息 --> <property> <name>hive.cli.print.current.db</name> <value>true</value> </property> </configuration>
3.3 mysql创建hive用户密码
mysql> CREATE DATABASE hive; mysql> USE hive; mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive'; mysql> GRANT ALL ON hive.* TO 'hive'@'localhost' IDENTIFIED BY 'hive'; mysql> GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive'; mysql> FLUSH PRIVILEGES; mysql> quit;
4 运行Hive
4.1 初始化数据库
从Hive 2.1开始,我们需要运行下面的schematool命令作为初始化步骤。例如,这里使用“mysql”作为db类型。
[admin@node21 conf]$ schematool -dbType mysql -initSchema
终端输出如下信息
View Code
执行成功后,可以使用Navicat Premium 查看元数据库 hive 是否已经创建成功。
4.2 启动 Hive 客户端
启动Hadoop服务,使用 Hive CLI(Hive command line interface), hive --service cli和hive效果一样,可以在终端输入以下命令:
[admin@node21 conf]$ hive
启动信息如下:
which: no hbase in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8/bin:/opt/module/jdk1.8/sbin:/opt/module/zookeeper-3.4.12/bin:/opt/module/ hadoop-2.7.6/bin:/opt/module/hadoop-2.7.6/sbin:/opt/module/hive-2.3.3/bin:/home/admin/.local/bin:/home/admin/bin)SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/module/hive-2.3.3/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/module/hadoop-2.7.6/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Logging initialized using configuration in file:/opt/module/hive-2.3.3/conf/hive-log4j2.properties Async: true Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X rel eases.hive (default)>
三 多用户安装
用于非Java客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库。
1 本地Metastore服务器
在本地/嵌入式Metastore设置中,Metastore服务器组件像Hive Client中的库一样使用。 每个Hive客户端都将打开一个到数据库的连接并对其进行SQL查询。确保可以从执行Hive查询的机器访问数据库,因为这是本地存储。还要确保JDBC客户端库位于Hive Client的类路径中。此配置通常与HiveServer2一起使用。
这里node21作为MySQL Server,node22同时作为Metastore服务器和客户端。
1.1 解压安装hive
[admin@node22 software]$ tar zxvf apache-hive-2.3.3-bin.tar.gz -C /opt/module/ [admin@node22 module]$ mv apache-hive-2.3.3-bin hive-2.3.3
1.2 配置环境变量
[admin@node22 module]$ sudo vi /etc/profile 末尾追加 export HIVE_HOME=/opt/module/hive-2.3.3 export PATH=$PATH:$HIVE_HOME/bin 重新编译环境变量生效 [admin@node22 hive-2.3.3]$ source /etc/profile
1.3 修改conf文件
1.3.1 修改hive-env.sh
[admin@node22 conf]$ cd /opt/module/hive-2.3.3/conf [admin@node22 conf]$ cp hive-env.sh.template hive-env.sh [admin@node22 conf]$ vi hive-env.sh # HADOOP_HOME=${bin}/../../hadoop 打开注释修改 HADOOP_HOME=/opt/module/hadoop-2.7.6 # export HIVE_CONF_DIR= 打开注释修改 HIVE_CONF_DIR=/opt/module/hive-2.3.3/conf
1.3.2 修改hive-log4j.properties
[admin@node22 conf]$ mv hive-log4j2.properties.template hive-log4j2.properties [admin@node21 conf]$ vi hive-log4j2.properties 找到 property.hive.log.dir = ${sys:java.io.tmpdir}/${sys:user.name} 修改 property.hive.log.dir = /opt/module/hive-2.3.3/logs
1.3.3 修改hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!--Hive作业的HDFS根目录位置 --> <property> <name>hive.exec.scratchdir</name> <value>/user/hive/tmp</value> </property> <!--Hive作业的HDFS根目录创建写权限 --> <property> <name>hive.scratch.dir.permission</name> <value>733</value> </property> <!--hdfs上hive元数据存放位置 --> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <!--连接数据库地址,名称 --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://node21/hive?createDatabaseIfNotExist=true</value> </property> <!--连接数据库驱动 --> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <!--连接数据库用户名称 --> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <!--连接数据库用户密码 --> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </property> <!--客户端显示当前查询表的头信息 --> <property> <name>hive.cli.print.header</name> <value>true</value> </property> <!--客户端显示当前数据库名称信息 --> <property> <name>hive.cli.print.current.db</name> <value>true</value> </property> </configuration>
1.4 运行Hive
初始化数据库
[admin@node22 conf]$ schematool -dbType mysql -initSchema hive hive
1.4.1第一种方式
服务端启动:
[admin@node22 ~]$ hive --service metastore
客户端启动:
[admin@node22 ~]$ hive
退出:quit
1.4.2第二种方式
服务端启动:
[admin@node22 ~]$ hiveserver2
客户端启动:
[admin@node22 ~]$ beeline -u jdbc:hive2://node22:10000 -n root 或者 [admin@node22 ~]$ beeline !connect jdbc:hive2://node22:10000 hive hive
退出:
!quit
2 远程Metastore服务器
这里node21作为MySQL Server,node22作为Metastore服务器,node23作为客户端。
2.1 解压安装hive
[admin@node22 software]$ tar zxvf apache-hive-2.3.3-bin.tar.gz -C /opt/module/ [admin@node22 module]$ mv apache-hive-2.3.3-bin hive-2.3.3 [admin@node23 software]$ tar zxvf apache-hive-2.3.3-bin.tar.gz -C /opt/module/ [admin@node23 module]$ mv apache-hive-2.3.3-bin hive-2.3.3
2.2 配置环境变量
[admin@node22 module]$ sudo vi /etc/profile [admin@node23 module]$ sudo vi /etc/profile 末尾追加 export HIVE_HOME=/opt/module/hive-2.3.3 export PATH=$PATH:$HIVE_HOME/bin 重新编译环境变量生效 [admin@node22 hive-2.3.3]$ source /etc/profile [admin@node22 hive-2.3.3]$ source /etc/profile
2.3 修改conf文件
2.3.1 修改hive-env.sh
修改node22,node23节点的hive-env.sh cd /opt/module/hive-2.3.3/conf cp hive-env.sh.template hive-env.sh vi hive-env.sh # HADOOP_HOME=${bin}/../../hadoop 打开注释修改 HADOOP_HOME=/opt/module/hadoop-2.7.6 # export HIVE_CONF_DIR= 打开注释修改 HIVE_CONF_DIR=/opt/module/hive-2.3.3/conf
2.3.2 修改hive-log4j.properties
修改node22,node23节点上的hive-log4j2.properties mv hive-log4j2.properties.template hive-log4j2.properties vi hive-log4j2.properties 找到 property.hive.log.dir = ${sys:java.io.tmpdir}/${sys:user.name} 修改 property.hive.log.dir = /opt/module/hive-2.3.3/logs
2.3.3 修改hive-site.xml
服务端配置
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!--Hive作业的HDFS根目录位置 --> <property> <name>hive.exec.scratchdir</name> <value>/user/hive/tmp</value> </property> <!--Hive作业的HDFS根目录创建写权限 --> <property> <name>hive.scratch.dir.permission</name> <value>733</value> </property> <!--hdfs上hive元数据存放位置 --> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <!--连接数据库地址,名称 --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://node21/hive?createDatabaseIfNotExist=true</value> </property> <!--连接数据库驱动 --> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <!--连接数据库用户名称 --> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <!--连接数据库用户密码 --> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </property> <!--客户端显示当前查询表的头信息 --> <property> <name>hive.cli.print.header</name> <value>true</value> </property> <!--客户端显示当前数据库名称信息 --> <property> <name>hive.cli.print.current.db</name> <value>true</value> </property> </configuration>
客户端配置
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!--Hive作业的HDFS根目录位置 --> <property> <name>hive.exec.scratchdir</name> <value>/user/hive/tmp</value> </property> <!--Hive作业的HDFS根目录创建写权限 --> <property> <name>hive.scratch.dir.permission</name> <value>733</value> </property> <!--hdfs上hive元数据存放位置,默认 --> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <!--客户端显示当前数据库名称信息 --> <property> <name>hive.metastore.uris</name> <value>thrift://node22:9083</value> </property> <!--客户端显示当前查询表的头信息 --> <property> <name>hive.cli.print.header</name> <value>true</value> </property> <!--客户端显示当前数据库名称信息 --> <property> <name>hive.cli.print.current.db</name> <value>true</value> </property> </configuration>
2.4 运行Hive
拷贝 mysql-connector-java-5.1.9-bin.jar到服务端hive/lib下。
初始化服务器端
[admin@node22 conf]$ schematool -dbType mysql -initSchema hive hive
启动方式:
服务端node22启动命令:
hive --service metastore
查看node22的9083端口:
netstat -nptl | grep 9083
客户端node23启动命令:
hive
四 Hive基本使用
现有一个文件student.txt,将其存入hive中,student.txt数据格式如下:
95002,刘晨,女,19,IS 95017,王风娟,女,18,IS 95018,王一,女,19,IS 95013,冯伟,男,21,CS 95014,王小丽,女,19,CS 95019,邢小丽,女,19,IS 95020,赵钱,男,21,IS 95003,王敏,女,22,MA 95004,张立,男,19,IS 95012,孙花,女,20,CS 95010,孔小涛,男,19,CS 95005,刘刚,男,18,MA 95006,孙庆,男,23,CS 95007,易思玲,女,19,MA 95008,李娜,女,18,CS 95021,周二,男,17,MA 95022,郑明,男,20,MA 95001,李勇,男,20,CS 95011,包小柏,男,18,MA 95009,梦圆圆,女,18,MA 95015,王君,男,18,MA
1、创建一个数据库myhive
hive> create database myhive; OK Time taken: 7.847 seconds hive>
2、使用新的数据库myhive
hive> use myhive; OK Time taken: 0.047 seconds hive>
3、查看当前正在使用的数据库
hive> select current_database(); OK myhive Time taken: 0.728 seconds, Fetched: 1 row(s) hive>
4、在数据库myhive创建一张student表
hive> create table student(id int, name string, sex string, age int, department string) row format delimited fields terminated by ","; OK Time taken: 0.718 seconds hive>
5、往表中加载数据
hive> load data local inpath "/home/hadoop/student.txt" into table student; Loading data to table myhive.student OK Time taken: 1.854 seconds hive>
6、查询数据
hive> select * from student; OK 95002 刘晨 女 19 IS 95017 王风娟 女 18 IS 95018 王一 女 19 IS 95013 冯伟 男 21 CS 95014 王小丽 女 19 CS 95019 邢小丽 女 19 IS 95020 赵钱 男 21 IS 95003 王敏 女 22 MA 95004 张立 男 19 IS 95012 孙花 女 20 CS 95010 孔小涛 男 19 CS 95005 刘刚 男 18 MA 95006 孙庆 男 23 CS 95007 易思玲 女 19 MA 95008 李娜 女 18 CS 95021 周二 男 17 MA 95022 郑明 男 20 MA 95001 李勇 男 20 CS 95011 包小柏 男 18 MA 95009 梦圆圆 女 18 MA 95015 王君 男 18 MA Time taken: 2.455 seconds, Fetched: 21 row(s) hive>
7、查看表结构
hive> desc student; OK id int name string sex string age int department string Time taken: 0.102 seconds, Fetched: 5 row(s) hive>
hive> desc extended student; OK id int name string sex string age int department string Detailed Table Information Table(tableName:student, dbName:myhive, owner:hadoop, createTime:1522750487, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:id, type:int, comment:null), FieldSchema(name:name, type:string, comment:null), FieldSchema(name:sex, type:string, comment:null), FieldSchema(name:age, type:int, comment:null), FieldSchema(name:department, type:string, comment:null)], location:hdfs://myha01/user/hive/warehouse/myhive.db/student, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{serialization.format=,, field.delim=,}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{transient_lastDdlTime=1522750695, totalSize=523, numRows=0, rawDataSize=0, numFiles=1}, viewOriginalText:null, viewExpandedText:null, tableType:MANAGED_TABLE, rewriteEnabled:false) Time taken: 0.127 seconds, Fetched: 7 row(s) hive>
hive> desc formatted student; OK # col_name data_type comment id int name string sex string age int department string # Detailed Table Information Database: myhive Owner: hadoop CreateTime: Tue Apr 03 18:14:47 CST 2018 LastAccessTime: UNKNOWN Retention: 0 Location: hdfs://myha01/user/hive/warehouse/myhive.db/student Table Type: MANAGED_TABLE Table Parameters: numFiles 1 numRows 0 rawDataSize 0 totalSize 523 transient_lastDdlTime 1522750695 # Storage Information SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe InputFormat: org.apache.hadoop.mapred.TextInputFormat OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: -1 Bucket Columns: [] Sort Columns: [] Storage Desc Params: field.delim , serialization.format , Time taken: 0.13 seconds, Fetched: 34 row(s) hive>
五 安装故障解析
1.没有初始化数据库
[admin@node21 conf]$ hive which: no hbase in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8/bin:/opt/module/jdk1.8/sbin:/opt/module/zookeeper-3.4.12/bin:/opt/module /hadoop-2.7.6/bin:/opt/module/hadoop-2.7.6/sbin:/home/admin/.local/bin:/home/admin/bin:/opt/module/jdk1.8/bin:/opt/module/jdk1.8/sbin:/opt/module/zookeeper-3.4.12/bin:/opt/module/hadoop-2.7.6/bin:/opt/module/hadoop-2.7.6/sbin:/opt/module/jdk1.8/bin:/opt/module/jdk1.8/sbin:/opt/module/zookeeper-3.4.12/bin:/opt/module/hadoop-2.7.6/bin:/opt/module/hadoop-2.7.6/sbin:/opt/module/jdk1.8/bin:/opt/module/jdk1.8/sbin:/opt/module/zookeeper-3.4.12/bin:/opt/module/hadoop-2.7.6/bin:/opt/module/hadoop-2.7.6/sbin:/opt/module/hive-2.3.3/bin)SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/module/hive-2.3.3/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/module/hadoop-2.7.6/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Logging initialized using configuration in jar:file:/opt/module/hive-2.3.3/lib/hive-common-2.3.3.jar!/hive-log4j2.properties Async: true Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user. name%7D at org.apache.hadoop.fs.Path.initialize(Path.java:205) at org.apache.hadoop.fs.Path.<init>(Path.java:171) at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:659) at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:582) at org.apache.hadoop.hive.ql.session.SessionState.beginStart(SessionState.java:549) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:750) at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 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:1823) at java.net.URI.<init>(URI.java:745) at org.apache.hadoop.fs.Path.initialize(Path.java:202) ... 12 more
本文来自博客园,作者:大码王,转载请注明原文链接:https://www.cnblogs.com/huanghanyu/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具