MySQL_07InnoDB数据存储结构
InnoDB数据存储结构
InnoDB数据存储结构
索引的数据结构
存储引擎
逻辑架构
用户与权限管理
Windows 和 Linux 版安装详细步骤。
https://zh.wikipedia.org/zh-cn/Apache_Hadoop
https://hadoop.apache.org/
Apache Hadoop 是一个开源软件框架,它使用简单的编程模型提供高度可靠的大型数据集分布式处理。Hadoop 以其可扩展性而闻名,它构建在商用计算机集群上,为存储和处理大量结构化、半结构化和非结构化数据提供了经济高效的解决方案,且没有格式要求。
Apache Hadoop的核心模块分为存储和计算模块。Apache Hadoop框架由以下基本模块构成:
Hadoop Common – 包含了其他 Hadoop 模块所需的库和实用程序;在0.20及以前的版本中,包含HDFS、MapReduce和其他项目公共内容,从0.21开始HDFS和MapReduce被分离为独立的子项目,其余内容为Hadoop Common
Hadoop Distributed File System (HDFS,Hadoop分布式文件系统) – 一种将数据存储在集群中多个节点中的分布式文件系统,能够提供很高的带宽;
Hadoop MapReduce – 用于大规模数据处理的MapReduce计算模型实现;
Hadoop YARN – (于2012年引入) 一个负责管理集群中计算资源,并实现用户程序调度的平台;
Hadoop Ozone – (于2020年引入) Hadoop的对象存储。
Apache Hadoop的MapReduce和HDFS模块的灵感来源于Google的 MapReduce 和 Google File System 论文。
大致工作流程:Hadoop框架先将文件分成数据块并分布式地存储在集群的计算节点中,接着将负责计算任务的代码传送给各节点,让其能够并行地处理数据。这种方法有效利用了数据局部性,令各节点分别处理其能够访问的数据。与传统的超级计算机架构相比,这使得数据集的处理速度更快、效率更高。
https://www.ibm.com/cn-zh/topics/hdfs
[HDFS概述介绍及其优缺点](https://blog.csdn.net/mr123666/article/details/103310926)
HDFS 是一种分布式文件系统,用于处理在商业硬件上运行的大型数据集。 它用于将单个 Apache Hadoop 集群扩展到数百 (甚至数千)个节点。 HDFS 不应与 Apache HBase 混淆或被 Apache HBase 取代,Apache HBase 是一个面向列的非关系数据库管理系统,它位于 HDFS 之上,可以通过其内存处理引擎更好地支持实时数据需求。
https://www.ibm.com/cn-zh/topics/mapreduce
MapReduce 是一种编程范式,它允许在 Hadoop 聚类中的数百或数千台服务器之间进行大规模扩展。 作为处理组件,MapReduce 是 Apache Hadoop 的核心。 术语“MapReduce”指的是 Hadoop 程序执行的两个不同的独立任务。 第一个是映射作业,它接受一组数据,并将其转换为另一组数据,其中各个元素分解为元组(键/值对)。
缩减作业以映射的输出作为输入,并将这些数据元组组合为更小的一组元组。 正如名称 MapReduce 的顺序所暗示的那样,缩减作业总是在映射作业之后执行。
MapReduce 编程提供了一些优势,有助于从您的大数据获得宝贵的洞察:
https://zh.wikipedia.org/zh-cn/Apache_HBase
https://HBase.apache.org/
https://www.ibm.com/cn-zh/topics/HBase
Hadoop database 的简称。是一款基于 Hadoop HDFS 的数据库,是一种NoSQL数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等。
HBase 是一个在 HDFS 上运行的列式存储非关系数据库管理系统。 HBase 提供了存储稀疏数据集的容错方式,这类数据集在许多大数据用例中十分常见。 它非常适合实时数据处理或者对大量数据的随机读取/写入访问。
与关系数据库系统不同,HBase 不支持 SQL 一类的结构化查询语言;事实上,HBase 根本不是关系数据存储库。 HBase 应用程序以 Java 编写,更像是一款典型的 Apache MapReduce 应用程序。 HBase 确实支持以 Apache Avro、REST 和 Thrift 编写应用程序。
HBase 系统设计为线性扩展。 它包括一系列由行和列组成的标准表,更像是传统数据库。 每个表必须有一个定义为主键的元素,且所有对 HBase 表的访问尝试都必须使用此主键。
Avro 作为组件,支持一系列丰富的原始数据类型(包括数字、二进制数据和字符串)以及多种复杂类型(包括数组、映射、枚举和记录)。 对于数据,也可以定义排序顺序。
HBase 依赖于 zookeeper 实现高性能协调。 zookeeper 内置到 HBase 中,但如果您正在运行生产集群,那么建议您配备一个与 HBase 集成的专用 ZooKeeper 集群。
HBase 非常适合与 Hive 结合使用,后者是用于大数据批处理的查询引擎,以支持容错性大数据应用程序。
维基百科
HBase是一个开源的<font color="red">非关系型分布式数据库(NoSQL)</font>,它参考了谷歌的BigTable建模,实现的编程语言为 Java。它是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统之上,为 Hadoop 提供类似于BigTable 规模的服务。因此,它可以对稀疏文件提供极高的容错率。 HBase在列上实现了BigTable论文提到的压缩算法、内存操作和布隆过滤器。HBase的表能够作为MapReduce任务的输入和输出,可以通过Java API来访问数据,也可以通过REST、Avro或者Thrift的API来访问。 虽然最近性能有了显著的提升,HBase 还不能直接取代SQL数据库。如今,它已经应用于多个数据驱动型网站,包括 Facebook的消息平台。 在 Eric Brewer的 [CAP理论](https://zh.wikipedia.org/zh-cn/CAP%E5%AE%9A%E7%90%86) 中,HBase属于CP类型的系统。
总结:
https://zh.wikipedia.org/zh-cn/Apache_Hive
https://hive.apache.org/
Hive 是基于Hadoop的一个<font color="red">数据仓库工具</font>,<font color="red">可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,并将SQL语句最终转换为 **MapReduce** 任务进行运行。</font>主要是让开发人员能够通过 SQL 来计算和处理 HDFS 上的结构化数据,**适用于离线的批量数据计算**。
Apache Hive 是一种分布式、容错的数据仓库系统,可实现大规模分析。<font color="red">Hive Metastore (HMS) 提供了一个元数据的中央存储库,</font>可以轻松分析该元数据以做出明智的、数据驱动的决策,因此它是许多数据湖架构的关键组件。Hive 构建在 Apache Hadoop 之上,通过 hdfs 支持 S3、adls、gs 等存储。Hive 允许用户使用 SQL 读取、写入和管理分布式存储中的 PB 级数据。
通过元数据来描述 HDFS 上的结构化文本数据,通俗点来说,就是定义一张表来描述HDFS上的结构化文本,包括各列数据名称,数据类型是什么等,方便我们处理数据,当前很多SQL ON Hadoop的计算引擎均用的是hive的元数据,如Spark SQL、Impala等;
总结:
<font color="blue">**Hive Metastore (HMS)**</font> 是关系数据库中 Hive 表和分区 元数据的中央存储库,并为客户端**(包括 Hive、Impala 和 Spark)**提供使用 Metastore 服务 API 访问此信息的能力。它已成为利用各种开源软件(例如 Apache Spark 和 Presto)的数据湖的构建块。事实上,整个工具生态系统(开源工具和其他工具)都是围绕 Hive Metastore 构建的,此图展示了其中一些工具。
HBase和Hive在大数据架构中处在不同位置,HBase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题,一般是配合使用。
在大数据架构中,Hive和HBase是协作关系,数据流一般如下图:
Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C ++和Java编写的开源软件。与其他Hadoop的SQL引擎相比,它提供了高性能和低延迟。
优点
缺点
Impala | 关系型数据库 |
---|---|
Impala使用类似于HiveQL的类似SQL的查询语言 | 关系数据库使用SQL语言 |
在Impala中,您无法更新或删除单个记录 | 在关系数据库中,可以更新或删除单个记录 |
Impala不支持事务 | 关系数据库支持事务 |
Impala不支持索引 | 关系数据库支持索引 |
Impala存储和管理大量数据(PB) | 与Impala相比,关系数据库处理的数据量较少(TB) |
相同点
不同点
HBase | Hive | Impala |
---|---|---|
HBase是基于Apache Hadoop的宽列存储数据库。 它使用BigTable的概念。 | Hive是一个数据仓库软件。 使用它,我们可以访问和管理基于Hadoop的大型分布式数据集。 | Impala是一个管理,分析存储在Hadoop上的数据的工具。 |
HBase的数据模型是宽列存储。 | Hive遵循关系模型。 | Impala遵循关系模型。 |
HBase是使用Java语言开发的。 | Hive是使用Java语言开发的。 | Impala是使用C ++开发的。 |
HBase的数据模型是无模式的。 | Hive的数据模型是基于模式的。 | Impala的数据模型是基于模式的。 |
HBase提供Java,RESTful和Thrift API。 | Hive提供JDBC,ODBC,Thrift API。 | Impala提供JDBC和ODBC API。 |
支持C,C#,C ++,Groovy,Java PHP,Python和Scala等编程语言。 | 支持C ++,Java,PHP和Python等编程语言。 | Impala支持所有支持JDBC / ODBC的语言。 |
HBase提供对触发器的支持。 | Hive不提供任何触发器支持。 | Impala不提供对触发器的任何支持。 |
以⼀个SQL例⼦来展示查询计划
1 | select |
分析上⾯的单机执⾏计划,第⼀步先去扫描 t1 表中需要的数据,如果数据⽂件存储是列式存储我们可以便利的扫描到所需的列 id, n1; 接着需要与 t2 表进⾏ Join 操作,扫描 t2 表与 t1 表类似获取到所需数据列 id, n2。t1 与 t2 表进⾏关联执行 join 操作,关联之后再与 t3 表进⾏关联,这⾥会使⽤谓词下推扫描 t3 表只取 join 所需数据;关联三个表得到数据后,对 group by 进⾏相应的 aggregation 操作,最终是排序取出指定数量的数据返回。
这里由于是在一台机器上完成上述过程,所以逻辑上还是比较直观的。但是倘若所查询的 T1 和 T2 的数据都比较大,无法在一台机器上存储,或者单机执行效率太慢,这个时候就需要分布式并行执行计划来执行上述流程。
所谓的分布式并行化执行计划,就是在单机执行计划基础之上结合数据分布式存储的特点,按照任务的计要求把单机执行计划拆分为多段子任务,每个子任务都是可以并行执行的。上面的单机执行计划转为分布式并行执行计划如下图所示:
整体流程
一、Hash join分区
首先底层仍然先执行的是数据间的 join 操作。这里我们假设 T1 表和 T2 表是大表,分布在三个节点上(三台机器上)。而 T3 表是小表,只存储在第三个节点。此时为了做表之间数据的 Join 操作,可以想到需要将相同 id 字段的数据汇总到一起,这样才能进行拼接。 为了实现该过程,分布式执行计划会首先根据 T1 和 T2 两个大表中数据的 id 字段进行 hash join,采取的公式类似于:
这个是 MapReduce 中 HashPartitioner 类中的方法。可以看出上式的分区结果只与 key 值的 hashCode 有关。这里 id 字段是 int 类型,则 hashCode 就是其本身,所以通过上式,就可以实现将T1和T2表中相同id字段的数据划分到同一分区中。(这里要注意的是,不是id为1的字段进入一个分区,2、3、4、5…都各进入一个分区,通过上式可以看出是对分区大小取%的操作,图中分区大小是3,因此id为1,4,7…的数据进入同一分区。)
同时要注意的是,对于 T3 表与 T1、T2 表数据的关联采用的不是 hash join,而是利用 Broadcast 来进行 join。 因为 T3 表的数据量较小,如果仍然采用 hash join 的话,就需要在 T1 表和 T2 表通过 hash join 分区后,再利用 hash join 与 T3 表重复执行一遍上述分区流程。这样增加了不同节点间网络传输的开销,也降低了执行效率。因此,对于小表,分布式执行计划采用的方法是利用广播机制,将该 T3 表直接分发到三个节点上。这样每个节点在执行完 T1 表与 T2 表的关联后,就可以直接在本机上执行与 T3 表的关联。
通过上面的步骤,就可以保证对于 T1 表和 T2 表,id 字段相同的数据进入到同一分区中进行 join 操作,然后再与本机的 T3 表进行 join 操作。即完成了 sql 中的
1 | from t1 |
二、分区内预聚合
这一步相当于执行 group by
的步骤。因为在分区时每条数据都带着各自的字段,也就包含着 n1, n2 的数据,所以此时在每个分区中,就可以对该分区内的数据按照 n1, n2 的值,执行 group by
操作进行一个局部的预聚合。
三、全局聚合
通过上述操作可以得到分区内的局部预聚合。但此时,条件相同的 n1, n2 可能分散在各个分区中(因为最初是按 id 字段分区的)。因此还需要一个全局的聚合,把所有 hash 结果相同的 <n1, n2> 进行汇总,这样才能得到最后的结果。因此,此时各个分区中预聚合(group by)后的数据会根据该组的 <n1, n2> 值再利用 hash join 进行分区,使得对 <n1, n2> 的 hash 值相同的数据组发送到同一分区中(此时数据量经过预聚合后已经变小了,所以就可以减少分区数,图上减少为 2 个)。这样在每个分区中每个组内的数据都是包含了所有 <n1, n2> Hash 值相等的结果,也即可以得到 SQL 查询语句中 group by 的最终结果(相当于原查询语句中,group by n1, n2
后所有应该进入同一分组中的数据)。
四、局部TopN
除了上述过程可以并行外,还有其它操作也可以并行吗?由于原SQL语句有 order by limit
操作,所以其实还可以在全局聚合后执行局部的 order by limit
操作。由于order by
操作是对得到的最终结果进行 order by
,因此,这里就可以在每个分区进行全局聚合后,对得到的 count(1) as c 进行 order by limit
操作,得到局部的 Top100 的结果。这样同样减少了网络间传输的数据量,同时也体现了并行执行的特点。
五、全局TopN
最后,就是将所有的数据进行汇总,然后执行全局的order by limit 操作,就可以得到最终的结果。
整体的分布式并行执行计划流程图如下图所示:
各部分的具体操作就如上述流程介绍中所示。对上述流程的总结如下:
一文读懂Impala统计信息相关知识 、 使用Impala hint加速SQL查询 、 Impala简明调优手册
优化连接最简单的方式就是使用 COMPUTE STATS 命令搜集所以参与关联表的统计信息,让 Impala 根据每个表的大小、列的非重复值个数等相关信息自动优化查询。为保证统计信息的准确性,我们需要在对表 INSERT、LOAD DATA 或者添加分区等操作之后及时执行 COMPUTE STATS 命令搜集统计信息。
Impala查询优化器根据表的绝对大小和相对大小为连接查询选择不同的关联技术,它提供了两种连接方式:
具体Impala优化器选择哪种连接方式,完全依赖于通过 COMPUTE STATS 搜集的表统计信息。为了确认表的连接策略,我们可以对一个特定的查询执行 EXPLAIN 语句。如果通过基准测试我们可以确认一种连接方式比另一种连接方式效率更高,也可以通过 Hint 的方式手动指定需要的连接方式。
当统计信息不可用时如何关联
如果参与关联的表的统计信息不可用,而且 Impala 自动选择的连接顺序效率很低,我们可以在 SELECT 关键字之后使用 STRAIGHT_JOIN 关键字手动指定连接的顺序。
如果参与关联的某些表的统计信息还是可用的,Impala会根据存在统计信息的表重新生成连接顺序。有统计信息的表会被放置在连接顺序的最左端,并根据表的基数和规模降序排列。而没有统计信息的表被作为空表对待,总是放在连接顺序的最右端。
使用 STRAIGHT_JOIN 覆盖连接顺序
如果关联查询由于统计信息不可用、或过期、或者数据分布等问题导致效率低下,我们可以通过指定STRAIGHT_JOIN关键字改变连接顺序。使用该关键字后,关联查询将不会使用 Impala 查询优化器自动生成的连接顺序,而是使用查询中表出现的先后顺序作为关联的顺序。对于手动指定连接顺序的查询,我们可能需要根据情况对连接顺序进行微调,比如有四张表分别为BIG、MEDIUM、SMALL、TINY,那连接顺序可以调整为:BIG、TINY、SMALL、MEDIUM。
如下示例中,表 BIG 经过过滤实际上产生了一个非常小的结果集,而 Impala 仍然把它作为最大的表对待放在连接顺序的最左侧。为了改变优化器错误的判断,我们使用 STRAIGHT_JOIN 改变连接的顺序,把 BIG 表放到了联机顺序的最右侧:
1 | select straight_join x |
参考链接: https://blog.51cto.com/1inux/1638154
数字证书认证机构(英语:Certificate Authority,缩写为CA),是指发放、管理、废除数字证书的机构。CA的作用是检查证书持有者身份的合法性,并签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理。
CA 是PKI(Public Key Infrastructure)体系的核心。它为客户的公开密钥签发公钥证书、发放证书和管理证书,并提供一系列密钥生命周期内的管理服务。它将客户的公 钥与客户的名称及其他属性关联起来,为客户之间电子身份进行认证。证书中心是一个具有权威性、可信赖性和公证性的第三方机构。它是电子商务存在和发展的基础。
简单的说,使用CA不仅能保证数据的安全传输,还能保证目标的可信赖性。