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

Hive常见面试题

Hive的基本概念

什么是Hive?它的主要作用是什么?

Hive是一个基于Hadoop生态系统的数据仓库和数据处理工具。
它提供了类似于SQL的查询语言(HiveQL),使用户能够使用SQL语句来查询和分析
大规模存储在Hadoop集群上的数据。Hive的主要作用是将大数据的处理变得更加易于理	 解和使用,尤其适合那些熟悉SQL查询语言的非技术用户。
Hive允许用户定义表、执行查询、进行数据转换和加载,以及执行ETL(抽取、转换、加载)操作,从而使大数据分析更加简单。

Hive的数据存储是如何组织的?

Hive将数据存储在Hadoop分布式文件系统(HDFS)中。
数据以文件的形式存储在HDFS的分布式存储节点上。
在Hive中,数据存储以表的形式组织,表可以包含多个分区,每个分区都对应一个HDFS子目录,用于存储与分区相关的数据。每个表可以有多个列,每个列都有一个数据类型。

什么是Hive表的分区?如何创建和管理分区?

Hive表的分区是将表的数据根据特定的列值进行逻辑分隔的一种机制。通过将表数据按照分区键的值进行分组,可以提高查询性能、管理数据以及执行更有效的数据加载。分区键通常是表的一个或多个列。

创建和管理分区可以通过以下步骤完成:

创建分区表: 在创建表时,使用 PARTITIONED BY 子句指定分区列,例如:

sql
Copy code
CREATE TABLE sales (product STRING,amount DOUBLE
)
PARTITIONED BY (year INT, month INT);

加载数据: 将数据按照分区键的值分别加载到相应的子目录中。

添加分区: 可以使用 ALTER TABLE 语句添加分区,例如:

ALTER TABLE sales ADD PARTITION (year=2023, month=8);

查询分区数据: 在查询时,可以使用分区列的值来过滤数据,从而提高查询性能。

管理分区: 可以使用 SHOW PARTITIONS 命令查看表的所有分区,使用 DROP PARTITION 命令删除分区。

HiveQL语法:

HiveQL和传统SQL有什么相似之处和不同之处?

HiveQL(Hive Query Language)是Hive使用的查询语言,类似于传统的SQL(Structured Query Language)。虽然它们有一些相似之处,但也有一些不同之处,主要是因为Hive针对大数据处理的特点进行了一些扩展和适应。

相似之处:

  1. 语法相似: HiveQL的语法与传统的SQL非常相似,包括SELECT、FROM、WHERE、GROUP BY、JOIN等常见的SQL关键字和子句。

  2. 查询数据: HiveQL可以用于查询和分析数据,类似于传统SQL用于关系型数据库的查询操作。

  3. 数据定义: 类似于传统SQL,HiveQL也支持创建表、定义列、指定数据类型等数据定义操作。

  4. 数据操作: HiveQL支持数据插入、更新和删除等数据操作,类似于传统SQL的数据操作。

不同之处:

  1. 数据模型: Hive是基于Hadoop生态系统的大数据处理工具,因此它的数据模型更适合于分布式存储和处理。Hive中的表可以是非规范化的,并且支持类似于分区、桶、嵌套类型等特性。

  2. 执行引擎: Hive最初使用的是MapReduce作为执行引擎,后来引入了其他高性能的执行引擎,如Apache Tez和Apache Spark。这使得Hive能够更高效地处理大规模数据。

  3. 数据格式: Hive支持多种数据格式,包括文本、Parquet、ORC等,而传统SQL主要处理关系型数据库中的表。

  4. 数据类型: 由于Hive适用于非关系型数据存储,因此它引入了更多的数据类型,如数组、Map、Struct等,以支持更复杂的数据结构。

  5. 查询优化: Hive针对大规模数据的查询优化和执行方式可能与传统SQL有所不同,因为在分布式环境中的优化策略和技术有所不同。

总的来说,HiveQL在语法和操作上与传统SQL有很多相似之处,使得熟悉SQL的用户能够更容易地使用Hive进行大数据处理。然而,由于Hive的特点和应用场景,它在数据模型、执行引擎和数据处理方式等方面有一些与传统SQL不同的特点。

如何在Hive中创建表?可以使用哪些存储格式?

在Hive中创建表可以使用 CREATE TABLE 语句,同时可以指定表的结构、列、分区等信息。此外,你还可以选择不同的存储格式来存储表中的数据。以下是在Hive中创建表的基本步骤以及常见的存储格式示例:

创建表的基本语法:

CREATE TABLE table_name (column1 data_type,column2 data_type,...
)
[PARTITIONED BY (partition_column data_type, ...)]
[ROW FORMAT ...]
[STORED AS ...]
[TBLPROPERTIES (...)];

示例1:使用文本格式创建表

CREATE TABLE employee (emp_id INT,emp_name STRING,emp_salary DOUBLE
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

示例2:使用Parquet格式创建表

CREATE TABLE sales (product_id INT,sale_date STRING,amount DOUBLE
)
STORED AS PARQUET;

示例3:创建分区表

CREATE TABLE sales_partitioned (product_id INT,sale_date STRING,amount DOUBLE
)
PARTITIONED BY (year INT, month INT)
STORED AS PARQUET;

常见的存储格式有:

  • TEXTFILE: 使用文本格式存储数据,每行一个记录,字段间使用分隔符分隔。
  • SEQUENCEFILE: 使用二进制格式存储数据,适合大规模数据的存储和处理。
  • RCFILE: 列式存储格式,提供更高的压缩率和查询性能。
  • PARQUET: 列式存储格式,支持高效的压缩和快速的分析查询。
  • ORC: 列式存储格式,优化了查询性能和压缩效率。

存储格式的选择会影响数据的存储和查询性能,不同格式适用于不同的场景。例如,Parquet和ORC通常用于数据仓库和分析查询,而TEXTFILE适用于简单的文本数据。选择存储格式时需要考虑数据的性质、查询需求和存储成本等因素。

数据导入和导出:

如何将数据从本地文件系统导入到Hive表中?

要将数据从本地文件系统导入到Hive表中,你可以使用Hive的 LOAD DATA 命令或 INSERT INTO 语句。以下是两种方法的详细说明:

方法一:使用 LOAD DATA 命令:

LOAD DATA 命令用于将数据从本地文件系统导入到Hive表中。它可以从本地文件或HDFS路径加载数据,并将数据加载到指定的Hive表中。以下是示例:

LOAD DATA LOCAL INPATH '/path/to/local/data/file' INTO TABLE target_table;
  • /path/to/local/data/file 是本地文件系统中的数据文件路径。
  • target_table 是目标Hive表的名称。

方法二:使用 INSERT INTO 语句:

另一种方法是使用 INSERT INTO 语句来插入数据。在这种情况下,你需要先将数据加载到一个临时表中,然后再将数据插入到目标表中。以下是示例:

  1. 创建临时表并加载数据:
CREATE TABLE temp_table (column1 data_type,column2 data_type,...
);LOAD DATA LOCAL INPATH '/path/to/local/data/file' INTO TABLE temp_table;
  1. 将数据从临时表插入到目标表:
INSERT INTO target_table SELECT * FROM temp_table;

注意:

  • 在使用 LOAD DATA 命令时,如果数据文件在HDFS中而不是本地文件系统中,可以省略 LOCAL 关键字。
  • 在使用 LOAD DATA 命令时,确保Hive服务器和数据文件所在的机器之间有正确的权限和网络连接。
  • 在使用 INSERT INTO 语句时,确保目标表的列和临时表的列一致。
  • 在生产环境中,通常会使用更复杂的数据导入方法,如使用分隔符、字段映射等。

除了使用 LOAD DATA 命令和 INSERT INTO 语句,还有其他一些方法可以将数据从本地文件系统导入到Hive表中,具体取决于你的需求和场景。以下是一些其他可能的方法:

  1. 外部表: 创建外部表并指定数据的位置,不会将数据移动到Hive仓库,而是在数据所在的位置进行查询。可以通过将数据文件拷贝到指定位置,或者直接在Hive表的外部位置加载数据。

  2. Hive Streaming: 使用Hive Streaming API,你可以编写自定义应用程序将数据流式传输到Hive表中,这对于实时数据加载很有用。

  3. HDFS命令: 使用HDFS命令,如 hdfs dfs -copyFromLocalhdfs dfs -put,将本地文件复制到HDFS中,然后使用Hive表的 LOAD DATAINSERT INTO 进行加载。

  4. ETL工具: 使用ETL(抽取、转换、加载)工具,如Apache NiFi、Talend等,可以轻松地将数据从不同来源导入到Hive表中,进行数据清洗和转换。

  5. Sqoop: Sqoop是一个用于在Hadoop和关系型数据库之间传输数据的工具,可以用来将关系型数据库中的数据导入到Hive表中。

  6. 自定义脚本: 你还可以编写自定义脚本来处理数据导入过程,使用编程语言(如Python、Java等)来读取本地文件,并将数据插入到Hive表中。

在选择数据导入方法时,考虑数据的大小、频率、数据转换需求和系统架构等因素。不同的方法适用于不同的情况,选择最适合你场景的方法可以提高数据导入的效率和质量。

如何将Hive查询的结果导出到本地文件系统?

性能调优:

什么是数据倾斜?如何处理数据倾斜问题?

数据倾斜是指在分布式计算环境中,数据在不同任务(如Map、Reduce等)之间分布不均匀,导致某些任务的执行速度远远慢于其他任务的现象。这可能会导致整个作业的执行时间增加,影响系统的性能和效率。

数据倾斜问题通常在以下情况下出现:

  1. 键分布不均匀: 数据按照某些键进行分组时,某些键的数据量远大于其他键,导致部分任务处理的数据远多于其他任务。

  2. 连接操作: 在连接操作中,如果某个键的数据在一个表中很多,而在另一个表中很少,可能会导致连接操作的数据分布不均匀。

  3. 聚合操作: 在聚合操作中,如果某个键的数据量远大于其他键,可能会导致聚合操作的负担不均匀。

处理数据倾斜问题是分布式计算环境中的一个重要挑战。以下是一些常见的处理数据倾斜问题的方法:

  1. 随机前缀: 对于键分布不均匀的情况,可以在键前面添加随机前缀,从而将数据均匀分布在不同的任务中。

  2. 增加分区: 对于分区表,可以增加分区的数量,从而将数据均匀分布在更多的分区中。

  3. 改变连接键: 在连接操作中,可以考虑更换连接键,选择在数据分布更均匀的键进行连接。

  4. Combiner函数: 在MapReduce中,可以使用Combiner函数来在Map端进行部分聚合,从而减少Reduce阶段的数据量。

  5. 数据重分布: 可以通过数据重分布的方式,将数据重新分布到不同的任务中,从而平衡数据负载。

  6. 使用自定义Partitioner: 对于一些特殊情况,可以使用自定义的Partitioner来控制数据分布。

  7. 多阶段聚合: 对于聚合操作,可以采用多阶段的方式进行聚合,减少单个任务的负担。

  8. 动态调整任务数量: 在一些计算框架中,可以动态调整任务数量,从而更好地适应

如何优化Hive查询的性能?可以使用哪些技术和策略?

优化Hive查询的性能是一个重要的任务,特别是在大规模数据处理环境中。以下是一些优化Hive查询性能的常见技术和策略:

  1. 分区和桶: 使用分区和桶可以提高查询性能。分区可以减少查询的数据量,而桶可以提高数据的存储和访问效率。

  2. 合理设计表结构: 设计合适的表结构,选择合适的数据类型、列名和分区键,以适应查询需求和数据特点。

  3. 压缩数据: 使用合适的压缩格式(如Parquet、ORC)可以减少存储空间,提高查询性能。

  4. 使用分析函数: Hive支持分析函数(如窗口函数),它们可以在不引入额外的MapReduce任务的情况下执行一些复杂的数据分析操作。

  5. 避免笛卡尔积: 尽量避免多表之间的笛卡尔积操作,这会导致性能下降。

  6. 使用Map-Side Join: 如果一个表很小,可以将其加载到内存中,然后进行Map-Side Join,减少Shuffle操作。

  7. 分析执行计划: 使用 EXPLAIN 命令来分析查询的执行计划,查看数据的流动和操作顺序,以找到性能瓶颈。

  8. 使用合适的执行引擎: 切换到合适的执行引擎,如Apache Tez或Apache Spark,可以提高查询性能。

  9. 数据倾斜处理: 处理数据倾斜问题,采用前缀随机化、数据重分布等方法来平衡数据负载。

  10. 优化连接操作: 使用SMB Join(Sort-Merge Join)或使用Map-Side Join,优化连接操作的性能。

  11. 缓存数据: 如果某些数据经常被查询,可以使用Hive的查询结果缓存机制,减少计算开销。

  12. 动态分区: 在某些情况下,使用动态分区来避免静态分区带来的开销。

  13. 适当调整并行度: 调整查询的并行度,根据集群资源和查询特点进行调整,以充分利用资源。

  14. 使用索引: 尽量避免使用Hive中的索引,因为Hive的索引性能不如传统数据库。

  15. 数据预聚合: 对于一些聚合查询,可以在ETL阶段进行预聚合,减少查询时的计算量。

优化Hive查询性能是一个综合性的任务,需要根据具体情况和查询特点进行适当的调整和优化。常常需要通过实验和性能测试来确定最佳的优化策略。

UDF和UDAF:

什么是Hive的用户定义函数(UDF)和用户定义聚合函数(UDAF)?如何创建和使用它们?

分区和桶:

什么是Hive表的分区和桶?有什么作用?

分区:

Hive表的分区是将表的数据按照某个或多个列的值进行逻辑上的分隔,将数据存储在不同的子目录中。每个分区对应一个子目录,其中存储了该分区的数据。分区能够有效地减少查询的数据量,提高查询性能,并且在某些情况下可以进行更细粒度的数据管理。

例如,如果有一个销售表,你可以根据年份和月份进行分区,将每个月的销售数据存储在不同的子目录中,这样在查询特定月份的销售数据时,只需要读取相应分区的数据,减少了不必要的数据扫描。

桶:

Hive表的桶是一种数据组织方式,它将表的数据按照某个列的哈希值分成固定数量的桶,并将每个桶存储在一个文件中。桶可以提高查询性能,特别是在连接操作和聚合操作中。

桶的主要优点在于:

  • 相同桶号的数据在不同表之间可以更有效地进行连接操作,减少数据的移动。
  • 桶的数量固定,因此Hive可以更准确地进行优化,如预估连接操作的数据大小。

分区和桶的作用:

  1. 查询性能优化: 分区和桶可以大幅度提高查询性能,减少不必要的数据扫描,使查询更加高效。

  2. 数据管理: 分区可以更方便地管理数据,例如对历史数据进行保留、归档等操作。

  3. 连接操作优化: 桶可以优化连接操作,减少数据移动,提高连接性能。

  4. 预估优化: Hive可以基于分区和桶的元数据信息更准确地预估查询执行计划。

需要注意的是,分区和桶的选择需要根据具体的数据特点、查询需求和系统资源进行权衡。正确使用分区和桶可以显著提高Hive表的查询性能和管理效率。

如何在创建表时定义分区和桶?

在创建表时,你可以使用 PARTITIONED BYCLUSTERED BY 语句来定义分区和桶。以下是如何在创建表时定义分区和桶的示例:

定义分区:

使用 PARTITIONED BY 关键字来定义表的分区列。每个分区列将会创建一个子目录,数据会按照分区列的值存储在不同的子目录中。例如:

CREATE TABLE sales (product_id INT,sale_date STRING,amount DOUBLE
)
PARTITIONED BY (year INT, month INT);

在上述示例中,sales 表根据 yearmonth 列创建了分区。

定义桶:

使用 CLUSTERED BY 关键字来定义表的桶。你需要指定桶的列以及桶的数量。桶的数量固定,Hive会根据指定的列的哈希值将数据分散到不同的桶中。例如:

CREATE TABLE sales_bucketed (product_id INT,sale_date STRING,amount DOUBLE
)
CLUSTERED BY (product_id) INTO 10 BUCKETS;

在上述示例中,sales_bucketed 表根据 product_id 列创建了 10 个桶。

需要注意的是,分区和桶可以同时使用,也可以只使用其中一种。同时使用分区和桶可以进一步提高查询性能,但也会增加表的复杂度。在选择是否使用分区和桶时,需要根据数据的特点和查询需求进行权衡。

数据格式:

Hive支持哪些数据格式?请列举一些常见的数据格式。

Hive支持多种数据格式,不同的数据格式适用于不同的数据存储和查询需求。以下是一些常见的Hive支持的数据格式:

  1. 文本格式(TextFile): 文本格式是最简单的数据格式,每行都是文本数据。虽然不是最高效的格式,但它是通用的,易于查看和处理。

  2. 列式存储格式(Parquet、ORC): Parquet和ORC(Optimized Row Columnar)是列式存储格式,它们将数据按列存储,能够提高读取性能和压缩率,适合分析查询。它们支持谓词下推、列剪裁等优化。

  3. Avro格式: Avro是一种自描述的二进制格式,支持复杂数据类型和架构演化。它适用于数据交换和通信。

  4. SequenceFile格式: SequenceFile是Hadoop的二进制格式,支持快速顺序读写,适用于大规模数据的存储。

  5. JSON格式: JSON格式用于存储半结构化数据,它的可读性和广泛支持使其适用于许多场景。

  6. XML格式: XML格式适用于存储和交换具有层次结构的数据,但它相对于其他格式来说较冗长。

  7. CSV格式: CSV(逗号分隔值)是一种常见的表格数据格式,适用于简单的表格数据。

  8. 其他定制格式: 你还可以使用自定义的分隔符或定界符来定义自己的数据格式,例如使用特定的分隔符或字符。

选择合适的数据格式取决于你的数据存储和查询需求。例如,如果你需要高性能的分析查询,可以考虑使用Parquet或ORC格式。如果你需要支持多种数据类型和架构的演化,可以选择Avro格式。每种格式都有其优势和局限性,应根据数据特点和查询需求进行选择。

不同的数据格式如何影响Hive查询的性能?

不同的数据格式可以显著影响Hive查询的性能,因为数据格式直接影响了数据的存储方式、压缩率、读取方式等。以下是不同数据格式对Hive查询性能的影响:

1. 列式存储格式(Parquet、ORC):

  • 优势: 列式存储格式将数据按照列存储,而不是按行存储。这允许Hive仅读取查询需要的列,从而减少了I/O开销,提高了查询性能。另外,列式存储格式通常具有更好的压缩率,减少了存储空间的占用。
  • 劣势: 在写入数据时,列式存储格式的性能可能稍低于行式存储格式,因为需要进行列的批量写入。

2. 行式存储格式(TextFile、SequenceFile):

  • 优势: 行式存储格式对于一些插入操作和简单查询可能更快,因为每次读取的数据量更小。
  • 劣势: 行式存储格式在扫描所有列时可能存在不必要的I/O开销,对于分析性查询可能性能较差。

3. Avro格式:

  • 优势: Avro格式是一种自描述的二进制格式,它支持复杂数据类型和架构演化。它的自描述性使得在读取数据时不需要预先知道数据的结构,从而具有更好的灵活性。
  • 劣势: 由于自描述性,Avro可能比其他格式稍慢,且在压缩方面可能不如Parquet或ORC。

4. 其他格式(JSON、XML、CSV等):

  • 优势: 这些格式适用于不同的数据交换和通信需求,但在大规模数据分析场景中可能性能不如列式存储格式。

总体而言,列式存储格式(如Parquet和ORC)通常对Hive查询性能有积极的影响,特别是在分析性查询、复杂查询和大规模数据查询场景下。选择适当的数据格式可以根据查询需求来平衡性能、存储和写入效率。

Hive与其他工具的比较:

Hive与Spark SQL有什么区别?

Hive和Spark SQL都是用于在大数据环境中进行数据处理和查询的工具,但它们有一些区别,包括其架构、查询引擎、优势和用途等。以下是Hive和Spark SQL之间的一些主要区别:

1. 数据处理引擎:

  • Hive:Hive使用类SQL的HiveQL语言,将查询翻译成MapReduce任务执行。它在Hadoop生态系统中已有很长时间,并且是基于批处理模型的。
  • Spark SQL:Spark SQL是Apache Spark生态系统中的组件,它允许在Spark中执行SQL查询。Spark SQL支持交互式查询和流处理,能够处理批处理和实时数据。

2. 执行模型:

  • Hive:Hive在底层使用MapReduce来执行查询,这意味着较大的查询可能需要多个MapReduce作业,导致延迟较高。
  • Spark SQL:Spark SQL使用Spark的内存计算引擎,利用分布式内存进行数据处理,因此可以更快地执行查询,并支持迭代式处理和流式处理。

3. 性能:

  • Hive:Hive在执行大型复杂查询时性能可能受到影响,因为它需要进行多个MapReduce任务的串行执行。
  • Spark SQL:Spark SQL借助Spark的内存计算引擎,可以在内存中缓存数据,实现更快速的查询执行,尤其对于迭代式算法和迭代查询性能更佳。

4. 支持的数据源:

  • Hive:主要用于处理Hadoop生态系统中的数据,如HDFS和HBase。
  • Spark SQL:除了Hadoop生态系统中的数据,还可以处理其他数据源,如JSON、Parquet、Avro、ORC等。

5. 查询优化:

  • Hive:Hive的查询优化在一定程度上受限,因为它主要通过转换成MapReduce任务来执行。
  • Spark SQL:Spark SQL通过Catalyst查询优化器进行查询优化,能够更灵活地对查询进行优化和计划。

6. 用途:

  • Hive:主要用于离线批处理分析,适用于处理大规模的历史数据分析任务。
  • Spark SQL:适用于交互式查询、实时数据处理、流式处理等,更适合需要较低延迟和更灵活的查询场景。

总的来说,Hive和Spark SQL各有其优势,选择哪个取决于项目需求和场景。如果已有Hive基础或需要在Hadoop生态系统中进行大规模批处理分析,可以考虑使用Hive。如果需要更快速的交互式查询和支持实时处理,Spark SQL可能更适合。有时候,两者也可以结合使用,根据具体情况灵活选择。

相关文章:

Hive常见面试题

Hive的基本概念 什么是Hive?它的主要作用是什么? Hive是一个基于Hadoop生态系统的数据仓库和数据处理工具。 它提供了类似于SQL的查询语言(HiveQL),使用户能够使用SQL语句来查询和分析 大规模存储在Hadoop集群上的数…...

【单片机】晨启科技,酷黑版,密码锁

密码锁 任务要求: 当输入密码(至少6位密码)时,OLED显示屏显示输入的数字(或者字符),当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较(可使用外设键盘&…...

常见监控网络链路和网络设备的方法

网络监控主要包括网络链路监控和网络设备监控,通常系统运维人员会比较关注。 一、网络链路监控 网络链路监控主要包含三个部分,网络连通性、网络质量、网络流量。 连通性和质量的监控手段非常简单,就是在链路一侧部署探针,去探…...

C#控制台程序+Window增加右键菜单

有时候我们可能会想定制一些自己的右键菜单功能,帮我们减少重复的操作。那么使用控制台程序加自定义右键菜单,就可以很好地满足我们的需求。 1 编写控制台程序 因为我只用到了在文件夹中空白处的右键菜单,所以这里提供了一个对应的模板&…...

【Docker】Docker+Zipkin+Elasticsearch+Kibana部署分布式链路追踪

文章目录 1. 组件介绍2. 服务整合2.1. 前提:安装好Elaticsearch和Kibana2.2. 再整合Zipkin 点击跳转:Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务全套(质量有保证,内容详情) 本文主要讨论在Ela…...

【小沐学C++】C++ 基于CMake构建工程项目(Windows、Linux)

文章目录 1、简介2、下载cmake3、安装cmake4、测试cmake4.1 单个源文件4.2 同一目录下多个源文件4.3 不同目录下多个源文件4.4 标准组织结构4.5 动态库和静态库的编译4.6 对库进行链接4.7 添加编译选项4.8 添加控制选项 5、构建最小项目5.1 新建代码文件5.2 新建CMakeLists.txt…...

计算机视觉与图形学-神经渲染专题-ConsistentNeRF

摘要 Neural Radiance Fields (NeRF) 已通过密集视图图像展示了卓越的 3D 重建能力。然而,在稀疏视图设置下,其性能显着恶化。我们观察到,在这种情况下,学习不同视图之间像素的 3D 一致性对于提高重建质量至关重要。在本文中&…...

初级算法-其他

文章目录 位1的个数题意:解:代码: 汉明距离题意:解:代码: 颠倒二进制位题意:解:代码: 杨辉三角题意:解:代码: 有效的括号题意&#xf…...

Containerd的两种安装方式

1. 轻量级容器管理工具 Containerd 2. Containerd的两种安装方式 3. Containerd容器镜像管理 4. Containerd数据持久化和网络管理 操作系统环境为centos7u6 1. YUM方式安装 1.1 获取YUM源 获取阿里云YUM源 # wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun…...

Android学习之路(1) 文本设置

Android学习之路(1) 文本 一、设置文本内容 设置文本内容的两种方式&#xff1a; 一种是在XML文件中通过属性android:text设置文本代码如下 <TextViewandroid:id"id/tv_hello"android:layout_width"wrap_content"android:layout_height"wrap_c…...

Docker相关命令与入门

1. Docker 命令 # centos 7 systemctl start docker # 启动服务 systemctl stop docker systemctl restart docker # 重启服务 systemctl status docker systemctl enable docker # 开机自启动1.1 镜像相关的命令 # 查看镜像 docker images docker images -q # 查看…...

如何配置一个永久固定的公网TCP地址来SSH远程树莓派?

文章目录 如何配置一个永久固定的公网TCP地址来SSH远程树莓派&#xff1f;前置条件命令行使用举例&#xff1a;修改cpolar配置文件 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 …...

Kubernetes架构和工作流程

目录 一、kubernetes简介 1.k8s的由来 2.为什么用 k8s &#xff1f; 3.k8s主要功能 二、k8s集群架构与组件 1.Master 组件 1.1Kube-apiserver 1.2Kube-controller-manager 1.3Kube-scheduler 2.Node组件 2.1Kubelet 2.2Kube-Proxy 2.3docker 或 rocket 3.配置存储中…...

C语言赋值号的运算顺序

从右到左。 int & f(int & a) { printf("参数 %d\n", a); return a; } int main(void) {int a 9;int b 3;f(a) f(b);// 运行到此处&#xff0c;a 3&#xff0c;b 3return 0; } 输出...

fishing之第四篇使用案例一模拟登陆口

文章目录 一、访问钓鱼平台二、Sending Profiles&#xff08;发件人邮箱配置&#xff09;三、User&Groups&#xff08;接收人邮件列表&#xff09;四、Landing Pags&#xff08;钓鱼页面配置&#xff09;五、Email Templates&#xff08;邮件内容配置&#xff09;六、Campa…...

CS 144 Lab Six -- building an IP router

CS 144 Lab Six -- building an IP router 引言路由器的实现测试 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab Six 对应的PDF: Lab Checkpoint 5: building an IP router 引言 在本实验中&#xff0c;你将在现有的NetworkInterface基础上实现一个IP路由器&#xf…...

edge://settings/defaultbrowser default ie

Microsoft Edge 中的 Internet Explorer 模式 有些网站专为与 Internet Explorer 一起使用&#xff0c;它们具有 Microsoft Edge 等新式浏览器不支持的功能。 如果你需要查看其中的某个网站&#xff0c;可使用 Microsoft Edge 中的 Internet Explorer 模式。 大多数网站在新…...

Centos7安装jdk8教程——rpm安装

1. rpm文件下载 下载链接 Java SE 8 Archive Downloads (JDK 8u211 and later) 2.上传到服务器指定路径下并安装 切换到上传目录&#xff0c;然后执行以下命令 rpm -ivh jdk-8u221-linux-x64.rpm3. 设置环境变量并重载配置 # 设置环境变量 vim /etc/profile# 文件末尾添加…...

Node.js-path模块操作路径的基本使用

path模块提供了操作路径的功能&#xff0c;以下为常用的API。 path.resolve()&#xff1a;拼接规范的绝对路径 const path require("path"); // 目录的绝对路径 // __dirname: D:\node\path const pathStr path.resolve(__dirname, "index.html"); // 拼…...

油猴脚本:验证码识别辅助器

脚本信息 描述&#xff1a;当鼠标放在验证码图片上时&#xff0c;显示弹窗并提供识别选项 实现逻辑 定义了一个isRectangle函数&#xff0c;用于判断图片是否符合验证码的特征。判断条件是&#xff1a;图片的宽高比大于1.5&#xff0c;宽度大于等于80且高度大于等于30&#…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...