基础软件新鲜事
在实际应用中,为了面对各种需求,OLTP、OLAP 在技术上分道扬镳,在很多企业架构中,这两类任务处理由不同团队完成,同时部署的OLAP和OLTP通过ETL进行衔接。为了提升OLAP的性能,需要在ETL过程中进行大量的预计算,包括数据结构的调整和业务逻辑处理。
OushuDB 管理指南系统扩容均衡HDFS
OushuDB 管理指南系统扩容安装准备
本次安装我们假设每台机器上有两个数据盘,分别mount在/data1和/data2上。在其他硬件配置下,可能有很多块盘,用户需要根据盘数的不同更改后面相应的配置信息。尤其需要注意的是HDFS的数据目录和OushuDB的临时文件目录。
通常,一个查询的并行度会影响一个查询的性能以及系统的吞吐量。资源管理器分配给一个查询的virtual segment个数决定了一个查询的并行度。 一般情况下,用户不需要人为干预资源管理器对virtaul segment个数的分配,OushuDB资源管理器会很好的管理查询的并行度。但有些时候,用户可能想要控制一个查询的并发度,OushuDB提供了多个 可供用户调控的手段。
在资源队列树中,只有叶子节点可以关联用户接受查询。儿子节点的资源是从父节点中分配出来的。其中一个父节点的所有儿子节点的MEMORY_LIMIT_CLUSTER和 CORE_LIMIT_CLUSTER比例值之和必须小于等于100%。
在任意时刻,OushuDB中可能有很多个并发的查询在运行。这些查询属于不同的用户。用户的优先级可能有高有低。我们需要一种方式 来合理的给各个用户分配其可以使用的系统资源,包括CPU和内存等。
随着虚拟集群的引入,有些GUC不再是全局范围的定义而是从属于虚拟集群的属性,我们将这些GUC移入pg_vcluster中,将其作为虚拟集群的属性。
OushuDB从4.4.0.0版本开始支持虚拟集群来管理节点及其队列。虚拟集群可以使用户的资源使用限定在若干节点上,从而达到合理分配资源并隔绝错误。目前所有关于虚拟集群的元数据信息记录在系统表pg_vcluster中。
如果OushuDB和YARN配合使用,OushuDB可以从YARN申请资源,并把申请到的资源通过资源管理队列重新在查询之间分配。在不使用资源的时候会把资源动态归还给YARN。 你可以在hawq-site.xml中修改如下配置使之生效。
如果待备份表是压缩的,这个查询给出的大小是压缩后的大小,如果你的备份是没有压缩的,需要乘上一个压缩比来计算所需空间。通常我们使用3做为估计的压缩比。 基于数据库使用空间评估完压缩比的影响后,如果使用hdfs外部表备份,则获得的数据库大小需要乘hdfs存储副本个数评估总大小,通常该副本个数为3,即所需空间为databasesize * 3 * 3;如果使用gpfdist,gpfdist使用的机器个数是N,则每个机器上需要的空间是databasesize * 3 / N。
pg_dump和pg_restore是一种串行备份和恢复方式,对大数据库来说从运行时间和空间来看都不适合。所以只适用于非常小的数据库备份。
使用gpfdist外部表进行备份的步骤: 检查数据库的大小,确定gpfdist使用的文件系统有充分的空间 ● 使用pg_dump导出需要备份的数据schema ● 启动gpfdist并创建使用gpfdist的writable外部表 ● 备份数据
检查备用主节点的状态 要检查备用主节点的状态, 可以查询 gp_master_mirroring 视图。
如果主节点发生故障, 日志同步将停止。此时必须激活备用主节点。激活备用主节点后, Oushu Database 将重建最后一成功提交的事务时的状态。
Oushu Database 集群上可以配置两个master节点:主节点(master)和备用主节点(standby master)。客户端连接到主节点, 查询只能在主节点上执行。您可以在单独的机器上部署备用主节点, 使群集能够更好得容忍单点故障。如果主节点无法运行, 备用主节点将升级为主节点以支持集群正常运行。
修改外部表,使用ALTER TABLE命令。 ALTER TABLE orcexternal RENAME TO orc_ext; ALTER TABLE orc_ext SET SCHEMA new_schema; 修改外部表结构时,必须使用ALTER EXTERNAL TABLE命令。 增加一个列,使用下面命令: ALTER EXTERNAL TABLE orc_ext ADD COLUMN col int; 删除一个列,使用下面命令: ALTER EXTERNAL TABLE orc_ext DROP COLUMN col; 修改列数据类型,使用下面命令: ALTER EXTERNAL
创建一个外部表,使用CREATE EXTERNAL TABLE命令。在这个命令里,需声明新表名称,各列名称及其数据类型,基于命令的EXECUTE子句或基于URL的LOCATION子句的外部数据来源,数据格式。
外部表是一个数据存储在数据库外部的OushuDB数据库表,允许OushuDB对存储在数据库之外的数据源中的数据进行访问,就像数据存储在常规数据库表中一样。外部表分可读和可写,数据可以从外部表读取或写入。它和常规数据库表的用法一样, 可以执行INSERT、SELECT、JOIN等操作。外部表通常用于快速并行加载和卸载数据库数据。
一个OushuDB数据库集群包含一个或多个已命名数据库。 用户和用户组在整个集群范围内是共享的,但是其它数据并不共享。 任何与服务器连接的客户都只能访问那个在连接请求里声明的数据库。
关系型数据库中的表非常类似纸面上的一张表:它由行和列组成。列的数目和顺序是固定的,每个列都有一个名字。行的数目是变化的(它反映了给定时刻存储的数据量)。SQL 对表中行的顺序没有任何规定。当读取一个表时,行将会以一个随机的顺序出现,除非你明确地要求排序。另外,SQL 并不给行赋予唯一的标识,因此我们很可能在一个表中有好几个完全相同的行。这是作为 SQL 基础的下层数学模型的必然结果,但是这通常是我们不愿意看到的。
全称的名字写起来非常费劲,并且我们最好不要在应用里直接写上特定的模式名。因此, 表通常都是用 位修饰 的名字引用的,这样的名字里只有表名字。 系统通过查找一个 搜索路径 来判断一个表究竟属于哪个模式, 这个路径是一个需要查找的模式名列表。在搜索路径里找到的第一个表将被使用。 如果在搜索路径中没有找到表,那么就报告一个错误(即使在数据库里的其它模式中存在此表也如此)。
一个OushuDB数据库集群包含一个或多个已命名数据库。 用户和用户组在整个集群范围内是共享的,但是其它数据并不共享。 任何与服务器连接的客户都只能访问那个在连接请求里声明的数据库。
OushuDB 里的表空间允许数据库管理员在文件系统里定义那些代表数据库对象的文件存放位置。一旦创建了表空间,那么就可以在创建数据库对象的时候引用它。 通过使用表空间,管理员可以控制一个OushuDB 安装的磁盘布局。这么做至少有两个用处。首先,如果初始化集群所在的分区或者卷用光了空间,而又不能扩展,那么表空间可以在一个不同的分区上创建和使用,直到系统可以重新配置。
回顾一下 http://www.oushu.com/docs/ch/server-configuration.html 我们知道OushuDB 服务器提供了大量的运行时配置变量。你可以为许多这种变量设置特定于数据库的缺省数值。
CREATE DATABASE实际上是通过拷贝一个现有的数据库进行工作的。缺省时,它拷贝名为template1的标准系统数据库。所以该数据库是创建新数据库的”模板”。如果你给template1增加对象,这些对象将被拷贝到随后创建的用户数据库中。这样的行为允许节点对数据库中的标准套件进行修改。比如,如果你把过程语言PL/Perl安装到template1里,那么你在创建用户数据库的时候它们就会自动可得,而不需要额外的动作。
数据库是一些SQL对象(“数据库对象”)的集合;通常每个数据库对象(表、函数等)属于并且只属于一个数据库。不过有几个系统表 (比如pg_database)属于整个集群并且可以在集群之内的每个数据库里访问。更准确地说,一个数据库是一个模式的集合,而模式包含表、函数等等。因此完整的层次是这样的:服务器→数据库→模式→表(或者其它类型对象,比如函数)。
请注意留下足够的升级与测试时间,避免升级出现问题需要回退到老版本。另外,请在升级前做好元数据的备份工作,防止出现意外。
请注意需要留下足够的升级与测试时间,避免升级出现问题需要回退到老版本。另外,请在升级前做好数据的备份工作,防止出现意外。
请注意需要留下足够的升级与测试时间,避免升级出现问题需要回退到老版本。另外,请在升级前做好数据的备份工作,防止出现意外。
我们假设用户已经安装了HDP Ambari,并且已经安装了HDFS和Zookeeper。安装步骤可以参考: ● https://docs.hortonworks.com/HDPDocuments/Ambari/Ambari-2.4.2.0/index.html ● https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.5.3/index.html
安装部署好Secure HDFS 安装部署好MIT Kerberos KDC 同步KDC和OushuDB cluster的系统时间
在每一个节点上安装PostGIS
安装其他节点YUM源 在oushum1上,通过“hawq scp”命令统一安装其他节点的YUM源
本节安装之前需要准备4台主机,各个节点上即将安装的组件如下表所示:
本章节通过TPCH lineitem 表来展示新执行器的使用。
安装HDFS。由于hadoop依赖于特定版本的snappy,请先卸载snappy确保安装的顺利进行
如果您安装了Oushu Lava私有云,或者用的是Lava Cluod公有云,那么您不需要手动部署Zookeeper。在部署HDFS的过程中会自动部署Zookeeper。
OushuDB表由行(rows)和(columns)组成。每一个列有一个列名和一个数据类型,一个表的列数和列的顺序是固定的。一个表的行数是可变的。SQL并不假设表中行的顺序。当读一个表时,除非显示要求排序,返回的行会以任意顺序出现。另外,SQL并不给每一行一个唯一标志符,所以,一个表中具有同样几个同样的行是可能的。
视图(View)是从一个或多个表(或视图)导出的表。视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。
OushuDB 安装与升级之命令行安装的准备:配置YUM源及安装方式;交换公钥,设置无密码登陆;安装其他节点YUM源;关闭selinux;关闭防火墙;安装配置NTP;安装java;关于数据目录;关于IPV6
本节将通过RPM安装物理机版本的一个Centos/Redhat 7.x单节点集群。假设我们安装的服务器hostname为oushu(可以通过命令:hostname 直接获取,请将文中所有出现的oushu替换为实际的hostname)。
OushuDB同PostgreSQL兼容,提供四类函数。每一类函数都可以带基础数据类型以及复合数据类型为参数,并且可以返回一个基础数据类型或者复合数据类型的值。函数也可以定义为返回基础数据类型或者复合数据类型值的集合。详细用法可参见PostgreSQL具体章节。 查询语言(SQL)函数: https://www.postgresql.org/docs/8.2/xfunc-sql.html 过程语言函数: https://www.postgresql.org/docs/8.2/static/plpgsql.html , https://www.postgresql.org/docs/8.2/st
一个OushuDB集群管理着多个数据库(database),每个数据库又包含多个模式(schema), 一个模式包含多个对象(表,视图,函数等),所以这些对象之间的层级结构为: database -> schema -> (tables, functions, views) 每个模式,表,视图,函数等只属于一个database。本章主要介绍每一种对象的常见用法。具体使用语法可以参见参考手册。
启动OushuDB有两种方式,一种是通过”hawq start cluster”命令来启动整个集群,包括master和segment。启动哪些segment是由”/hawq-install-path/etc/slaves”中包含的节点确定的。
事务是数据管理系统一个非常重要的属性。大部分Hadoop里面的SQL引擎不支持事务。让程序员自己保证事务和数据的一致性是非常困难的事。 OushuDB支持事务的所有ACID属性,支持Snapshot Isolation。事务发生由Master节点协调和控制。采用的是泳道模型。并发插入时每个并发会使用各自的泳道,互不冲突。在事务提交的时候通过记录文件逻辑长度的方式来保证一致性。如果事务失败的时候,需要回滚,删除文件末尾的垃圾数据。起初HDFS是不支持truncate的,现在HDFS刚支持的truncate功能是根据OushuDB的需求做出的。
高速互联网络的作用是在多个节点之间交换大量数据。OushuDB高速互联网络基于UDP协议。大家可能会疑问为什么OushuDB不使用TCP。其实OushuDB同时支持TCP和UDP两种协议,TCP协议实现早于UDP协议。但是因为我们遇到了TCP不能很好解决的高连接数并发问题,我们才开发了基于UDP的协议。图4展示了一个高速互联网络的例子。
用户通过JDBC/ODBC提交查询之后,查询解析器解析查询得到查询树,然后优化器根据查询树生成查询计划,派遣器和资源管理器交互得到资源,分解查询计划,然后派遣计划到Segment的执行器上面执行。最终结果会传回给用户。
图1给出了一个典型的OushuDB集群的主要组件。计算部分和存储部分完全分离,可以独立扩容。在图中有多个OushuDB Master节点。元数据管理服务和资源管理服务位于OushuDB Master内部。其他节点为Slave节点。每个Slave节点上安装有一个OushuDB Segment。Segment实现OushuDB的计算。OushuDB Segment在执行查询的时候会启动多个QE (Query Executor, 查询执行器)。查询执行器运行在资源容器里面。在这个架构下,节点可以动态的加入集群,并且不需要数据重新分布。当一个节点加入集群时,他会向OushuDB Master节点发送心
极速执行器: 高效的执行器,比传统数仓/MPP快5-10倍,比Hadoop SQL引擎要快5-30倍。公有云和私有云部署:支持亚马逊和阿里云等公有云平台,同时可以支持主流PaaS云平台(比如Kubernetes等)和Docker部署。对标准的完善支持:ANSI SQL标准,OLAP扩展,标准JDBC/ODBC,比Hadoop SQL引擎都要完善。具有非常成熟的并行优化器。优化器是并行SQL引擎的重要组成部分,对性能影响很大,尤其是对复杂查询。支持ACID事务特性:这是很多现有基于Hadoop的SQL引擎做不到的,对保证数据一致性很重要。可以有效减少开发及运维人员的负担。动态数据流引擎:基于UD