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

【Hive中常见的优化手段----数据采集!Join 优化!Hive索引!数据倾斜!mapreduce本地模式!map和reduce数量调整!】

前言:
💞💞大家好,我是书生♡,今天主要和大家分享一下Hive中常见的优化手段----数据采集!常见的Join 优化有哪几种!什么是Hive索引!数据怎么发生倾斜!什么是mapreduce的本地模式!map和reduce数量调整!!!希望对大家有所帮助。
💞💞
代码是你的画笔,创新是你的画布,用它们绘出属于你的精彩世界,不断挑战,无限可能!

个人主页⭐: 书生♡
gitee主页🙋‍♂:闲客
专栏主页💞:大数据开发
博客领域💥:大数据开发,java编程,算法,Python
写作风格💞:超前知识点,干货,思路讲解,通俗易懂
支持博主💖:关注⭐,点赞、收藏⭐、留言💬

目录

  • 1. 分桶表
  • 2.数据采集
  • 3. Join优化
    • 3.1 Map Join 优化
    • 3.2 Bucket Map Join 优化
    • 3.3 SMB Join 优化
  • 4. Hive索引
    • 4. 1什么是索引
    • 4.2 索引的作用
    • 4.3 Hive索引原理
    • 4.4 ORC相关索引
      • 4.4.1 Row Group Index索引
      • 4.4.2 Bloom Fliter Index索引
    • 4.5 什么是时候使用什么索引
  • 5. 数据倾斜
    • 5.1 Join数据倾斜
    • 5.2 group by 数据倾斜
    • 5.3 怎么发现数据倾斜
  • 6.列裁剪和分区裁剪
  • 7. Fetch抓取机制
  • 8. mapreduce本地模式

1. 分桶表

我们先来回顾一下,什么是分桶表?本质是什么?有什么作用?

  • 分桶表

分桶表(Bucketed Table)是相对分区表进行更细粒度的划分。它的原理是将数据按照指定字段的哈希值分成固定数量的桶(Buckets),将每条记录分配到对应的桶中。分桶表将整个Hive表数据内容按照某列属性值的hash值进行分区,通过分区将这些表数据划分到多个文件中进行存储。

  • 分桶表的本质

分桶表的本质无论是分区,还是分桶,本质都是对数据的拆分存储,作用是为了提升查询的效率。
因为分桶表就是将数据存储在不同的文件中。

  • 作用
  1. 数据管理和优化:

    数据分散:通过将数据按照指定的列进行哈希并分配到不同的桶中,分桶表可以将大数据集分散到多个小文件中进行存储。这有助于管理和维护大型数据集,因为每个桶都可以独立地进行处理。

    数据均匀分布:选择适当的分桶列可以确保数据在桶之间均匀分布,从而避免数据倾斜问题。数据倾斜是指某些桶中的数据量远大于其他桶,这可能导致某些任务执行缓慢或失败。

  1. 查询性能提升:

    JOIN操作优化:当两个表都进行了分桶,并且分桶的列和桶的数量相同时,Hive可以只扫描那些具有相同桶编号的桶来执行JOIN操作。这显著减少了需要扫描的数据量,从而提高了JOIN操作的性能。

    采样查询:分桶表支持基于桶的采样查询,这意味着可以只查询一个或多个桶中的数据,而不是整个表。这对于快速分析和测试数据集的一部分非常有用。

  1. 数据倾斜的避免:

    选择合适的分桶列可以确保数据在桶之间均匀分布,从而避免数据倾斜问题。数据倾斜是大数据处理中常见的问题之一,它可能导致某些任务执行缓慢或失败。通过使用分桶表,可以更好地管理和控制数据的分布。

2.数据采集

定义:
  采样是从数据集中抽取部分样本数据进行分析和查询的一种技术。在Hive中,可以使用TABLESAMPLE子句来进行采样查询。采样可以帮助在大数据集上进行快速的试验和分析,而不需要处理整个数据集。

  当表的数据量比较庞大的时候, 在编写SQL语句后, 需要首先测试 SQL是否可以正常的执行, 需要在表中执行查询操作, 由于表数据量比较庞大, 在测试一条SQL的时候整个运行的时间比较久, 为了提升测试效率, 可以整个表抽样出一部分的数据, 进行测试。

  • 语法
采样函数: tablesample(bucket x out of y [on column|rand()])

x: 从第几个桶开始进行采样;
y: 抽样比例;
column: 分桶的字段, 可以省略,rand()表示随机抽取

注意:

  1. x 不能大于 y; 2. y 必须是表的分桶数量的倍数或者因子

案例:

  1. 假设 A表有10个桶, 请分析, 下面的采样函数, 会将那些桶抽取出来呢?
    tablesample(bucket 2 out of 5 on xxx)
  2. 假设 A 表有20个桶, 请分析, 下面的抽样函数, 会将那些桶抽取出来呢?
    tablesample(bucket 4 out of 4 on xxx) 共计抽取2个桶, 分别是 1号桶和6号桶
    tablesample(bucket 8 out of 40 on xxx) 共计抽取5个桶, 分别是 3,7,11,15,19
    抽取二分之一个桶, 分别是7号桶二分之一

3. Join优化

我们常见的MR流程是怎么样子的?
在这里插入图片描述

那么这种的工作流程可能会出现什么弊端呢?

  1. 可能会存在数据倾斜的问题 (某几个reduce接收数据量远远大于其他的reduce接收数据量)
  2. 所有的数据处理的操作, 全部都压在reduce中进行处理, 而reduce数量相比Map来说少的多,导致整个reduce压力比较大。

那我们就说说怎么提高效率

3.1 Map Join 优化

一、Map Join概述

Map Join是一种在Map阶段进行表之间连接的技术,它避免了传统的Reduce阶段连接,从而节省了Shuffle阶段的大量数据传输,提高了查询性能。Map Join通常用于小表与大表之间的连接操作。

二、Map Join原理

  • 小表加载到内存:
    在Map阶段开始之前,MapJoin操作会首先加载小表的数据到每个Mapper的内存中,通常是将小表数据构造成一个哈希表(HashTable)的形式。
  • 大表数据读取与哈希计算:
    Mapper在读取大表数据时,会按照Join键对大表的每条记录进行哈希计算。
  • 内存匹配:
    Mapper将大表数据的哈希计算结果与内存中加载的小表哈希表进行匹配。
    如果匹配成功,则直接将两个表的记录进行连接并输出。

Map Task 原理图
在这里插入图片描述

Map Join: 每一个mapTask在读取数据的时候, 每读取一条数据, 就会和内存中表数据进行匹配, 如果能匹配的上,将匹配上数据合并在一起, 输出即可

好处: 将原有reduce join 问题全部都可以解决

弊端:
1- 比较消耗内存
2- 要求整个 Join 中, 必须的都有一个小表, 否则无法放入到内存中

仅适用于: 小表 join 大表或者大表 join 小表

使用的条件,需要开启的设置


set hive.auto.convert.join=true; -- 开启 map join的支持  默认值为True
set hive.mapjoin.smalltable.filesize= 25000000;  --设置 小表的文件大小(23.84m)
set hive.auto.convert.join.noconditionaltask.size=20971520; -- 设置 join任务数据量

如果不满足条件, HIVE会自动使用 reduce join 操作

3.2 Bucket Map Join 优化

Map Task 只是适用于大表和小表连接,如果是一个中表应该怎么办呢?

这个时候我们就使用 Bucket Map Join 优化 解决问题。当然 如果中型表能对数据进行提前过滤, 尽量提前过滤, 过滤后, 有可能满足了Map Join 条件 (并不一定可用)。

我们的这个设置默认是关闭的,需要我们手动开启

-- bucket map  join
set hive.optimize.bucketmapjoin; -- 默认false

前提条件:

1- Join两个表必须是分桶表
2- 开启 Bucket Map Join 支持: set hive.optimize.bucketmapjoin = true;
3- 一个表的分桶数量是另一个表的分桶数量的整倍数
4- 分桶列 必须 是 join的ON条件的列
5- 必须建立在Map Join场景中(中型表是小表的3倍, 此时分至少3个桶)

Bucket Map Join 优化 流程图
在这里插入图片描述
原理图–方便理解
在这里插入图片描述

3.3 SMB Join 优化

这个优化适用于我们的大表和大表进行关联。

-- 使用条件:
--     1- 两个表必须都是分桶表
--     2- 开启 SMB Join 支持:set hive.auto.convert.sortmerge.join; -- 默认falseset hive.optimize.bucketmapjoin.sortedmerge ;-- 默认falseset hive.auto.convert.sortmerge.join.noconditionaltask;--  Hive 0.13.0默认开启
--    3- 两个表的分桶的数量是一致的
--    4- 分桶列 必须是 join的 on条件的列, 同时必须保证按照分桶列进行排序操作-- 开启强制排序set hive.enforce.sorting; -- hive2.x移除 默认true-- 在建分桶表使用: 必须使用sorted by()--    5-  应用在Bucket Map Join 场景中-- 开启 bucket map joinset hive.optimize.bucketmapjoin ; --默认false

[外链图片转存中…(img-y3XU0ivK-1719551256849)]

注意在我们的开发中

事实表 + 低基数的维度表 进行关联: Map Join 优化
事实表 + 高基数的维度表 进行关联: Bucket Map Join 优化
事实表 + 事实表 进行关联: SMB Join 优化(相对使用最少, 因为条件过于苛刻, 而且对资源消耗过大, 如果资源不够, 运行效率低于原始Join方案)

4. Hive索引

4. 1什么是索引

索引的定义:

  • 关系型数据库中的索引:
    在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
    索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。一般是建立在主键上的。

  • 关系型数据库中的索引:
    hive中的索引功能是有限的,hive中没有关系数据库中主键的概念,但是还是可以对某一些字段建立索引。
    Hive索引的目标是提高对表的某些列进行查询查找的速度。如果没有索引,则使用类似于“WHERE tab1.col1 = 10”这样的谓词进行查询’加载整个表或分区并处理所有行。但是如果col1存在索引,那么只需要加载和处理文件的一部分。

4.2 索引的作用

  1. 提高检索效率:
    索引可以对数据库表中的一列或多列的值进行排序,形成一个单独的、物理的存储结构。
    类似于图书的目录,索引允许数据库系统快速定位到所需的数据,而不必全表扫描,从而大大提高了检索效率。
    在数据量庞大的情况下,使用索引可以显著减少查询时间,提高系统响应速度。
  2. 优化系统性能:
    通过索引,数据库系统可以减少磁盘I/O操作,因为索引通常存储在内存中,可以快速访问。
    索引将数据进行结构化的存储和管理,有助于减少系统的存储空间和访问时间。
    优化索引的使用可以进一步提高系统的性能和响应速度,提升用户的使用体验。

4.3 Hive索引原理

Hive索引原理:

  • 在指定列上建立索引,生成一张索引表(Hive的一张物理表),记录以下三个字段:索引列的值、该值对应的HDFS文件路径、该值在文件中的偏移量
  • 在执行索引字段查询时候,首先额外生成一个MapReduce job,根据对索引列的过滤条件,从索引表中过滤出索引列的值对应的hdfs文件路径及偏移量,输出到hdfs上的一个文件中,然后根据这些文件中的 hdfs路径和偏移量,筛选原始input文件,生成新的split,作为整个job的split,达到不用全表扫描的目的。

简单点来说就是,我们在将一个字段设置为索引的时候,我们会将这个字段的值以及对应文件在hdfs的位置和文件的偏移量存在一个临时表中。通过这个偏移量就可以直接查到我们对应数据的那一行。所以速度会比较快!!!

在这里插入图片描述

缺点:

hive原始索引不会自动更新,每次表中数据发生变化后, 都是需要手动重建索引操作, 比较耗费时间和资源, 整体提升性能一般

4.4 ORC相关索引

什么是ORC:
  ORC的全称是(Optimized Record Columnar),是列式存储格式,使用ORC文件格式可以提高hive读、写和处理数据的能力。

在ORC格式的hive表中,记录首先会被横向的切分为多个stripes,然后在每一个stripe内数据以列为单位进行存储,所有列的内容都保存在同一个文件中。每个stripe的默认大小为256MB,相对于之前RCFile每个4MB而言,更大的stripe使ORC的数据读取更加高效。

ORC在RCFile的基础上进行了一定的改进,所以与RCFile相比,具有以下一些优势:

  • ORC中的特定的序列化与反序列化操作可以使ORC file writer根据数据类型进行写出。
  • 提供了多种RCFile中没有的indexes,这些indexes可以使ORC的reader很快的读到需要的数据,并且跳过无用数据,这使得ORC文件中的数据可以很快的得到访问。
  • 由于ORC file writer可以根据数据类型进行写出,所以ORC可以支持复杂的数据结构(比如Map等)。
  • 除了上面三个理论上就具有的优势之外,ORC的具体实现上还有一些其他的优势,比如ORC的stripe默认大小更大,为ORC writer提供了一个memory manager来管理内存使用情况。

在这里插入图片描述

索引的原理步骤

  • 首先现将数据切割成N份
    比如:第一份的数据是0-500
    第二份就是 501-100
    第三份就是 1001-1500
  • 每一份在按照列来存储,先储存第一列再是第二列以此类推
  • 然后就会在我们的每一列后面加一个索引值
  • 我们查询得时就会根据索引值去判断是不是在这一列

4.4.1 Row Group Index索引

row group index: 行组索引 (又叫最小最大索引)

前提条件

  1. 要求表的存储类型为ORC存储格式
  2. 在创建表的时候, 必须开启 row group index 索引支持 ‘orc.create.index’=‘true’
  3. 在插入数据的时候, 必须保证需求进行索引列, 按序插入数据

适用于什么样子数据?
数值类型的, 并且对数值类型进行 > < >= <=操作

插入数据到ORC表后, 会自动进行划分为多个script片段, 每个片段内部, 会保存着每个字段的最小, 最大值, 这样, 当执行查询 > < = 的条件筛选操作的时候, 根据最小最大值锁定相关的script片段, 从而减少数据扫描量, 提升效率

注意:
我们如果要使用这个索引就要在建表的时候添加相关语句

CREATE TABLE lxw1234_orc2 (字段列表 ....) stored AS ORC TBLPROPERTIES ( 'orc.compress'='SNAPPY', -- 开启行组索引 'orc.create.index'='true' )

4.4.2 Bloom Fliter Index索引

bloom filter index (布隆过滤索引): 布隆过滤器

前提条件

  1. 要求表的存储类型为 ORC存储方案

  2. 在建表的时候, 必须设置为那些列构建布隆索引

  3. 仅能适合于等值过滤查询操作

适用于什么样子的数据呢?
数据的值是确定的 例如:我们的数据是唯一数据的“北京”,‘爱好’等等。

在开启布隆过滤索引后, 可以针对某个列, 或者某几列来建立索引, 构建索引后, 会将这一列的数据的值存储在对应script片段的索引信息中, 这样当进行 等值查询的时候, 首先会到每一个script片段的索引中, 判断是否有这个值, 如果没有, 直接跳过script, 从而减少数据扫描量, 提升效率

注意:
我们如果要使用这个索引就要在建表的时候添加相关语句

 CREATE TABLE lxw1234_orc2 (字段列表....)stored AS ORC TBLPROPERTIES ( 'orc.compress'='SNAPPY', -- 开启 行组索引 (可选的, 支持全部都打开, 也可以仅开启一个)'orc.create.index'='true', -- pcid字段开启BloomFilter索引 'orc.bloom.filter.columns'='pcid,字段2,字段3...')

4.5 什么是时候使用什么索引

1- 对于行组索引: 我们建议只要数据存储格式为ORC, 建议将这种索引全部打开, 至于导入数据的时候, 如果能保证有序, 那最好, 如果保证不了, 也无所谓, 大不了这个索引的效率不是特别好

2- 对于布隆过滤索引: 建议将后续会大量的用于等值连接的操作字段, 建立成布隆索引, 比如说: JOIN的字段 经常在where后面出现的等值连接字段

5. 数据倾斜

数据倾斜(Data Imbalance)或称为类别不平衡(Class Imbalance),是指在分类问题中,不同类别的样本数量存在显著差异的情况。具体来说,当某个类别的样本数量远大于其他类别时,就称该数据集存在数据倾斜问题。

5.1 Join数据倾斜

我们在进行一些SQL语句的时候, 描述过reduce 端Join的问题, 其中就包含reduce端Join存在数据倾斜的问题。

比如按照某个分区就会发现,我们的某一个分区的数据可能会过多,这就会导致数据倾斜。

解决方法一:使用Join 优化

Map Join (默认开启),
Bucket Map Join(默认关闭,条件是分桶表,且数量是倍数关系) ,
SMB Join(条件是分桶表,且桶数量必须一致,插入数据的时候要排序)

注意:
通过 Map Join,Bucket Map Join,SMB Join 来解决数据倾斜, 但是 这种操作是存在使用条件的, 如果无法满足这些条件, 无法使用 这种处理方案

解决方法二(运行期):将产生倾斜的数据,单独放到一个MR中处理,然后在和之前的MR进行合并

问题:我们怎么知道那些数据是过多的呢?如何找到那些存在倾斜的key呢? 特点: 这个key数据有很多

  • 在执行MR的时候, 会动态统计每一个 k2的值出现重复的次数, 当这个重复的次数达到一定的阈值后, 认为当前这个k2的数据存在数据倾斜, 自动将其剔除, 交由给一个单独的MR来处理即可,两个MR处理完成后, 将结果基于union all 合并在一起即可

我们可以设置一个门阀值,一旦数据超过这个值就属于数据倾斜。

 set hive.optimize.skewjoin=true;  -- 开启运行期处理倾斜参数默认falseset hive.skewjoin.key=100000;   -- 阈值,  此参数在实际生产环境中, 需要调整在一个合理的值(否则极易导致大量的key都是倾斜的),默认100000

我们怎么去设计这个门阀值呢?
在开发中,我们一般选择超过正常值得3-5 倍才算是倾斜

适用于: 并不清楚那个key容易产生倾斜, 此时交由系统来动态检测

解决方法三(编译期):将产生倾斜的数据,单独放到一个MR中处理,然后在和之前的MR进行合并

思路1: 在创建这个表的时候, 我们就可以预知到后续插入到这个表中数据, 那些key的值会产生倾斜, 在建表的时候, 将其提前配置设置好即可, 在后续运行的时候, 程序会自动将设置的key的数据单独找一个MR来进行处理即可, 处理完成后, 再和原有结果进行union all 合并操作

这个和上面的不同点在于 :

  • 运行期是不知道那些数据会产生倾斜,让系统自己去识别,我们只需要设置门阀值。
  • 编译期是预知到后续插入到这个表中数据, 那些key的值会产生倾斜,提前将这些值放到其他的Mr中。

设置编译期处理倾斜的设置

 set hive.optimize.skewjoin.compiletime=true;  -- 开启编译期处理倾斜参数CREATE TABLE list_bucket_single (key STRING, value STRING) -- 倾斜的字段和需要拆分的key值 SKEWED BY (key) ON (1,5,6) -- 为倾斜值创建子目录单独存放 [STORED AS DIRECTORIES];

思路2: 大量的key可以拼接rand()
实操2: 举例: 如果大量相同的男,可以拼接随机数: concat(‘男’,rand())

适用于: 提前知道那些key存在倾斜。

底层union的优化

不管是运行期 还是编译期的join倾斜解决, 最终都会运行多个MR, 将多个MR结果通过union all 进行汇总, union all也是需要单独一个MR来处理

我们可以通过设置参数

开启此参数即可: set hive.optimize.union.remove=true;

5.2 group by 数据倾斜

假设我们在进行group by 进行分组的时候,是通过男女性别分组,一旦出现男生数量远远大于女生的数量就会发生数据的倾斜。

解决方案一:提前聚合

MR的 combiner(规约, 提前聚合) 减少数据达到reduce数量, 从而减轻倾斜问题

默认开启 set hive.map.aggr=true;

假设我们有一个表,需要在map返回500条数据到Reduce中,但是这其中有大量的数据是可以进行计算的,并且我们的结果就是需要这些计算,我们就可以在map的阶段先进行一次聚合,将数据量减少在给到Reduce进行数据的合并。

在这里插入图片描述
解决方案二:负载均衡
负载均衡的解决方案(需要运行两个MR来处理) (大combiner方案)

默认关闭,如果需要,手动开启      
set hive.groupby.skewindata=true;

怎么进行2个MR操作呢?
[外链图片转存中…(img-rDovwNNW-1719551256850)]

第一个MR执行完成了,每个reduce都接收到数据:
mapTask执行完成后, 在进行分发数据到达reduce, 默认情况下将相同key的数据发往同一个reduce, 目前采用方案为随机分发, 保证每一个reduce拿到相等数量的数据信息(负载过程, 让每一个reduce接收到相同数量的数据)
第二个MR进行处理:严格按照相同key发往同一个reduce

负载均衡解决:
第一个MR执行完成了, 随机打乱分配,假设每个reduce都接收到四条数据, 自然也就不存在数据倾斜的问题了

第二个MR进行处理: 严格按照相同key发往同一个reduce

注意:更能彻底解决数据倾斜问题, 因为其处理数据范围更大, 整个整个数据集来处理

5.3 怎么发现数据倾斜

倾斜发生后, 出现的问题, 程序迟迟无法结束, 或者说翻译的MR中reduceTask有多个, 大部分的reduceTask都执行完成了, 只有其中一个或者几个没有执行完成, 此时认为发生了数据倾斜。

查看方式:

  • 通过Yarn查看(运行过程中) 或者 jobhistory查看(已经结束的程序) (此操作, 只能在本地演示查看, 云端环境没有开启yarn端口, 无法查看的), 我们需要观察每个reduceTask执行时间, 如果发现其中一个或者几个reduce执行时间, 远远大于其他的reduceTask执行时间, 那么说明存在数据倾斜的问题

6.列裁剪和分区裁剪

  • 列裁剪(在列式存储中效果最明显)

    只读取我们指定的列,其余列不查看,提高查询效率,减小检索范围

    Hive在读数据的时候,可以只读取查询中所需要用到的列,而忽略其他列。例如,若有以下查询:在实施此项查询中,Q表有5列(a,b,c,d,e),Hive只读取查询逻辑中真实需要的3列a、b、e, 而忽略列c,d;这样做节省了读取开销,中间表存储开销和数据整合开销。
    注意:Hive自动执行这种裁剪优化
    裁剪对应的参数项为:
    --默认值为真 在hive 2.x中无需在配置了, 直接为固定值: true
    hive.optimize.cp=true; 
    
  • 分区裁剪

    只读取我们指定的分区数据,其余分区不查看,提高查询效率,减小检索范围

    在join中必须书写on 尽量不要使用where 如果一定要使用在连接之前使用where

    执行查询SQL的时候, 能在join之前提前过滤的操作, 一定要提前过滤, 不要在join后进行过滤操作
    如果操作的表是一张分区表, 那么建议一定要带上分区字段, 以减少扫描的数据量, 从而提升效率,
    例如,若有以下查询:select * from t1 join t2 on t1.id = t2.id and t1.dt = '2021-12-31'; (dt是分区字段)
    select * from (select * from t1 where dt = '2021-12-31') t1 join t2 on t1.id = t2.id;注意:Hive自动执行这种裁剪优化
    分区参数为:
    -- 默认为就是true (在hive 2.x中无需在配置了, 直接为固定值: true)
    hive.optimize.pruner=true
    

7. Fetch抓取机制

  • 功能:在执行sql的时候,能不走MapReduce程序处理就尽量不走MapReduce程序处理。
  • 尽量直接去操作数据文件。
  • 设置: hive.fetch.task.conversion= more。 默认设置
--在下述4种情况下 sql不走mr程序-- more 模式下如下内容不需要走mr程序
--全局查找
select * from student;
--字段查找
select num,name from student;
--limit 查找
select num,name from student limit 2;
-- 简单的条件过滤
select num,name from student where num > 2;-- minimal 模式下如下内容不需要走mr程序
--全局查找
select * from student;
--字段查找
select num,name from student;
--limit 查找
select num,name from student limit 2;-- none 模式下所有的操作都需要走mr程序

8. mapreduce本地模式

  • 功能:如果非要执行MapReduce程序,能够本地执行的,尽量不提交yarn上执行。

  • 默认是关闭的。意味着只要走MapReduce就提交yarn执行。

  mapreduce.framework.name = local 本地模式mapreduce.framework.name = yarn 集群模式 
  • Hive提供了一个参数,自动切换MapReduce程序为本地模式,如果不满足条件,就执行yarn模式。

    开启本地模式后要注意: 我们满足如下条件后会走本地模式, 但是本地服务器中资源一定足够么? 不一定

    有时候看上去还有空间但是空间已经分配给yarn了

set hive.exec.mode.local.auto = true;--3个条件必须都满足 自动切换本地模式
The total input size of the job is lower than: hive.exec.mode.local.auto.inputbytes.max (128MB by default)  --数据量小于128MThe total number of map-tasks is less than: hive.exec.mode.local.auto.tasks.max (4 by default)  --maptask个数少于4个The total number of reduce tasks required is 1 or 0.  --reducetask个数是0 或者 1

相关文章:

【Hive中常见的优化手段----数据采集!Join 优化!Hive索引!数据倾斜!mapreduce本地模式!map和reduce数量调整!】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是书生♡&#xff0c;今天主要和大家分享一下Hive中常见的优化手段----数据采集&#xff01;常见的Join 优化有哪几种&#xff01;什么是Hive索引&#xff01;数据怎么发生倾斜&#xff01;什么是mapreduce的本…...

【面试系列】软件工程师高频面试题及详细解答

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…...

Qt开发 | Qt界面布局 | 水平布局 | 竖直布局 | 栅格布局 | 分裂器布局 | setLayout使用 | 添加右键菜单 | 布局切换与布局删除重构

文章目录 一、Qt界面布局二、Qt水平布局--QHBoxLayout三、Qt竖直布局四、Qt栅格布局五、分裂器布局代码实现六、setLayout使用说明七、布局切换与布局删除重构1.如何添加右键菜单2.布局切换与布局删除重构 一、Qt界面布局 Qt的界面布局类型可分为如下几种 水平布局&#xff08;…...

LW-DETR: A Transformer Replacement to YOLO for Real-Time Detection

LW-DETR: A Transformer Replacement to YOLO for Real-Time Detection 论文链接&#xff1a;http://arxiv.org/abs/2406.03459 代码链接&#xff1a;https://github.com/Atten4Vis/LW-DETR 一、摘要 介绍了一种轻量级检测变换器LWDETR&#xff0c;它在实时物体检测方面超越…...

前端技术(二)——javasctipt 介绍

一、javascript基础 1. javascript简介 ⑴ javascript的起源 ⑵ javascript 简史 ⑶ javascript发展的时间线 ⑷ javascript的实现 ⑸ js第一个代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>…...

FireFox 编译指南2024 Windows10篇-环境准备(一)

1. 引言 在开源浏览器项目中&#xff0c;Firefox因其高性能和灵活性而备受开发者青睐。为了在本地环境中编译和定制Firefox&#xff0c;开发者需要做好充分的环境准备工作。这不仅是编译成功的基础&#xff0c;也是后续调试、优化和二次开发的关键步骤。 编译Firefox是一个复…...

Spring Boot中的热部署配置

Spring Boot中的热部署配置 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot项目中实现热部署配置&#xff0c;提升开发效率和项…...

用ChatGPT快速打造一个专业WordPress网站

作为一个使用HostEase多年的老用户&#xff0c;我想和大家分享一下如何利用HostEase和ChatGPT快速构建一个WordPress网站的经验。这不仅仅是一个简单的操作步骤&#xff0c;更是一次从零到有的实战经历。希望我的分享能给你们带来一些实用的帮助。 获取主机服务和域名 首先&a…...

dsp入门

安装环境 安装 ccs5.5安装 BIOS-MCSDK 多核软件开发包安装 仿真器驱动 工程创建与导入工程 创建工程 创建工程填信息添加.cmd文件&#xff0c;配置内存编译 导入工程 导入 配置工程 选择properties 环境变量 头文件 库文件 仿真器 添加仿真器 先调出仿真器界面创建仿…...

Java并发编程-Atomiclnteger、LongAdder等原子类的使用及案例实战

文章目录 i++和Atomiclnteger之间的差别分析以及使用介绍i++AtomicInteger使用介绍i++ 示例AtomicInteger 示例总结Atomiclnteger中的CAS无锁化原理和思路介绍CAS 原理AtomicInteger 的 CAS 应用无锁化思路Atomiclnteger源码剖析:仅限JDK内部使用的Unsafe类`Unsafe` 类的关键作…...

九浅一深Jemalloc5.3.0 -- ②浅*size class

目前市面上有不少分析Jemalloc老版本的博文&#xff0c;但5.3.0却少之又少。而且5.3.0的架构与之前的版本也有较大不同&#xff0c;本着“与时俱进”、“由浅入深”的宗旨&#xff0c;我将逐步分析Jemalloc5.3.0的实现。 另外&#xff0c;单讲实现代码是极其枯燥的&#xff0c;…...

JavaScript——属性的增删改查

目录 任务描述 相关知识 属性的获取 方式一 方式二 属性的修改与新增 删除属性 编程要求 任务描述 Luma Restaurant 以前的财务人员在统计销售额的时候不小心把数据弄错了&#xff0c;现在的财务人员想通过一个 JavaScript 函数方便的修改数据&#xff0c;并署上自己的…...

51单片机第15步_串口多机通讯使用CRC8校验

本章重点介绍串口多机通讯使用CRC8校验。 数据格式:"$123xxxx*crc8\r\n"; 如:"$1234567890ABCDEF*06\r\n" 如:"$1231234567890*31\r\n" crc8是CRC校验值,为十六进制的ASCII码,不包含$和校验值前面的那个* #include <REG51.h> //包含…...

WPF----进度条ProgressBar(渐变色)

ProgressBar 是一种用于指示进程或任务的进度的控件&#xff0c;通常在图形用户界面&#xff08;GUI&#xff09;中使用。它提供了一种视觉反馈&#xff0c;显示任务的完成程度&#xff0c;帮助用户了解任务的进展情况。 基本特性 Minimum 和 Maximum 属性&#xff1a; 这些属…...

Apipost接口测试工具的原理及应用详解(四)

本系列文章简介&#xff1a; 随着软件行业的快速发展&#xff0c;API&#xff08;应用程序编程接口&#xff09;作为不同软件组件之间通信的桥梁&#xff0c;其重要性日益凸显。API的质量直接关系到软件系统的稳定性、性能和用户体验。因此&#xff0c;对API进行严格的测试成为…...

【图论】200. 岛屿问题

200. 岛屿问题 难度&#xff1a;中等 力扣地址&#xff1a;https://leetcode.cn/studyplan/top-100-liked/ 问题描述 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&…...

AI学习指南机器学习篇-随机森林的优缺点

AI学习指南机器学习篇-随机森林的优缺点 引言 机器学习是人工智能领域的重要分支&#xff0c;其中随机森林(Random Forest)算法以其高性能和广泛应用而备受瞩目。然而&#xff0c;就像任何其他算法一样&#xff0c;随机森林也有其优缺点。本文将深入探讨随机森林算法的优势和…...

基于boost::beast的http服务器(上)

文章目录 1.beast网落库介绍2.相关类及api3.异步读写的处理3.1异步写案例3.2异步读案例 1.beast网落库介绍 Beast网络库是一个基于Boost库的C网络库&#xff0c;特别用于开发高性能的网络应用程序。它提供了一组易于使用的API&#xff0c;主要用于处理HTTP和WebSocket协议&…...

深度学习之近端策略优化(Proximal Policy Optimization,PPO)

PPO(Proximal Policy Optimization,近端策略优化)是深度强化学习中的一种算法,属于策略梯度方法中的一种。PPO通过优化策略来最大化累积奖励,具有稳定性好、易于调参等优点,是目前广泛应用的一种深度强化学习算法。下面介绍PPO的基本原理和流程。 PPO基本原理 PPO算法的…...

用pycharm进行python爬虫的步骤

使用 pycharm 进行 python 爬虫的步骤&#xff1a;下载并安装 pycharm。创建一个新项目。安装 requests 和 beautifulsoup 库。编写爬虫脚本&#xff0c;包括获取页面内容、解析 html 和提取数据的代码。运行爬虫脚本。保存和处理提取到的数据。 用 PyCharm 进行 Python 爬虫的…...

重写功能 rewrite

Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求&#xff0c;此功能依靠 PCRE(perl compatible regular expression)&#xff0c;因此编译之前要安装PCRE库&#xff0c;rewrite是nginx服务器的重要功能之 一&#xff0c;用于实现URL的重写&#xff0c;URL的…...

ISO19110操作要求类中/req/operation/operation-attributes的详细解释

/req/operation/operation-attributes 要求: 只有要素属性&#xff08;feature attributes&#xff09;可以通过‘observesValueOf’、‘triggeredByValuesOf’或‘affectsValuesOf’关联角色与要素操作&#xff08;feature operations&#xff09;关联。 具体解释 定义 要…...

访客(UV)、点击量(PV)、IP、访问量(VV)概念

1、https://www.cnblogs.com/QingPingZm/articles/13855808.htmlhttps://www.cnblogs.com/QingPingZm/articles/13855808.html...

C++系统编程篇——Linux第一个小程序--进度条

&#xff08;1&#xff09;先引入一个概念&#xff1a;行缓冲区 \r和\n \r表示回车 \n表示回车并换行 ①代码一 #include<stdio.h> #include<unistd.h> int main()…...

一个中文和越南语双语版本的助贷平台开源源码

一个中文和越南语双语版本的助贷平台开源源码。后台试nodejs。 后台 代理 前端均为vue源码&#xff0c;前端有中文和越南语。 前端ui黄色大气&#xff0c;逻辑操作简单&#xff0c;注册可对接国际短信&#xff0c;可不对接。 用户注册进去填写资料&#xff0c;后台审批&…...

【游戏引擎之路】登神长阶(五)

5月20日-6月4日&#xff1a;攻克2D物理引擎。 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 6月13日-6月20日&#xff1a;攻克《3D图形教程》。 6月21日-6月22日&#xff1a;攻克《Raycasting游戏教程》。 6月23日-6月30日&#xff1a;攻克《Windows游戏编程大师技巧》。 …...

FireAct:使用智能体(agent)微调大语言模型

1.概述 近年来,针对语言模型(LMs)的研究致力于探索其与外部工具或环境互动的能力,以推进新型语言代理的发展。此类代理具备从环境反馈中汲取新知识、通过语言推理进行连续决策,以及借助自我反思提升任务解决能力的能力。工业界的进展,如ChatGPT插件,凸显了语言代理在实际…...

20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览

20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览 2024/6/26 15:15 4.2.1 全编译测试 在源码路径内&#xff0c;提供了编译脚本 build.sh&#xff0c;运行该脚本对整个源码进行编译&#xff0c;需要在终端切换到解压 出来的源码路径&#xff0c;找到 build.sh 文件…...

python数据分析——数据分类汇总与统计

数据分类汇总与统计 前言一、Groupby分类统计语法按列分组示例一示例二示例三 遍历各分组示例 使用字典和Series分组示例 使用函数分组示例 二、数据聚合groupby的聚合函数示例一示例二 逐列及多函数应用示例一示例二 返回不含行索引的聚合数据示例 三、一般性的“拆分-应用-合…...

iOS17系统适配

iOS17 新功能 文章目录 iOS17 新功能iOS17支持哪几款机型Xcode15新特性iOS17-开发适配指南 横屏待机 在iOS 17中&#xff0c;还带来了横屏待机功能&#xff0c;苹果将这个新功能命名为“Standby”模式&#xff0c;为 iPhone 带来了全新的玩法。iPhone启用之后&#xff0c;默认情…...

树洞陪聊陪玩交友程序系统源码,解锁交友新体验

在繁忙的都市生活中&#xff0c;你是否渴望找到一片属于自己的秘密花园&#xff0c;倾诉心声、分享快乐&#xff1f;今天&#xff0c;就让我带你走进这片名为“树洞”的神秘之地&#xff0c;感受陪聊陪玩交友的全新魅力&#xff01; &#x1f333;树洞陪聊陪玩交友程序系统 你…...

区间动态规划——最长回文子序列长度(C++)

把夜熬成粥&#xff0c;然后喝了它。 ——2024年7月1日 书接上回&#xff1a;区间动态规划——最长回文子串&#xff08;C&#xff09;-CSDN博客&#xff0c;大家有想到解决办法吗&#xff1f; 题目描述 给定一个字符串s&#xff08;s仅由数字和英文大小写字母组成&#xff0…...

无人机远程控制:北斗短报文技术详解

无人机&#xff08;UAV&#xff09;技术的快速发展和应用&#xff0c;使得远程控制成为了一项关键技术。无人机远程控制涉及无线通信、数据处理等多个方面&#xff0c;其中北斗短报文技术以其独特的优势&#xff0c;在无人机远程控制领域发挥着重要作用。本文将详细解析无人机远…...

240627_关于CNN中图像维度变化问题

240627_关于CNN中图像维度变化问题 在学习一些经典模型时&#xff0c;其中得维度变化关系总搞不太明白&#xff0c;集中学习了以下&#xff0c;在此作以梳理总结&#xff1a; 一般来说涉及到的维度变换都是四个维度&#xff0c;当batch size4&#xff0c;图像尺寸为640*640&a…...

食品行业怎么用JSON群发短信

食品作为日常生活不可缺少的元素&#xff0c;市场需求是很稳定的&#xff0c;但是份额就那么多&#xff0c;商家都要来抢占的话&#xff0c;就需要运营推广各凭本事&#xff0c;市场运营中选择合适的推广方式&#xff0c;可以增加店铺销售额&#xff0c;很多实体店或商城都会建…...

MySQL高级-MVCC-隐藏字段

文章目录 1、介绍2、测试2.1、进入服务器中的 /var/lib/mysql/atguigu/2.2、查看有主键的表 stu2.3、查看没有主键的表 employee2.3.1、创建表 employee2.3.2、查看表结构及其其中的字段信息 1、介绍 ---------------- | id | age | name | ---------------- | 1 | 1 | Js…...

探索PcapPlusPlus开源库:网络数据包处理与性能优化

文章目录 0. 本文概要1. PcapPlusPlus介绍1.1 概述1.2主要特性和功能1.3 PcapPlusPlus 主要模块关系和依赖1.4 网络协议层处理过程 2. 实例2.1 基于 PcapPlusPlus 的应用程序设计和封装流程&#xff1a;2.2 多线程示例代码2.3 代码说明&#xff1a; 3. 程序性能进一步优化3.1 避…...

深入理解SSH:网络安全的守护者

在当今数字化时代&#xff0c;网络安全已成为全球关注的焦点。随着网络攻击手段的不断升级&#xff0c;保护数据传输的安全性变得尤为重要。SSH&#xff08;Secure Shell&#xff09;作为一种安全的网络协议&#xff0c;为远程登录和网络服务提供了强大的安全保障&#xff0c;成…...

DDD学习笔记四

领域模型的构建 基础领域模型的基本组成有名称、属性、关联、职责、事件和异常 发掘领域概念3种策略&#xff1a; 1&#xff09;学习已有系统&#xff0c;重用已有模型 2&#xff09;使用分类标签。分类标签来源于领域&#xff0c;需要我们研究一些资料并做一些提炼。从采用5W…...

Head First设计模式中的典型设计模式解析与案例分析

Head First设计模式中的典型设计模式解析与案例分析 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 《Head First设计模式》是一本广受欢迎的书籍&#xff0c…...

iptables 防火墙(一)

iptables 防火墙&#xff08;一&#xff09; 一、Linux 防火墙基础防火墙分类 二、iptables 的表、链结构规则表规则链数据包过滤的匹配流程 三、编写防火墙规则iptables 的安装iptables的基本语法规则的匹配条件通用匹配隐含匹配显式匹配 四、总结 在网络安全的世界里&#xf…...

数据库物理结构设计-定义数据库模式结构(概念模式、用户外模式、内模式)、定义数据库、物理结构设计策略

一、引言 如何基于具体的DBMS产品&#xff0c;为数据库逻辑结构设计的结果&#xff0c;即关系数据库模式&#xff0c;制定适合应用要求的物理结构 1、在设计数据库物理结构前&#xff0c;数据库设计人员首先 要充分了解所用的DBMS产品的功能、性能和特点&#xff0c;包括提供…...

QT加载安装外围依赖库的翻译文件后翻译失败的现象分析:依赖库以饿汉式的形式暴露单例接口导致该现象的产生

1、前提说明 VS2019 QtClassLibaryDll是动态库,QtWidgetsApplication4是应用程序。 首先明确:动态库以饿汉式的形式进行单例接口暴露; 然后,应用程序加载动态库的翻译文件并进行全局安装; // ...QTranslator* trans = new QTranslator();//qDebug() << trans->…...

13_旷视轻量化网络--ShuffleNet V2

回顾一下ShuffleNetV1:08_旷视轻量化网络--ShuffleNet V1-CSDN博客 1.1 简介 ShuffleNet V2是在2018年由旷视科技的研究团队提出的一种深度学习模型&#xff0c;主要用于图像分类和目标检测等计算机视觉任务。它是ShuffleNet V1的后续版本&#xff0c;重点在于提供更高效的模…...

Linux系统编程--进程间通信

目录 1. 介绍 1.1 进程间通信的目的 1.2 进程间通信的分类 2. 管道 2.1 什么是管道 2.2 匿名管道 2.2.1 接口 2.2.2 步骤--以父子进程通信为例 2.2.3 站在文件描述符角度-深度理解 2.2.4 管道代码 2.2.5 读写特征 2.2.6 管道特征 2.3 命名管道 2.3.1 接口 2.3.2…...

docker-本地部署-后端

前置条件 后端文件 这边是一个简单项目的后端文件目录 docker服务 镜像文件打包 #命令行 docker build -t author/chatgpt-ai-app:1.0 -f ./Dockerfile .红框是docker所在文件夹 author&#xff1a;docker用户名chatgpt-ai-app&#xff1a;打包的镜像文件名字:1.0 &#…...

TLS + OpenSSL + Engine + PKCS#11 + softhsm2 安全通信

引擎库路径只有在 /lib 下才能被 "LOAD" 识别到&#xff0c;OpenSSL的ReadMe给的示例在/lib&#xff0c;大概是在构建OpenSSL时默认的configure指定了lib路径 // #define PKCS11_ENGINE_PATH "/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so" #define …...

Unity实现简单的MVC架构

文章目录 前言MVC基本概念示例流程图效果预览后话 前言 在Unity中&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;框架是一种架构模式&#xff0c;用于分离游戏的逻辑、数据和用户界面。MVC模式可以帮助开发者更好地管理代码结构&#xff0c;提高代码的可维护性…...

【简单讲解下OneFlow深度学习框架】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

FastGPT 调用Qwen 测试Hello world

Ubuntu 安装Qwen/FastGPT_fastgpt message: core.chat.chat api is error or u-CSDN博客 参考上面文档 安装FastGPT后 登录&#xff0c; 点击右上角的 新建 点击 这里&#xff0c;配置AI使用本地 ollama跑的qwen模型 问题&#xff1a;树上有3只鸟&#xff0c;开了一枪&#…...

数据结构 —— 最小生成树

数据结构 —— 最小生成树 什么是最小生成树Kruskal算法Prim算法 今天我们来看一下最小生成树&#xff1a; 我们之前学习的遍历算法并没有考虑权值&#xff0c;仅仅就是遍历结点&#xff1a; 今天的最小生成树要满足几个条件&#xff1a; 考虑权值所有结点联通权值之和最小无环…...

Linux高并发服务器开发(八)Socket和TCP

文章目录 1 IPV4套接字结构体2 TCP客户端函数 3 TCP服务器流程函数代码粘包 4 三次握手5 四次挥手6 滑动窗口 1 IPV4套接字结构体 2 TCP客户端 特点&#xff1a;出错重传 每次发送数据对方都会回ACK&#xff0c;可靠 tcp是打电话的模型&#xff0c;建立连接 使用连接 关闭连接…...

JMH320【亲测】【御剑九歌】唯美仙侠手游御剑九歌+WIN学习手工端+视频教程+开服清档+运营后台+授权GM物品充值后台

资源介绍&#xff1a; 这也是仙梦奇缘的一个游戏 注意&#xff1a;外网14位IP或域名 ———————————————————————————————————– ps后台介绍: 1区运营后台&#xff1a;http://ip:9981/admin/admintool/ 2区运营后台&#xff1a;http://ip…...

Qt项目:基于Qt实现的网络聊天室---Http服务器

文章目录 Beast网络库基本介绍和muduo库对比muduo库中的概念Boost.Beast中的概念对比 搭建Http服务器单例类封装http管理类注册消息处理绑定和监听连接注册Post请求 本篇总结的是项目中的这个Http服务器&#xff0c;这个服务器用于进行一些基本的登陆注册的功能&#xff0c;底层…...

BugKu-WEB-sodirty

目录 前言 正文 信息收集 代码审计 验证 结尾 前言 七月始,暑假副本也正式开启 正文 信息收集 看着貌似没啥意义 看样子是有备份文件 下载下来 快速审计一下 代码审计 来吧 app.js没啥东西,主要是功能是实现error 我们找一找有没有index.js 找到了 \www\routes\in…...

【linux高级IO(一)】理解五种IO模型

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux高级IO 1. 前言2. 重谈对…...

【SPSS】基于因子分析法对水果茶调查问卷进行分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

ubuntu strace命令

strace 是 Linux 系统中的一个调试工具&#xff0c;用于跟踪并记录系统调用&#xff08;system calls&#xff09;和信号&#xff08;signals&#xff09;。在 Ubuntu 中&#xff0c;strace 命令可以帮助开发者和系统管理员了解一个程序在运行时如何与操作系统内核进行交互&…...

MySQL简单测试和安装

MySQL 的特点 1、MySQL 性能卓越、服务稳定&#xff0c;很少出现异常宕机。 2、MySQL开放源代码且无版权制约&#xff0c;自主性及使用成本低。 3、MySQL历史悠久(版本众多)&#xff0c;用户使用活跃&#xff0c;遇到问题可以寻求帮助。 4、MySQL体积小(相对大型关系型数据库)…...

鲜花门店小程序开发流程:详细教程,让你轻松掌握

想要开发一款专属于自己鲜花门店的小程序吗&#xff1f;不知道从何开始&#xff1f;别担心&#xff0c;本文将为你提供详细的开发流程&#xff0c;帮助你轻松掌握。 1. 注册登录乔拓云网并进入操作后台 首先&#xff0c;你需要注册并登录乔拓云网&#xff0c;然后进入操作后台…...

机会就在眼前!2025-CISP深圳国际体育展的招展工作火热持续中...

2025-CISP中国&#xff08;深圳&#xff09;国际体育展的招展工作火热持续中&#xff0c;凭借越来越深远的影响力以及前两届的成功举办经验&#xff0c;展位多半已被“抢购”。但小编的同事们同时又反映出一个问题&#xff1a;有一批老展商和新展商已有明确的参展意向&#xff…...

第三方软件检测机构要具备哪些资质要求?专业测试报告如何申请?

第三方软件检测机构是独立于软件开发商和用户之外的公正机构&#xff0c;负责对软件进行全面的检测和评估。其独立性保证了评测结果的客观性和公正性&#xff0c;有效避免了软件开发商对自身产品的主观偏见和误导。 要成为一家合格的第三方软件检测机构&#xff0c;需要具备一…...