暂无图片
暂无图片
8
暂无图片
暂无图片
暂无图片

Vertica小白快速了解、简单上手:Docker安装、java和python连接测试

一叶扁舟 2021-12-15
6252

image.png

image.png

一、概述

1.1、什么是Vertica?

Vertica是一款基于列存储的MPP (massively parallel processing)架构的数据库。它可以支持存放多至PB(Petabyte)级别的结构化数据。Vertica是由关系数据库大师Michael Stonebraker(2014 年图灵奖获得者)所创建,于2011年被惠普收购并成为其核心大数据平台软件。

1.2、功能特点

Vertica有如下特点

  • 列式存储和执行

    在分析工作负载方面,列式存储可显着提高性能、I/O、存储空间和效率。使用列式存储,查询仅读取回答查询所需的列。

  • 实时加载和查询

    具有高查询并发性和将新数据同时加载到系统中并进行查询的能力。Vertica加载数据的速度比传统的行存储数据库快 10 倍。

  • 高级数据库分析

    一组高级数据库内分析,包括机器学习地理空间时间序列分析,让您可以更接近您的数据进行分析计算。这些内置功能可提供即时结果,而无需求助于其他分析工具。

  • 数据库设计器和管理工具

    这些功能允许您以最少的管理工作来调整和控制Vertica。有关详细信息,请参阅关于数据库设计器使用管理工具

  • 高级压缩

    积极的编码和压缩允许Vertica通过在处理时减少 CPU、内存和磁盘 I/O 来显着提高分析性能。Vertica可以将原始数据大小减少多达 90%,低至其原始大小的 1/10,而不会丢失信息或精度。

  • 结构化和半结构化数据

    除了传统的结构化数据库表,Vertica还提供弹性表,让您可以加载和分析半结构化数据,例如 JSON 格式的数据。

  • 大规模并行处理

    强大且可扩展的并行处理解决方案提供主动冗余、自动复制、故障转移和恢复。

  • 随处部署

    在位于您自己(或协同定位)数据中心的物理硬件上运行。或者在您自己的虚拟主机或主要云平台(AWS、Azure 和 Google Cloud)上的虚拟硬件上运行。

  • 数据湖连接

    使用内置连接器分析来自 Apache Hadoop 和 Kafka 的数据。对于其他系统,Vertica提供了一套标准客户端库,例如 JDBC 和 ODBC。

  • 管理和监控

    基于浏览器的管理控制台让您可以通过用户友好的 GUI 创建、导入和管理您的 Vertica 数据库。

  • 动态扩展集群以满足工作负载

    使用Eon 模式扩展您的数据库集群以满足增加的工作负载,或缩小它以节省资金。

1.3、架构基础

了解Vertica架构核心的几个关键概念

1.3.1、列存储

Vertica以列格式存储数据,以便查询以获得最佳性能。与基于行的存储相比,列存储减少了磁盘 I/O,使其成为读取密集型工作负载的理想选择。Vertica仅读取回答查询所需的列。例如:

SELECT avg(price) FROM tickstore WHERE symbol = 'AAPL' and date = '5/31/13';

对于此示例查询,列存储仅读取三列,而行存储读取所有列:

image.png

1.3.2、数据编码和压缩

Vertica使用编码和压缩来优化查询性能并节省存储空间。

  • 编码

    编码将数据转换为标准格式。 Vertica 使用多种不同的编码策略,具体取决于列数据类型、表基数和排序顺序。编码可提高性能,因为查询执行期间磁盘 I/O 较少。此外,您可以在更少的空间中存储更多的数据。

  • 压缩

    与其他数据库相比,Vertica 可以存储更多数据、提供更多视图并使用更少的硬件。Vertica使用多种不同的压缩方法,并自动为被压缩的数据选择最好的一种。

    压缩允许列存储占用比行存储少得多的存储空间。在列存储中,存储在投影列中的每个值都具有相同的数据类型。这极大地促进了压缩,尤其是在已排序的列中。在行存储中,行的每个值可以具有不同的数据类型,从而导致压缩的使用效率低得多。

    下面显示了使用排序和基数的压缩:

    image.png

1.3.3、集群

集群支持扩展和冗余。可以通过添加更多节点来扩展数据库集群,并且可以通过跨集群分发和复制数据来提高可靠性。

image.png

列数据分布在集群中的节点上,因此如果一个节点不可用,数据库将继续运行。当一个节点被添加到集群中,或者在不可用后重新上线时,它会自动查询其他节点以更新其本地数据。

1.3.4、逻辑和物理Schema

Vertica将有关数据库对象的信息存储在逻辑架构和物理架构中。两种架构之间的差异以及它们与数据存储的关系是Vertica架构的一个重要且独特的方面。

1.4、关键能力

性价比高,支持大规模扩展

HPE Vertica,可部署于廉价的x86服务器/私有云/公有云/Hadoop,软件License费用可预期,支持大规模节点扩展

高处理性能

决定一个大数据平台综合性能的主要因素包括:硬件处理性能和数据库软件性能。其中,磁盘速度从1956年至今仅仅增长了12.5倍,I/O是主要瓶颈。

而HPE Vertica,能够胜任大规模批量计算高并发查询、以及极端复杂的自主分析和查询。Vertica提高性能的秘诀在于:

image.png

高频数据加载和实时分析

Vertica调度程序(vertica-kafka-scheduler.jar)负责组织协调从Kafka持续加载数据流资源,Vertica KafkaExport插件负责将SQL查询结果导出到Kafka等。

最终,HPE Vertica能够支持秒级数据实时加载和秒级甚至亚秒级的数据查询响应能力

开放性和集成能力

Vertica可与Hadoop Hive/HDFS/Spark无缝集成,可与R无缝集成,支持各类BI产品和ETL工具,能解决各种数据挖掘算法的应用场景

具备企业级高可用和易管理特性

Vertica具备完善的部件失效和节点失效保护能力,和完善的全增量备份机制,以及基于MC的企业级易用性和管理能力

1.5、vertica 11全新发布

今年,在「Vertica Unify 2021全球峰会」上,Vertica宣布正式推出全新版本Vertica 11

Vertica 11 将为多云和多区域部署提供统一分析、高级分析与机器学习能力,包含主要功能、增强功能与自助式容器工作流,从全新意义上满足了数据分析驱动型企业的敏捷、效率和安全性要求,就此开启「统一分析」的新篇章。

详情参看:Vertica 11 高燃发布!开启「统一分析」新篇章

二、docker安装 vertica 11

vertica-ce DockerHub

2.1、docker安装

# 拉取镜像 docker pull vertica/vertica-ce:11.0.0-0 # 启动 docker run -d -p 5433:5433 -p 5444:5444 \ --mount type=volume,source=vertica-data,target=/vertica_data \ --name vertica_ce \ -e VERTICA_PASSWORD=vertica \ vertica/vertica-ce:11.0.0-0

2.2、简单使用

2.2.1、连接数据库

  • 进入容器

    docker exec -it vertica_ce /bin/bash
  • 连接数据库

    vsql

    image.png

  • 遇到问题

    如果刚进去报如下错,原因是数据库还没完全启动,等待几秒钟,重新vsql即可。

    image.png

2.2.2、操作数据库

2.2.2.1、创建用户和schema

  • 创建用户

    create user test_user identified by 'test';
  • 创建schema

    -- 基于某用户创建schema create schema if not exists test_schema authorization test_user; -- 测试删除schema create schema if not exists test2_schema authorization test_user; drop schema test2_schema cascade;
  • 查询用户和schema

    SELECT u.user_name, s.schema_name FROM users u LEFT OUTER JOIN schemata s ON u.user_name = s.schema_owner;

2.2.2.2、序列

  • 查看所有序列

    select * from sequences;
  • 创建序列

    CREATE SEQUENCE test_seq MAXVALUE 2147483647 START 1;

    image.png

  • 使用序列

    -- 一个新创建还没有使用过的序列,必须首先执行NEXTVAL,然后才能执行CURRVAL。 SELECT NEXTVAL('test_seq'); SELECT CURRVAL('test_seq'); -- 创建一个id是序列的表 CREATE TABLE test_table(id INTEGER DEFAULT NEXTVAL('test_seq'), name varchar(16), age Integer ); -- insert语句使用 INSERT INTO test_table VALUES (NEXTVAL('test_seq'), 'Tom', 18); -- 默认序列 INSERT INTO test_table VALUES (default, 'Jack', 28);

    image.png

  • 删除序列

    DROP SEQUENCE test_seq;

2.2.2.3、操作表

  • 创建表

    CREATE TABLE test_table(id INTEGER DEFAULT NEXTVAL('test_seq'), name varchar(16), age Integer );
  • 修改表

    -- 新增字段 alter table test_table add column email varchar(8); -- 修改字段类型 ALTER TABLE test_table ALTER email SET DATA TYPE VARCHAR(32); ALTER TABLE test_table ALTER name SET not null; -- 修改字段名 ALTER TABLE test_table RENAME name TO name2; -- 删除字段 ALTER TABLE test_table DROP COLUMN email; -- 修改表名 ALTER TABLE test_table RENAME TO test_table2; -- 修改表所属用户 ALTER TABLE XXXX OWNER TO xxx;
  • 删除表

    DROP TABLE test_table;
  • 查看表

    -- 查看表的信息(所有者、创建时间等) SELECT * FROM TABLES WHERE TABLE_NAME = 'test_table'; -- 查看表结构 \d test_table;

    image.png

2.2.2.4、操作数据

  • INSERT INTO test_table VALUES (NEXTVAL('test_seq'), 'Jarry', 38);
  • DELETE FROM test_table WHERE name like '%Jar%';
  • UPDATE test_table SET age = 19 WHERE name = 'Tom';
  • SELECT * FROM test_table ORDER BY id;

    image.png

四、java连接测试

4.1、JDBC连接

public static void main(String[] args) { Properties prop = new Properties(); prop.put("user", "dbadmin"); prop.put("password", "vertica"); prop.put("loginTimeout", "35"); prop.put("binaryBatchInsert", "true"); try { Connection conn = DriverManager.getConnection( "jdbc:vertica://xxx:5433/VMart", prop); System.out.println("连接成功!"); conn.close(); } catch (SQLTransientConnectionException e) { System.out.print("Network connection issue: " + e.getMessage()); return; } catch (SQLInvalidAuthorizationSpecException e) { System.out.print("Could not log into database: " + e.getMessage()); return; } catch (SQLException e) { System.out.print(e.printStackTrace()); } }

4.2、SpringBoot项目

spring: datasource: url: jdbc:vertica://xxx:5433/VMart driver-class-name: com.vertica.jdbc.Driver username: xxx password: xxx hikari: login-timeout: 30 connection-timeout: 10000 idle-timeout: 600000 max-lifetime: 1800000

五、python连接测试

在使用Vertica时,python可能会用的比较多,因为Vertica ML 将机器学习与数据仓库相结合,这不仅使核心机器学习功能的访问民主化,而且大大简化了将这些模型投入生产的过程。可以使用 Vertica 的 Python 界面来执行整个机器学习周期——从数据准备到跨集群中多个节点的超大型数据集的模型部署。

5.1、安装依赖

编写脚本的时候我结合了pandas使用,没有安装pandas的装一下吧,非常必须得一个库。

pip3 install vertica_python pip3 install pandas

5.2、操作数据库脚本

根据我平时对别的数据库的操作方法,改编的脚本,亲测好使。

from vertica_python import connect import pandas as pd # 连接数据库 def con_db(): conn_info = {'host': 'ip', 'port': 5433, 'user': 'dbadmin', 'password': 'vertica', 'database': 'VMart', 'read_timeout': 600, 'unicode_error': 'strict', 'ssl': False} db = connect(**conn_info) cur = db.cursor() return db, cur # 查询数据 def read_db(sql): db, cur = con_db() try: df_db_data = pd.read_sql(sql, con=db) except Exception as e: print('从数据库获取数据失败:' + e) return df_db_data # 增删改数据 def update_db(update_sql): db, cur = con_db() try: cur.execute(update_sql) db.commit() except Exception as e: print('数据更新失败:' + e) db.rollback() cur.close() db.close() # 批量插入数据库 def many_insert_db(insert_sql, list_tuple): db, cur = con_db() try: cur.executemany(insert_sql, list_tuple) db.commit() except Exception as e: print(e) db.rollback() cur.close() db.close() if __name__ == '__main__': # 插入数据 insert_sql = "INSERT INTO test_table VALUES (1, 'Jarry', 38);" update_db(insert_sql) # 更新数据 update_sql = "UPDATE test_table SET age = 19 WHERE name = 'Jarry';" update_db(update_sql) # 查询数据 select_sql = 'SELECT * FROM test_table;' df_db_data = read_db(select_sql) print(df_db_data) # 删除数据 delete_sql = "DELETE FROM test_table WHERE name = 'Jarry';" update_db(delete_sql)

image.png




以上是入门了解教程,Vertica还有超多“黑科技”等待大家去探索......
最后修改时间:2021-12-15 22:20:11
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论