impala操作指南

  • 一、概述
  • 二、体系架构及其优缺点
    • 2.1 体系架构
    • 2.2 优点
    • 2.3 缺点
  • 三、安装方式
    • 3.1 使用cloudera manager 进行安装
    • 3.2 手动安装
      • 3.2.1 准备
        • 3.2.1.1 新增Impala用户并加入sudo权限
        • 3.2.1.2 准备rpm安装文件和jar包
        • 3.2.1.3 服务规划
      • 3.2.2 安装
        • 3.2.2.1 安装impala-server
        • 3.2.2.2 安装impala-catalog impala-state-store
      • 3.2.3 配置
        • 3.2.3.1 本地包确认
        • 3.2.3.2 拷贝so文件至impala lib下
        • 3.2.3.3 拷贝依赖的第三方jar至impala lib下
        • 3.2.3.4 修改hadoop相关配置
          • 3.2.3.4.1 建立短路读的相关目录和权限
          • 3.2.3.4.2 追加如下内容到hadoop的hdfs-site.xml
          • 3.2.3.4.3 拷贝配置文件至impala
        • 3.2.3.5 修改 impala catalog和state store参数
        • 3.2.3.6 拷贝hive元数据的驱动
        • 3.2.3.7 启动impala
          • 3.2.3.7.1 启动 impala-catalog impala-state-store
          • 3.2.3.7.2 启动 impala-server
      • 3.2.4 问题排查
        • 3.2.4.1 impala日志
        • 3.2.4.2 hadoop日志
  • 四、核心组件
    • 4.1 Statestore Daemon
    • 4.2 Catalog Daemon
    • 4.3 Impala Daemon
    • 4.4 Impala Shell
  • 五、impala CDH优化
  • 六、impala-shell 用法
  • 七、impala监控管理
    • 7.1 查看StateStore
    • 7.2 查看Catalog
  • 八、impala存储
    • 8.1 文件类型
    • 8.2 压缩方式
  • 九、impala分区
    • 9.1 创建分区方式
    • 9.2 分区内添加数据
    • 9.3 查询指定分区
  • 十、hive 和impala区别
    • 10.1 数据类型
    • 10.2 不支持HiveQL以下特性
  • 十一、常用sql

一、概述

Impala可以直接存储在HDFS,HBase或Amazon Simple Storage Service(S3)中的Apache Hadoop数据上提供快速,交互式的SQL查询。 除了使用相同的统一存储平台,Impala和Apache Hive一样还使用相同的元数据,SQL语法(Hive SQL),ODBC驱动程序和用户界面(Hue中的Impala查询UI)。
Impala是用于查询大数据的工具的补充。 Impala不会替代基于MapReduce的批处理框架,如Hive。 基于MapReduce的Hive和其他框架最适用于长时间运行的批处理作业,例如涉及批处理Extract,Transform和Load(ETL)类型作业的工作。

二、体系架构及其优缺点

2.1 体系架构


Impala的系统架构如上图所示,Impala使用了Hive的SQL接口(包括SELECT、INSERT、JOIN等操作),表的元数据信息存储在Hive Metastore中。StateStore是Impala的一个子服务,用于监控集群中各个节点的健康状况,提供节点注册、错误检测等功能;Impala在每个节点运行了一个后台服务Impalad,用于响应外部请求,并完成实际的查询处理。Impalad主要包含Query Planner、Query Coordinator和Query Exec Engine三个模块。Query Planner接收来自SQL APP和ODBC的查询,然后将查询转换为许多子查询,Query Coordinator将这些子查询分发到各个节点上,由各个节点上的Query Exec Engine负责子查询的执行,然后返回子查询的结果,这些中间结果经过聚集之后最终返回给用户。

2.2 优点

  • 基于内存进行计算,能够对PB级别的数据进行实时交互查询、分析
  • C ++ 编写,LLVM(C++的一种编译器)统一编译,效率高 支持Data local 效率高
  • 兼容HiveSQL
  • 具有数据仓库的特性,可对hive数据直接做数据分析
  • 支持列式存储(可以和hbase整合)
  • 支持JDBC/ODBC远程访问

2.3 缺点

  • 对内存依赖大
  • 完全依赖于hive
  • 实践过程中 分区超过1w 性能严重下下降
  • 稳定性不如hive

三、安装方式

3.1 使用cloudera manager 进行安装

3.2 手动安装

3.2.1 准备

3.2.1.1 新增Impala用户并加入sudo权限

chmod u+w /etc/sudoers
vi /etc/sudoers
impala   ALL=(ALL) NOPASSWD: NOPASSWD: ALL
chmod u-w /etc/sudoers

3.2.1.2 准备rpm安装文件和jar包

  • 见附件内的Hadoop5.0.1Impala1.3.1\1.3.1_RPM(impala需要的rpm包)
  • 见附件内的Hadoop5.0.1Impala1.3.1\1.3.1Lib_ALL(impala需要的jar包)
  • 比如放置在 /home/impala/ Hadoop5.0.1Impala1.3.1内

3.2.1.3 服务规划

  • Impala有三个服务,impala-server,impala-catalog,impala-state-store.
  • Impla-server需要安装在hadoop的每个数据节点上
  • impala-catalog,impala-state-store可以安装在某一个数据节点或则根集群通的机器.

3.2.2 安装

3.2.2.1 安装impala-server

sudo rpm -ivh bigtop-utils-0.7.0+cdh5.0.1+0-1.cdh5.0.1.p0.31.el6.noarch.rpm
sudo rpm -ivh --nodeps impala-1.3.1+cdh5.0.1+0-1.cdh5.0.1.p0.42.el6.x86_64.rpm
sudo rpm -ivh impala-server-1.3.1+cdh5.0.1+0-1.cdh5.0.1.p0.42.el6.x86_64.rpm
sudo rpm -ivh impala-shell-1.3.1+cdh5.0.1+0-1.cdh5.0.1.p0.42.el6.x86_64.rpm

3.2.2.2 安装impala-catalog impala-state-store

sudo rpm -ivh bigtop-utils-0.7.0+cdh5.0.1+0-1.cdh5.0.1.p0.31.el6.noarch.rpm
sudo rpm -ivh impala-1.3.1+cdh5.0.1+0-1.cdh5.0.1.p0.42.el6.x86_64.rpm
sudo rpm -ivh impala-catalog-1.3.1+cdh5.0.1+0-1.cdh5.0.1.p0.42.el6.x86_64.rpm
sudo rpm -ivh impala-state-store-1.3.1+cdh5.0.1+0-1.cdh5.0.1.p0.42.el6.x86_64.rpm

3.2.3 配置

3.2.3.1 本地包确认

#先删除/usr/lib/impala/lib/*.so.*
rm -rf /usr/lib/impala/lib/ libhadoop.so.1.0.0
rm -rf /usr/lib/impala/lib/ libhadoop.so
rm -rf /usr/lib/impala/lib/ libhdfs.so.1.0.0
rm -rf /usr/lib/impala/lib/ libhdfs.so
#再确认 $HADOOP_HOME/lib/native的是否存在libhadoop, libhdfs文件,如果不存在需要拷贝,反之不需要操作该步.
Hadoop5.0.1Impala1.3.1\1.3.1_RPM\libhadoop.so.1.0.0
Hadoop5.0.1Impala1.3.1\1.3.1_RPM\libhdfs.so.0.0.0
#并创建链接
ln -s libhadoop.so.1.0.0 libhadoop.so
ln -s libhdfs.so.0.0.0 libhdfs.so

3.2.3.2 拷贝so文件至impala lib下

sudo cp $HADOOP_HOME/lib/native/*.so* /usr/lib/impala/lib/

3.2.3.3 拷贝依赖的第三方jar至impala lib下

#删除前最好备份到一个目录下
sudo rm -rf /usr/lib/impala/lib/hive*.jar &&
sudo rm -rf /usr/lib/impala/lib/hbase*.jar &&
sudo rm -rf /usr/lib/impala/lib/hadoop*.jar &&
sudo rm -rf /usr/lib/impala/lib/sentry*.jar &&
sudo rm -rf /usr/lib/impala/lib/zookeeper*.jar &&
sudo rm -rf /usr/lib/impala/lib/avro*.jar &&
sudo rm -rf /usr/lib/impala/lib/parquet-hadoop-bundle.jar
sudo cp /home/impala/Hadoop5.0.1Impala1.3.1/1.3.1Lib_ALL/*/usr/lib/impala/lib/

3.2.3.4 修改hadoop相关配置

3.2.3.4.1 建立短路读的相关目录和权限
sudo mkdir -p /var/run/hadoop-hdfs &&
sudo chmod u+x /var/run/hadoop-hdfs &&
sudo chmod g+x /var/run/hadoop-hdfs &&
sudo chmod g+w /var/run/hadoop-hdfs &&
sudo chown -R impala:root /var/run/hadoop-hdfs &&
sudo usermod -a -G root impala
3.2.3.4.2 追加如下内容到hadoop的hdfs-site.xml
<property> <name>dfs.client.read.shortcircuit</name> <value>true</value>
</property> <property>
<name>dfs.domain.socket.path</name> <value>/var/run/hadoop-hdfs/dn._PORT</value>
</property> <property> <name>dfs.client.file-block-storage-locations.timeout</name> <value>3000</value>
</property> <property> <name>dfs.datanode.hdfs-blocks-metadata.enabled</name> <value>true</value>
</property><property><name>dfs.client.file-block-storage-locations.timeout.millis</name><value>10000</value>
</property>
3.2.3.4.3 拷贝配置文件至impala
sudo cp $HADOOP_HOME/etc/hadoop/hdfs-site.xml /etc/impala/conf
sudo cp $HADOOP_HOME/etc/hadoop/core-site.xml /etc/impala/conf
sudo cp $HIVE_HOME/conf/hive-site.xml /etc/impala/conf

3.2.3.5 修改 impala catalog和state store参数

sudo vi /etc/default/impala
IMPALA_CATALOG_SERVICE_HOST=wxdb01
IMPALA_STATE_STORE_HOST=wxdb01
#备注: 这里需要写impala catalog和state store服务所在的主机名

3.2.3.6 拷贝hive元数据的驱动

#示例:
sudo cp $HIVE_HOME/lib/mysql-connector-java-5.1.26-bin.jar/var/lib/impala/

3.2.3.7 启动impala

3.2.3.7.1 启动 impala-catalog impala-state-store
sudo service impala-catalog start
sudo service impala-state-store start
sudo service impala-catalog status
sudo service impala-state-store status
3.2.3.7.2 启动 impala-server
sudo service impala-server start
sudo service impala-server status
service impala-server status && service impala-catalog status && service impala-state-store status

3.2.4 问题排查

3.2.4.1 impala日志

目录在 /var/log/impala内

3.2.4.2 hadoop日志

hdfs 赋权 /hive/warehouse 777.

#Impala安装问题记录:
#Unable to findJava. JAVA_HOME should be set in /etc/default/bigtop-utils
#解决办法:采用rpm方式安装jdk,
rpm -ivh oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
#安装路径为: /usr/java/jdk1.7.0_67-cloudera

四、核心组件

4.1 Statestore Daemon

该进程负责搜集集群中Impalad进程节点的健康状况,它通过创建多个线程来处理Impalad的注册订阅,并与各节点保持心跳连接,不断地将健康状况的结果转发给所有的Impalad进程节点。一个Impala集群只需一个statestored进程节点,当某一节点不可用时,该进程负责将这一信息传递给所有的Impalad进程节点,再有新的查询时不会把请求发送到不可用的节点上。

4.2 Catalog Daemon

Impala目录服务组件将Impala SQL语句产生的元数据更改通知到群集中的所有DataNodes上。避免了通过Impala发出的SQL语句执行时产生的元数据更改,需要发出REFRESH和INVALIDATE METADATA语句才能生效。当您通过Hive创建表,加载数据等时,您需要在Impala节点上执行REFRESH或INVALIDATE METADATA,然后才能执行查询。

4.3 Impala Daemon

它是运行在集群每个节点上的守护进程,是Impala的核心组件,在每个节点上这个进程的名称为Impalad。该进程负责读写数据文件;接受来自Impala-shell、Hue、JDBC、ODBC等客户端的查询请求(接收查询请求的Impalad为Coordinator),Coordinator通过JNI调用java前端解释SQL查询语句,生成查询计划树,再通过调度器把执行计划分发给具有相应数据的其它节点分布式并行执行,并将各节点的查询结果返回给中心协调者节点Coordinator,再由该节点返回给客户端。同时Impalad会与State Store保持通信,以了解其他节点的健康状况和负载。

4.4 Impala Shell

提供给用户查询使用的命令行交互工具,供使用者发起数据查询或管理任务,同时Impala还提供了Hue、JDBC、ODBC等使用接口。

五、impala CDH优化

  • impala daemon 内存限制
  • StateStore 工作线程数

六、impala-shell 用法

-h (--help) 帮助
-v (--version) 查询版本信息-V(--verbose) 启用详细输出
--quiet 关闭详细输出
-p 显示执行计划
-i hostname(--impalad=hostname) 指定连接主机 格式hostname:port 默认端口21000
-r(--refresh_after_connect)刷新所有元数据
-q query(--query=query) 从命令行执行查询,不进入impala-shell
-d default_db(--database=default_db) 指定数据库
-B(--delimited)去格式化输出
--output_delimiter=character 指定分隔符
--print_header 打印列名
-f query_file(--query_file=query_file)执行查询文件,以分号分隔
-o filename(--output_file filename) 结果输出到指定文件
-c 查询执行失败时继续执行
-k(--kerberos) 使用kerberos安全加密方式运行impala-shell
-l 启用LDAP认证
-u 启用LDAP时,指定用户名Impala Shell
进入impala-shell后的特殊用法:help
connect <hostname:port> 连接主机,默认端口21000
refresh <tablename> 增量刷新元数据库
invalidate metadata 全量刷新元数据库
explain <sql> 显示查询执行计划、步骤信息
set explain_level 设置显示级别( 0,1,2,3)
shell <shell> 不退出impala-shell执行Linux命令
profile (查询完成后执行) 查询最近一次查询的底层信息

七、impala监控管理

7.1 查看StateStore

http://node1:25020/

7.2 查看Catalog

http://node1:25010/

八、impala存储

8.1 文件类型

8.2 压缩方式

九、impala分区

9.1 创建分区方式

  • partitioned by 创建表时,添加该字段指定分区列表
create table t_person(id int, name string, age int) partitioned by (type string);
  • 使用alter table 进行分区的添加和删除操作
alter table t_person add partition (sex='man');
alter table t_person drop partition (sex='man');
alter table t_person drop partition (sex='man',type='boss');

9.2 分区内添加数据

insert into t_person partition (type='boss') values (1,'zhangsan',18),(2,'lisi',23)
insert into t_person partition (type='coder') values (3,'wangwu',22),(4,'zhaoliu',28),(5,'tianqi',24)

9.3 查询指定分区

select id,name from t_person where type='coder'

十、hive 和impala区别

10.1 数据类型

impala支持数据类型没有hive多

Hive数据类型 Impala数据类型 长度
tinyint tinyint 1 byte 有符号整数
smalint smalint 2 byte 有符号整数
int int 4 byte 有符号整数
bigint bigint 8 byte 有符号整数
boolean boolean 布尔类型,true或者false
float float 单精度浮点数
double double 双精度浮点数
string string 字符系列,可以指定字符集,可以使用单引号或者双引号。
timestamp timestamp 时间类型
binary 不支持 字节数组

注意:Impala虽然支持array,map,struct复杂数据类型,但是支持并不完全,一般处理方法,将复杂类型转化为基本类型,通过hive创建表。

10.2 不支持HiveQL以下特性

  • 可扩展机制
  • xml json函数
  • 聚合函数
  • 多distinct查询

十一、常用sql

-- 创建数据库
create database db1;-- 使用数据库
use db1;-- 删除数据库
drop database db1;-- 创建外部表
CREATE TABLE table01 (id INT,name STRING,confirm_flag INT,create_date TIMESTAMP,create_user_id STRING,id BIGINT,license_num STRING,NAME STRING,postcode STRING,update_date TIMESTAMP,update_user_id STRING,valid_flag INT
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' WITH SERDEPROPERTIES ('serialization.format' = '|','field.delim' = '|'
) STORED AS Parquet LOCATION 'hdfs://node03:8020/user/hive/warehouse/table01';
-- 使用现有表进行创建
create table tab_3 like tab_1;-- 创建内部表
CREATE TABLE table01 (id INT,name STRING,confirm_flag INT,create_date TIMESTAMP,create_user_id STRING,id BIGINT,license_num STRING,NAME STRING,postcode STRING,update_date TIMESTAMP,update_user_id STRING,valid_flag INT
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' WITH SERDEPROPERTIES ('serialization.format' = '|','field.delim' = '|'
) STORED AS Parquet LOCATION 'hdfs://node03:8020/test/table01';-- 创建视图
create view v1 as select count(id) as total from tab_3 ;
-- 查询视图
select * from v1;
-- 查看视图定义
describe formatted v1-- 数据导入
--- 加载数据:
--  insert语句:插入数据时每条数据产生一个数据文件,不建议用此方式
-- 加载批量数据
--  load data方式:在进行批量插入时使用这种方式比较合适
--  来自中间表:此种方式使用于从一个小文件较多的大表中读取文件并写
--入新的表生产少量的数据文件。也可以通过此种方式进行格式转换。
-- 空值处理:
--  impala将“\n” 表示为NULL,在结合sqoop使用是注意做相应的空字段
--过滤,
--  也可以使用以下方式进行处理:
alter table name set tblproperties
("serialization.null.format"="null")-- 示例CREATE TABLE access_log_text (log_id BIGINT,idc_id STRING,house_id BIGINT,src_port BIGINT,dest_port BIGINT,protocol_type INT,   access_time STRING ,src_ip_long BIGINT,dest_ip_long BIGINT,url64 STRING
) PARTITIONED BY (hn BIGINT,ds STRING) ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE;alter table access_log_text add partition(hn=91014,ds='2017-05-18-11');insert into access_log_text partition(hn=91014,ds='2017-05-18-11') values(12345,"A2.B1.B2-20090003",91014,53487,80,1,"2017-05-18 11:00:19",2076024904,2086642602,"aHR0cDovL3d4MS5zaW5haW1nLmNuL3RodW1iMTUwLzY5MjdlN2E1bHkxZmVkdnU4ejkxNmoyMGM4MGVzM3prLmpwZw==");--内部表,parquet格式存储
CREATE TABLE access_log_parquet (log_id BIGINT,idc_id STRING,house_id BIGINT,src_port BIGINT,dest_port BIGINT,protocol_type INT,   access_time STRING ,src_ip_long BIGINT,dest_ip_long BIGINT,url64 STRING
) PARTITIONED BY (hn BIGINT,ds STRING) STORED AS PARQUET;alter table access_log_parquet add partition(hn=91014,ds='2017-05-18-11');
alter table access_log_parquet add partition(hn=91014,ds='2017-05-18-12');insert into access_log_parquet partition(hn=91014,ds='2017-05-18-11') values(12345,"A2.B1.B2-20090003",91014,53487,80,1,"2017-05-18 11:00:19",2076024904,2086642602,"aHR0cDovL3d4MS5zaW5haW1nLmNuL3RodW1iMTUwLzY5MjdlN2E1bHkxZmVkdnU4ejkxNmoyMGM4MGVzM3prLmpwZw==");insert into access_log_parquet partition(hn=91014,ds='2017-05-18-12') select log_id,idc_id,house_id,src_port,dest_port,protocol_type,access_time,src_ip_long,dest_ip_long,url64 from access_log_text  where hn=91014 and ds='2017-05-18-11';--覆盖更新
insert overwrite table access_log_parquet (log_id,idc_id,house_id,src_port,dest_port,protocol_type,access_time,src_ip_long,dest_ip_long,url64) partition (hn=91014, ds = '2017-05-18-13' ) select log_id,idc_id,house_id,src_port,dest_port,protocol_type,access_time,src_ip_long,dest_ip_long,url64 from access_log_parquet where hn=91014 and ds='2017-05-18-11';--load data inpath
load data inpath '/input/access/12345.txt' into table access_log_text partition (hn=91014,ds='2017-05-18-11');--文件拷贝
需要刷新元数据外部表
CREATE EXTERNAL TABLE access_log_parquet_external (log_id BIGINT,idc_id STRING,house_id BIGINT,src_port BIGINT,dest_port BIGINT,protocol_type INT,   access_time STRING ,src_ip_long BIGINT,dest_ip_long BIGINT,url64 STRING
) PARTITIONED BY (hn BIGINT,ds STRING) STORED AS PARQUET LOCATION '/user/hive/warehouse/access_log_parquet_external ';alter table access_log_parquet_external add partition(hn=91014,ds='2017-05-17-11');

impala操作指南相关推荐

  1. 叛乱联机服务器未响应,叛乱沙漠风暴怎么开服 叛乱沙漠风暴开服操作指南详解 安装准备-游侠网...

    叛乱沙漠风暴怎么开服?游戏一款多人联机操作游戏,在开服前期要做好相应的准备工作,也就是设置一些选项,这里给大家带来了"xudong162"分享的叛乱沙漠风暴开服操作指南详解,详情一 ...

  2. impala 本年格式化时间_hive,hbase,impala之间的对比

    hbase在三者中更注重的是存储,它实现了类似mysql的double write机制,但是它是一种NoSQL的数据库,并且是可以支持列式存储的,算是比较大的一个内存Hash表.hbase也采用了类似 ...

  3. oracle读书笔记之Oracle 11g R2 DBA操作指南(前三章)

    Oracle 11g R2 DBA操作指南是我学习的第一本讲述oracle数据库知识的书籍,在此记录下自己的学习笔记,对于书中的知识点本人通过实际操作进行验证. 1.Oracle数据库基础 1.1.关 ...

  4. tcp转串口_PROFIBUS DP与Modbus/TCP网络转换操作指南

    >>PROFIBUS DP转Modbus/TCP网关操作指南 摘要: 本文以NT100-RE-DP网关为例,实现Modbus/TCP Client与PROFIBUS DP设备间的通讯,从而 ...

  5. GitHub使用教程详解——官网操作指南(翻译)

    GitHub使用教程详解--官网操作指南(翻译) GitHub使用指南 原文地址:GitHub官网 示例项目:Hello World 十分钟轻松教学 在学习计算机语言编程的过程中创建Hello Wor ...

  6. DeepMind推出分布式深度强化学习架构IMPALA,让一个Agent学会多种技能

    维金 编译自 DeepMind Blog 量子位 出品 | 公众号 QbitAI 目前,深度增强学习(DeepRL)技术在多种任务中都大获成功,无论是机器人的持续控制问题,还是掌握围棋和雅达利的电子游 ...

  7. java操作impala

    impala函数支持不行,能处理的问题域有一定的限制,与Hive配合使用,对Hive的结果数据集进行实时分析 public class App {static String JDBC_DRIVER = ...

  8. Impala table/column统计分析

    为什么80%的码农都做不了架构师?>>>    介绍 impala可以通过访问数据的统计信息对复杂和多表的查询做更好的优化,impala使用这些信息帮助一个work进行并行和分布式查 ...

  9. 拨号到公司网络操作指南

    拨号到公司网络操作指南 转载于:https://blog.51cto.com/itlingm/399066

最新文章

  1. 1732 Fibonacci数列 2
  2. *用C#创建Windows服务(Windows Services)
  3. 笔记-信息化与系统集成技术-客户关系系统CRM
  4. python for循环连续输入五个成绩判断等级_Python 入门(五)条件判断和循环
  5. leetcode 258. 各位相加(Java版)
  6. java mongodb 删除字段类型_Mongodb基本数据类型、常用命令之增加、更新、删除
  7. udp 使用connect优点_一文搞懂TCP和UDP的区别
  8. git与github学习笔记
  9. mysql主从有关参数_mysql主从复制配置
  10. Java字符串截取(substring)
  11. SSH连接原理及ssh-key
  12. 侯捷推荐的C++书单
  13. Introduction to dnorm, pnorm, qnorm, and rnorm for new biostatisticians
  14. 2017年11月软考全国各省市报名时间及报名网址(动态更新)
  15. IT服务台基础概念及创建方法
  16. 赫斌C语言全案文,自用笔记,给后来者一点思路
  17. linux常用命令2
  18. ImageNet 1000个类 具体内容
  19. Android Genymotion使用中文输入法
  20. 2021SC@SDUSC-Zxing(十一):二维码的定位(Detector)及位置校正有关算法介绍

热门文章

  1. JS中的setTimeout和setInterval函数
  2. 2023年国内五大 IoT 物联网平台费用对比
  3. ffmpeg- 部分错误码-av_interleaved_write_frame/av_write_frame
  4. 我人生的第一次电话面试
  5. 54欧氏空间01——内积与欧氏空间、Cauchy-Schwarz不等式、度量矩阵
  6. 搜索和替换PPT里面指定字体文字的(某些字体无法随演示文稿一起保存)解决方案
  7. 我不那么喜欢的win11,怎么跳过登录微软账号!!! 三种方法
  8. Web聊天室消息[已读未读]的实现
  9. AAAI 2021 最佳论文出炉!华人包揽 4 奖,北航成最大赢家,Transformer变热门
  10. 学美术对我们有什么帮助?这4条总结的很全面~