解密Apache HAWQ ——功能强大的SQL-on-Hadoop引擎 [作者:常雷]

2023-05-16


作者:常雷 博士,Pivotal中国研发中心研发总监,HAWQ并行Hadoop SQL引擎创始人,Pivotal HAWQ团队负责人,曾任EMC高级研究员。专注于大数据与云计算领域,在国内外顶级数据管理期刊和会议发表数篇论文,并拥有多项美国专利。

分享主要分为以下五个部分:

  1. HAWQ基本介绍;
  2. HAWQ架构以及各重要组件的基本原理;
  3. HAWQ的中短期规划;
  4. 如何贡献到HAWQ和成为Apache Committer;
  5. Q & A。

一、HAWQ基本介绍


HAWQ是一个Hadoop原生大规模并行SQL分析引擎,针对的是分析性应用。和其他关系型数据库类似,接受SQL,返回结果集。但它具有大规模并行处理很多传统数据库以及其他数据库没有的特性及功能。主要如下:

  1. 对标准的完善支持:ANSI SQL标准,OLAP扩展,标准JDBC/ODBC支持,比其他Hadoop SQL引擎都要完善。
  2. 具有MPP(大规模并行处理系统)的性能,比其他Hadoop里面的SQL引擎快数倍。
  3. 具有非常成熟的并行优化器。优化器是并行SQL引擎的重要组成部分,对性能影响很多,尤其是对复杂查询。
  4. 支持ACID事务特性:这是很多现有基于Hadoop的SQL引擎做不到的,对保证数据一致性很重要。
  5. 动态数据流引擎:基于UDP的高速互联网络。
  6. 弹性执行引擎:可以根据查询大小来决定执行查询使用的节点及Segment个数。
  7. 支持多种分区方法及多级分区:比如List分区和Range分区。分区表对性能有很大帮助,比如你只想访问最近一个月的数据,查询只需要扫描最近一个月数据所在分区。
  8. 支持多种压缩方法:snappy,gzip,quicklz,RLE等。
  9. 多种UDF(用户自定义函数)语言支持:java, python, c/c++, perl, R等。
  10. 动态扩容:动态按需扩容,按照存储大小或者计算需求,秒级添加节点。
  11. 多级资源或负载管理:和外部资源管理器YARN集成;可以管理CPU,Memory资源等;支持多级资源队列;方便的DDL管理接口。
  12. 支持访问任何HDFS及其他系统的数据:各种HDFS格式(文本,SequenceFile,Avro,Parquet等等)以及其他外部系统(HBase等),并且用户自己可以开发插件来访问新的数据源。
  13. 原生的机器学习数据挖掘库MADLib支持:易于使用及高性能。
  14. 与Hadoop系统无缝集成:存储、资源、安装部署(Ambari)、数据格式、访问等。
  15. 完善的安全及权限管理:kerberos;数据库,表等各个级别的授权管理。
  16. 支持多种第三方工具:比如Tableau,SAS,较新的Apache Zeppelin等。
  17. 支持对HDFS和YARN的快速访问库:libhdfs3和libyarn(其他项目也可以使用)。
  18. 支持在本地、虚拟化环境或者在云端部署。

下面我来谈一下HAWQ是原生Hadoop SQL引擎中“原生”的意思,“原生”主要体现在如下几个方面:

  1. 数据都存储在HDFS上,不需要使用connector模式。
  2. 高可扩展性:和其他Hadoop组件一样,高可扩展。并且具有高性能。
  3. 原生的代码存取:和其他Hadoop项目一样。HAWQ是Apache项目。用户可以自由的下载,使用和做贡献。区别与其他的伪开源软件。
  4. 透明性:用Apache的方式开发软件。所有功能的开发及讨论都是公开的。用户可以自由参与。
  5. 原生的管理:可以通过Ambari部署、资源可以从YARN分配,与其它Hadoop组件可以运行在同一个集群。

HAWQ提供的主要好处:

  • HAWQ与同类开源和闭源产品比较,如图1:

Apache HAWQ

(图1)

  • HAWQ与同类开源和闭源产品比较,如图2:

Apache HAWQ

(图2)

HAWQ的历史和现状:

  1. 想法和原型系统 (2011):GOH阶段(Greenplum Database On HDFS)。
  2. HAWQ 1.0 Alpha (2012): 多个国外大型客户试用,当时客户性能测试是Hive的数百倍。促进了HAWQ 1.0作为正式产品发布。
  3. HAWQ 1.0 GA (2013年初): 改变了传统MPP数据库架构,包括事务,容错,元数据管等。
  4. HAWQ 1.X版本 (2014-2015 Q2):增加了一些企业级需要的功能,比如Parquet存储,新的优化器,Kerberos,Ambari安装部署。客户覆盖全球。
  5. HAWQ 2.0 Alpha发布并成为Apache孵化器项目:针对云环境的系统架构重新设计,数十个高级功能,包括弹性执行引擎,高级资源管理,YARN集成,秒级扩容等等。现在大家在Apache开源的是最新的2.0 Alpha版本。未来的开发都在Apache进行。

二、Apache HAWQ系统架构


下面我来介绍一下HAWQ的系统架构。图3给出了一个典型的HAWQ集群的主要组件。其中有几个Master节点:包括HAWQ master节点,HDFS master节点NameNode,YARN master节点ResourceManager。现在HAWQ元数据服务在HAWQ master节点里面,将来的版本会成为单独的服务。其他节点为Slave节点。每个Slave节点上部署有HDFS DataNode,YARN NodeManager以及一个HAWQ Segment。HAWQ Segment在执行查询的时候会启动多个QE (Query Executor, 查询执行器)。查询执行器运行在资源容器里面。

Apache HAWQ

(图3)

图4是HAWQ内部架构图:

Apache HAWQ

(图4)

可以看到在HAWQ master节点内部有如下几个重要组件:查询解析器(Parser/Analyzer),优化器,资源管理器,资源代理,HDFS元数据缓存,容错服务,查询派遣器,元数据服务。在Slave节点上安装有一个物理Segment,在查询执行时,针对一个查询,弹性执行引擎会启动多个虚拟Segment同时执行查询,节点间数据交换通过Interconnect(高速互联网络)进行。如果一个查询启动了1000个虚拟Segment,意思是这个查询被均匀的分成了1000份任务,这些任务会并行执行。所以说虚拟Segment数其实表明了查询的并行度。查询的并行度是由弹性执行引擎根据查询大小以及当前资源使用情况动态确定的。下面我逐个来解释这些组件的作用以及它们之间的关系:

  1. 查询解析器:负责解析查询,并检查语法及语义。最终生成查询树传递给优化器。
  2. 优化器:负责接受查询树,生成查询计划。针对一个查询,可能有数亿个可能的等价的查询计划,但执行性能差别很大。优化器的作用是找出优化的查询计划。
  3. 资源管理器:资源管理器通过资源代理向全局资源管理器(比如YARN)动态申请资源。并缓存资源。在不需要的时候返回资源。我们缓存资源的主要原因是减少HAWQ与全局资源管理器之间的交互代价。HAWQ支持毫秒级查询。如果每一个小的查询都去向资源管理器申请资源,这样的话,性能会受到影响。资源管理器同时需要保证查询不使用超过分配给该查询的资源,否则查询之间会相互影响,可能导致系统整体不可用。
  4. HDFS元数据缓存:用于HAWQ确定哪些Segment扫描表的哪些部分。HAWQ是把计算派遣到数据所在的地方。所以我们需要匹配计算和数据的局部性。这些需要HDFS块的位置信息。位置信息存储在HDFS NameNode上。每个查询都访问HDFS NameNode会造成NameNode的瓶颈。所以我们在HAWQ Master节点上建立了HDFS元数据缓存。
  5. 容错服务:负责检测哪些节点可用,哪些节点不可用。不可用的机器会被排除出资源池。
  6. 查询派遣器:优化器优化完查询以后,查询派遣器派遣计划到各个节点上执行,并协调查询执行的整个过程。查询派遣器是整个并行系统的粘合剂。
  7. 元数据服务:负责存储HAWQ的各种元数据,包括数据库和表信息,以及访问权限信息等。另外,元数据服务也是实现分布式事务的关键。
  8. 高速互联网络:负责在节点之间传输数据。软件实现,基于UDP。

查询执行


了解清楚各个组件之后,我们来看一下一个查询的主要流程(请参见图5)。

Apache HAWQ

(图5)

用户通过JDBC/ODBC提交查询之后,查询解析器得到查询树,然后优化器根据查询树生成查询计划,派遣器和资源管理器打交道得到资源,分解查询计划,然后派遣计划到Segment的执行器上面执行。最终结果会传回给用户。

下面我来简单看一下并行查询计划长什么样。图6给出了一个具体的例子。

Apache HAWQ

(图6)

这个查询包含一个连接,一个表达式和一个聚集。图中有两个查询计划。简单来看,并行查询计划和串行查询计划最不同的是多了一些Motion操作符。Motion负责在节点之间交换数据。底层是通过高速互联网络实现的。我们可以看到这里有三种Motion:

  1. Redistribution Motion: 负责按照hash键值重新分布数据
  2. Broadcast Motion: 负责广播数据
  3. Gather Motion: 负责搜集数据到一起。

左边的查询计划表示了如果表lineitem和orders都使用了连接键进行分布的情况。在这个例子中,lineitem按照l_orderkey进行hash分布,orders表按照o_orderkey进行分布。这样的话两个表做连接的时候是不需要进行重新分布的。右边的查询计划表示了一个需要重新分布数据的例子。该查询计划和左边的查询计划相比多了一个Motion节点。

弹性执行引擎


弹性执行引擎有几个关键设计点:存储和计算的完全分离,无状态Segment以及如何使用资源。存储和计算的分离使得我们可以动态的启动任意多个虚拟Segment来执行查询。无状态Segment使得集群更容易扩展。要想保证大规模集群的状态一致性是比较困难的问题,所以我们采用了无状态的Segment。如何使用资源包括如何根据查询的代价申请多少资源,并且如何有效的使用这些资源,比如如何使得数据局部性最优。HAWQ内部针对每一个部分都进行了非常优化的设计。

元数据服务


元数据服务位于HAWQ Master节点。主要向其他组件提供元数据的存储及查询服务。对外的接口为CaQL(元数据查询语言, Catalog Query Language)。CaQL支持的语言是SQL的一个子集,包括单表选择,计数,多行删除,单行插入更新等。把CaQL设计为SQL语言的一个子集的原因是,在未来我们希望把元数据从主节点分离出去,作为一个单独的服务,支持一个简单的子集作为元数据服务来说已经够用了,并且容易扩展。

高速互联网络


高速互联网络的作用是在多个节点之间交换大量数据。HAWQ高速互联网络基于UDP协议。大家可能会问为什么我们不使用TCP。其实我们同时支持TCP和UDP两种协议。TCP协议早于UDP协议。就是因为我们遇到了TCP不能很好解决的问题,我们才开发了基于UDP的协议。图7展示了一个高速互联网络的例子。

Apache HAWQ

(图7)

例子中各个节点上的执行器进程形成了一个数据交换的流水线。假设每个节点上有1000个进程。有1000个节点,这些进程需要相互交互,每个节点上就会有上百万个连接。TCP是没办法高效地支持这么多的连接数的。所以我们开发了基于UDP的互联协议。针对UDP传输,操作系统是不能保证可靠性的,并且不能保证是有序传递的。我们的设计目标需要保持以下特性:

  1. 可靠性:能够保证在丢包的情况下,重传丢失的包
  2. 有序性:保证包传递给接受者的最终有序性
  3. 流量控制:如果不控制发送者的速度,接收者可能会被淹没,甚至会导致整个网络性能急剧下降
  4. 性能和可扩展性:性能和可扩展性是我们需要解决TCP问题的初衷
  5. 可支持多种平台

Apache HAWQ

(图8)

图8展现了我们实现UDP高速互联网络的状态机。并且设计时还需要考虑死锁的消除。详细信息可以参考参考文献。

事务管理


事务是数据管理系统一个非常重要的属性。大部分Hadoop里面的SQL引擎不支持事务。让程序员自己保证事务和数据的一致性,基本上是非常困难的事。

HAWQ支持事务的所有ACID属性,支持Snapshot Isolation。事务发生由Master节点协调和控制。采用的是一种泳道模型。比如并发的插入各个查询使用各自的泳道,互不冲突。在事务提交的时候通过记录文件逻辑长度的方式来保证一致性。如果事务失败的时候,需要回滚,删除文件末尾的垃圾数据。起初HDFS是不支持truncate的,现在HDFS刚支持的truncate功能是根据HAWQ的需求做出的。

资源管理器


HAWQ支持三级资源管理:

  1. 全局资源管理:可以集成YARN,和其他系统共享集群资源。未来会支持Mesos等
  2. HAWQ内部资源管理:可以支持查询,用户等级别的资源管理
  3. 操作符级别资源管理:可以针对操作符分配和强制资源使用

现在HAWQ支持多极资源队列。可以通过DDL方便的定义和修改资源队列定义。下面是HAWQ资源管理器的主要架构图:

Apache HAWQ

(图9)

资源管理器中的各个组件作用如下:

  1. 请求处理器:接收查询派遣器进程的资源请求
  2. 资源分配器:负责资源的分配
  3. 资源池:保存所有资源的现有状态
  4. 策略存储:保存所有的分配策略,将来会做到策略可定制。
  5. 资源代理:负责与全局资源管理器交互

存储模块


HAWQ支持多种内部优化的存储格式,比如AO和Parquet。提供MapReduce InputFormat,可以供外部系统直接访问。其他各种存储格式通过扩展框架访问。针对用户专有格式,用户可以自己开发插件。同时支持各种压缩,多极分区等各种功能。

MADLib


Apache HAWQ

(图10)

如上图所示。MADLib是一个非常完善的并行机器学习和数据挖掘库。支持多种各种机器学习和统计分析方法。HAWQ原生支持MADLib。现在MADLib是一个独立的Apache项目,基本包含了所有常用的机器学习方法。

三、HAWQ中短期规划


HAWQ团队短期内专注于2.0GA。长期来看我们会做以下几个方面的工作:

  1. 跨数据中心的灾难恢复
  2. 分布式索引支持
  3. 快照支持
  4. 与更多其他生态系统进行集成
  5. 对新硬件的支持进一步提高性能:GPU等

四、贡献到Apache HAWQ社区


HAWQ是一个Apache开源项目,希望得到更多社区的人能够参与进来。来自社区的贡献不局限于贡献代码,也可以贡献测试,文档,提Bug JIRA,提供功能需求等等。现在国内对Apache开源社区的贡献还不是很多,希望大家能够一块推动国内开源社区的发展。

对Apache项目做贡献方式的比较简单,在我们的Apache JIRA系统中(https://issues.apache.org/jira/browse/HAWQ)开一个JIRA。然后给出你的解决方法。如果是代码的话,可以使用github提交一个Pull Request。具具体步骤可以参见我们在Apache wiki网站上的流程(https://cwiki.apache.org/confluence/display/HAWQ),在提交代码以后,HAWQ committer会和你一起合作把代码提交。如果你有足够多的贡献的话,并且也想成为Apache Committer,HAWQ PMC会有有一个投票过程表决,保证公平与公正。

所有功能的开发讨论都发布在JIRA和邮件列表中。下面是Apache HAWQ主要网址以及大家可以订阅的邮件列表:

  1. Website: http://hawq.incubator.apache.org/
  2. Wiki: https://cwiki.apache.org/confluence/display/HAWQ
  3. Repo: https://github.com/apache/incubator-hawq.git
  4. JIRA: https://issues.apache.org/jira/browse/HAWQ
  5. Mailing lists: dev@hawq.incubator.apache.org 和 user@hawq.incubator.apache.org 订阅方法: 发送邮件到 dev-subscribe@hawq.incubator.apache.org 和 user-subscribe@hawq.incubator.apache.org

我们在国内有一个“大数据社区”会组织meetup讨论HAWQ以及其他生态系统的最新进展。网址为:http://www.meetup.com/Big-Data-Community-China/“大数据社区”博客:http://blog.csdn.net/bigdatacommunity (具有更多HAWQ及大数据相关技术文章)。我们还有一个微信公众号(bigdatacommunity), 扫描关注更多大数据信息。



参考文献

[1] Lei Chang et al: HAWQ: a massively parallel processing SQL engine in hadoop. SIGMOD Conference 2014: 1223-1234

[2] Lei Chang: Introducing The Newly Redesigned Apache HAWQ 2015

[3] Apache HAWQ team, 大数据社区技术博客,http://blog.csdn.net/bigdatacommunity


五、Q & A


Q1:HAWQ的查询优化是采用了原来的MPP数据库的优化器,还是针对HDFS的读写特性进行改进?

A: 基于MPP并行优化器,但是针对弹性执行引擎,资源管理以及HDFS的特性进行了很多改进。

Q2:HAWQ的事务支持全部的隔离级别还是只支持其中的一部分?具体有哪些?

A: 因为是Snapshot Isolation,除了可串行话,其他都支持。

Q3:HAWQ的数据权限如何控制,影响效率如何?

A: 通过标准SQL Grant语句控制。基本没有效率影响。因为查询通常是时间的大头。

Q4:HAWQ与Hive,以及Impala等同类产品相比,性能表现如何,各自更适合哪种场景?

A: HAWQ和Hive及Impala性能相比,标准化TPCDS性能测试要快数倍。而且Hive和Impala支持SQL标准有限,很多TPCDS查询执行不了。

Q5:hawq是支持分布式事务吗?

A: 是的。因为HAWQ是分布式的,支持分布式事务。

Q6:跟Impala谁强?

A: 我先来找一下TPCDS性能比较图,比Impala快多倍。

Apache HAWQ

(图11)

Q7:HAWQ可以用作OLAP吗?性能有保障吗?分布式事务用什么方法保证一致性?

A: 虽然HAWQ支持分布式事务,可以保证一致性,但不推荐用作oltp。因为我们是针对OLAP进行优化的。事务实现可以参见我们的SIGMOD论文[1] Lei Chang et al: HAWQ: a massively parallel processing SQL engine in hadoop. SIGMOD Conference 2014: 1223-1234

Q8:具体的数据可以说下吗?比如什么规模,具体性能数据。

A: 数据规模应该在30T。大约20个节点。

本文由常雷博士在高可用架构群所做的分享整理而来。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解密Apache HAWQ ——功能强大的SQL-on-Hadoop引擎 [作者:常雷] 的相关文章

  • ubuntu下安装zip unzip

    安装命令 apt get install zip unzip 执行命令常见错误 xff1a 1 unable to locate package 解决办法 xff1a 执行sudo apt get update命令后再执行安装命令就可以了
  • 平衡小车卡尔曼滤波算法

    最近研究STM32的自平衡小车 xff0c 发现有两座必过的大山 xff0c 一为卡尔曼滤波 xff0c 二为PID算法 网上看了很多关于卡尔曼滤波的代码 xff0c 感觉写得真不咋地 一怒之下 xff0c 自己重写 xff0c 不废话 x
  • FreeRTOS学习-前言与FreeRTOS发行版

    1 前言 因为工作的需要 xff0c 学习FreeRTOS已经有一段时间了 接下来一段时间会定期更新本人学习FreeRTOS的系列笔记 系列笔记主要参考了官方的说明手册和FreeRTOS的源代码 其主要思想是先了解FreeRTOS的对外接口
  • FreeRTOS学习-内存管理

    1 动态内存分配与FreeRTOS 从v9 0 0后 xff0c FreeRTOS开始支持内核对象的静态分配方式 xff0c 因此 xff0c 内存管理库可以被裁剪 但在大多数嵌入式应用中 xff0c 堆的使用还是非常常见的 因此 xff0
  • FreeRTOS学习-任务管理(Task管理)(1)

    1 简介 任务管理 xff08 或称进程管理 xff09 是所有操作系统内核的最基本组成模块之一 xff0c FreeRTOS也不例外 想要了解一个操作系统 xff0c 不得不理解其任务管理的设计和实现 任务管理的介绍由两篇文章组成 xff
  • Java基础之Java枚举

    絮叨 昨天刚好有遇到一个枚举的小问题 xff0c 然后发现自己并不是那么熟悉它 xff0c 然后在开发中 xff0c 枚举用的特别多 xff0c 所以有了今天的文章 什么是枚举 Java中的枚举是一种类型 xff0c 顾名思义 xff1a
  • C++ STL 移动一个vector的元素到另一个vector

    1 背景 有的时候 xff0c 我们需要提取某个现有的vector中的元素到另一个vector中 xff0c 或者对多维的vector进行纬度的转换 在这种场景下 xff0c 往往原始的vector中的数据可能并不需要了 xff0c 为了节
  • Qt/C++ 临时屏蔽控件信号(signal)的实用方法

    1 背景 在使用Qt的控件时 xff0c 我们大概率会使用Qt的信号与槽 xff08 signal slot xff09 的机制来实现自己的UI交互逻辑 由于Qt内置控件的信号种类是有限的 xff0c 我们常常会遇到如下窘境 xff1a 以
  • FreeRTOS学习-队列管理

    1 简介 在FreeRTOS中 xff0c 提供了多种任务间通讯的机制 xff0c 包括消息队列 信号量和互斥锁 事件组 任务通知 xff0c 他们的总体特征如下图所示 xff1a 从图中可以看出 xff0c 消息队列 信号量和互斥锁 事件
  • Qt/C++ 如何删除QListWidget的指定项

    1 简介 QListWidget是Qt中 xff0c 用于展示列表类型数据的常用控件 它提供了一个类似于QListView的列表视图 xff0c 但是具有用于添加和删除项的接口 QListWidget使用一个内部模型来管理列表中的每个QLi
  • C++ std::result_of/std::invoke_result的简明指南

    1 简介 在C 43 43 中 xff0c 有时我们需要获取函数或可调用对象的返回值类型 xff0c 以便进行后续的操作 xff0c 在泛型编程中很常用 xff0c 特别是当不同的参数集的结果类型不同时 在早期的C 43 43 版本中 xf
  • FreeRTOS学习-任务通知(Task Notification)

    1 简介 任务通知本质上就是一种进程间通信机制 之前的文章介绍的消息队列 事件组 信号量等都是一种间接的通信方式 xff0c 而任务通知则是更加直接的方式 xff0c 允许两个任务 xff08 或中断和任务 xff09 之间直接通信 2 任
  • 异常行为分析模型设计

    本文针对异常访问现状及问题进行简要描述 xff0c 在此基础上提出基于一元线性回归的最小二乘法异常访问分析模型 xff0c 通过该模型解决了异常访问中时间与访问间相关性问题 异常访问是指网络行为偏离正常范围的访问情况 异常访问包含多种场景
  • 无人机PX4学习(1)

    内容源自 xff1a PX4飞控用户手册 链接 xff1a https docs px4 io master en Basic concepts Drone an unmanned 34 robotic 34 vehicle that ca
  • 无人机PX4学习(2)

    内容源自 xff1a PX4飞控用户手册 链接 xff1a https docs px4 io master en getting started flight controller selection html Flight Contro
  • 无人机PX4学习(3)

    内容源自 xff1a PX4飞控用户手册 链接 xff1a PX4 Flight Modes Overview PX4 User Guide Flight Mode Section RC或GCS上可以切换飞行模式 xff0c 但有些模式有限
  • 两篇论文入坑AIOps异常检测

    AIOps简介 以下部分内容来源于清华大学裴丹教授发表在 中国计算机学会通讯 第13卷第12期的专栏 基于机器学习的智能运维 我们都知道 xff0c 当代社会生活中的大型软硬件系统为了确保能够安全 可靠地运行 xff0c 需要有专业的运维人
  • python代码,两个4*4旋转矩阵之间的位姿变化,相对旋转矩阵

    python代码 xff0c 两个4 4旋转矩阵之间的位姿变化 xff0c 也就是求两个旋转矩阵之间的相对旋转矩阵 import numpy as np def get transform matrix rot mat1 rot mat2
  • crazyS中给firefly飞机添加两个相机

    firefly飞机中原本只有一个相机 xff0c 由于项目需要一个飞机去识别前方两架飞机 xff0c 因此需要增加一个相机 在rotors descriptioin gt urdf gt mav with vi sensor中可以看到此处
  • gitee(码云)和gitHub的区别

    1 gitee与gitHub概念 xff1f Gitee xff08 码云 xff09 是开源中国社区推出的代码托管协作开发平台 xff0c 支持Git和SVN xff0c 提供免费的私有仓库托管 Gitee专为开发者提供稳定 高效 安全的

随机推荐

  • 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    郭孟琦 43 原创作品转载请注明出处 43 Linux内核分析 MOOC课程http mooc study 163 com course USTC 1000029000 首先我选择的系统调用是122号系统调用 uname 简单的介绍一下un
  • 局域网共享文件夹加密(100%成功版本)

    文章目录 一 创建新用户1 右键此电脑选择管理2 点击本地用户和组3 点击用户A 右键空白区域选择创建新用户B 设置用户名和密码C 取消勾选用户下次登录时须更改密码D 勾选用户不能更改密码和密码永不过期 二 创建共享文件夹1 创建一个新文件
  • STM32PWM--基于HAL库(第十三届蓝桥杯嵌入式模拟题)

    文章目录 前言一 CubeMX配置 第十三届模拟题完整版 二 代码相关定义 声明1 函数声明2 宏定义3 变量定义 三 主要函数1 按键扫描2 配置模式3 LCD显示4 频率检测 TIM2输入捕获中断函数 5 PWM输出 TIM3 6 Ma
  • STM32综合-基于HAL库(第十二届蓝桥杯嵌入式省赛)

    文章目录 前言一 CubeMX配置 第十二届省赛完整版 二 代码相关定义 声明1 函数声明2 宏定义3 变量定义 三 主要函数1 按键扫描2 串口接收中断 定时器中断 接收 3 数据解析4 判定数据正误5 数据更新6 结算7 Main函数
  • STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)

    文章目录 前言一 CubeMX配置 RTC相关 1 使能RTC xff1a 2 进制配置 xff1a 3 初始时间配置 xff1a 4 日期配置 5 闹钟配置 二 代码1 获取时间2 设置闹钟3 闹钟中断函数 三 实验结果总结 前言 相关说
  • STM32LCD--基于HAL库(选中高亮?一文看懂如何玩转高亮显示)

    文章目录 前言一 LCD上的坐标这个坐标是怎么确定的 xff1f X轴Y轴 二 高亮显示类型三 部分真题要求解析四 如何高亮显示选中数据五 代码分析总结 前言 相关说明 xff1a 开发板 xff1a CT117E M4 STM32G431
  • STM32MP157实现串口接收数据上云-MP157串口测试

    文章目录 前言一 需要软件二 minicom配置三 功能选择四 发送数据结语 前言 本篇分享 xff1a 这次将会用几篇博客分享STM32MP157实现串口接收数据上云的一个基础功能 xff0c 实现STM32MP157的串口在接收到数据时
  • STM32MP157实现串口接收数据上云-云数据库存储多设备数据&界面显示实现

    文章目录 前言一 软件安装二 代码改进1 串口接收2 JSON数据解析 三 云产品流转1 作用2 自定义产品功能 amp 添加设备3 创建数据传输规则 四 MYSQL操作五 NODE RED操作1 总体思路2 安装节点3 节点配置4 页面布
  • TX2

    目录 1 Jetson TX2简介2 使用前准备2 1显示2 2控制2 3电源2 4开机2 5系统2 6使用图形界面2 7系统更新 xff0c 安装模块3 对外接口 xff1a 4 软件包配置JetPack4 1使用JetPack 5 TX
  • Linux应用编程-音频应用编程-语音转文字项目

    文章目录 前言Linux语音识别alsa lib简介 xff1a 安装alsa lib库 xff1a libcurl库简介 xff1a 安装libcurl库 xff1a API调用录音相关概念样本长度 xff08 Sample xff09
  • STM32MP157-QT-串口调试助手设计

    文章目录 前言STM32MP157串口调试助手widget uipro文件widget h头文件槽函数成员声明 widget cpp头文件扫描串口并添加到下拉列表串口配置参数获取配置参数 打开 关闭串口读取数据信号读数据函数代码 发送数据清
  • Linux-VIM使用

    文章目录 前言VIM使用1 切换模式2 跳转 1 跳转到指定行 2 跳转到首行 3 跳转到末行 3 自动格式化程序4 大括号对应5 删除 xff08 1 xff09 删除一个单词 xff08 2 xff09 删除光标位置至行尾 xff08
  • JAVA学习记录

    文章目录 前言Pta做题样例做题样例 命名规范 amp 代码风格基本数据类型基本语法类变量类函数关系运算 浮点数 xff08 实型 xff09 数组Java定义数组Java程序遍历整个数组使用FOR EACH循环输出整个数组 循环使用对象字
  • STM32G431-基于HAL库(第十四届蓝桥杯嵌入式模拟题2)

    文章目录 前言一 CubeMX配置 第十四届模拟题2完整版 二 代码相关定义 声明1 函数声明2 宏定义3 变量定义 三 主要函数1 按键扫描2 各参数控制3 LCD显示4 输出信号改变5 串口接收6 Main函数 四 实验结果1 数据页1
  • 线性控制理论纵横

    线性控制理论是系统与控制理论中最为成熟和最为基础的一个组成分支 xff0c 是 现代控制理论的基石 系统与控制理论的其他分支 xff0c 都不同程度地受到线性控制 理论的概念 方法和结果的影响和推动 线性系统理论的研究对象为线性系统 xff
  • 非线性控制理论的发展

    人类认识客观世界和改造世界的历史进程 xff0c 总是由低级到高级 xff0c 由简单到复 杂 xff0c 由表及里的纵深发展过程 在控制领域方面也是一样 xff0c 最先研究的控制系统 都是线性的 例如 xff0c 瓦特蒸汽机调节器 液面
  • 如何正确使用电烙铁

    焊接技术是一项无线电爱好者必须掌握的基本技术 xff0c 需要多多练习才能熟练掌握 1 选用合适的焊锡 xff0c 应选用焊接电子元件用的低熔点焊锡丝 2 助焊剂 xff0c 用25 的松香溶解在75 的酒精 xff08 重量比 xff09
  • 2.13 STM32 串口传输最佳处理方式 FreeRTOS+队列+DMA+IDLE (一)

    当多个串口数据都有大量数据来时 我们如何最佳处理STM32串口通信数据 可以通过FreeRTOS 队列的发送方式 下面将串口DMA发送处理过程 中心思想 1 建立一个大的环形数组 2 发送的数据时 将数据存入到大的数组 3 需要发送数据的长
  • 最流行的开源飞控项目ArduPilot Mega(APM)介绍及发展历史

    ArduPilotMega APM 是市面上最强大的基于惯性导航的开源自驾仪 特性包括 免费开源固件 xff0c 支持飞机 xff08 34 ArduPlane 34 xff09 xff0c 多旋翼 四旋翼 六旋翼 八旋翼等 直升机 xff
  • 解密Apache HAWQ ——功能强大的SQL-on-Hadoop引擎 [作者:常雷]

    作者 xff1a 常雷 博士 xff0c Pivotal中国研发中心研发总监 xff0c HAWQ并行Hadoop SQL引擎创始人 xff0c Pivotal HAWQ团队负责人 xff0c 曾任EMC高级研究员 专注于大数据与云计算领域