Presto实现Hive Connector的配置实录

简介: 学习一个东西,个人认为最好的方式是:官网+源码+实践。Postgre官网:https://prestodb.io

集群准备

测试环境目前3台机:

ip

名称

角色

10.0.2.138

data-dev-staging-01

Coordinator

10.0.2.139

data-dev-staging-02

Worker

10.0.2.140

data-dev-staging-03

Worker


Presto介绍

跟名字一样,Presto就是急板的,快的。

作为一个开源分布式SQL查询引擎,Presto用于对各种大小的数据源进行交互式分析查询。其本身是为交互式分析而设计和编写的,其速度接近商业数据仓库的速度。

Presto允许在数据所在地进行数据查询,包括Hive、Cassandra、RDBMS,一个Presto查询可以组合来自多个数据源的数据,且允许跨组织进行分析。我们选择Presto主要也是因为基于Hive的数据分析相对较慢,所以直接使用Presto查询Hive数据是更加快捷的。

Facebook使用Presto对几个内部数据存储进行交互式查询,包括他们的300PB数据仓库。且超过1000名Facebook员工每天使用Presto运行3万多个查询,每天总共扫描超过1PB。

Presto对比

常和Presto对比的包括以下组件:Druid、Kylin、Impala等。

按查询类型划分,OLAP一般分为即席查询和固化查询。

即席查询:通过手写sql完成一些临时的数据分析需求,这类sql形式多变、逻辑复杂,对查询时间没有严格要求

固化查询:指的是一些固化下来的取数、看数需求,通过数据产品的形式提供给用户,从而提高数据分析和运营的效率。这类的sql固定模式,对响应时间有较高要求。

按架构实现划分,主流OLAP引擎主要有三种:

MPP架构系统(Presto/Impala/SparkSQL/Drill等)。这种架构主要还是从查询引擎入手,使用分布式查询引擎,而不是使用hive+mapreduce架构,提高查询效率。

搜索引擎架构的系统(es,solr等),在入库时将数据转换为倒排索引,采用Scatter-Gather计算模型,牺牲了灵活性换取很好的性能,在搜索类查询上能做到亚秒级响应。但是对于扫描聚合为主的查询,随着处理数据量的增加,响应时间也会退化到分钟级。

预计算系统(Druid/Kylin等)则在入库时对数据进行预聚合,进一步牺牲灵活性换取性能,以实现对超大数据集的秒级响应。

一般来说,需要从以下三个方面考虑框架选型:数据存储和构建、安装搭建、开发成本。

名称

优点

缺点

Impala

基于内存计算,速度快

完全依赖Hive,数据源支持非常少,对内存依赖非常大,稳定性也很差,分区超过1w,性能会严重下降

Presto

基于内存计算,且比Hive快一个数量级,可连多个数据源

联查表会产生大量临时数据,速度变慢,网络瓶颈也是大问题

Druid

索引按时间分片,查询也按时间线去路由索引,速度快。在高并发场景下,可保证海量数据查询分析的性能

配置和查询非常繁琐,且不支持SQL或类SQL接口。

Kylin

核心是Cube,查询时只扫描索引不访问原始数据,速度快

与hadoop生态结合太深,对集群依赖非常强;查询维度需提前确定,不适合即席查询。运维成本也高。

SparkSQL

Spark生态支持,可以实现Hive on Spark,内存计算

相对速度不是最快,适合完成批量任务


说到这里,就不得不说到ClickHouse,现在的问题是,ClickHouse学习成本极高,难度也极高。目前来说,ClickHouse可以解决现在大部分问题,但也是后续进行组件优化和升级之后的选择。

总结来说————

(1)从超大数据的查询效率来看:

Druid > Kylin > Presto > SparkSQL

(2)从支持的数据源种类来讲:

Presto > SparkSQL > Kylin > Druid

7b176e5d-a438-45a3-889c-16b9b0ba5e33.png



Presto安装

通过以下URL,下载本次安装对应版本的压缩包——————————

https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.241/presto-server-0.241.tar.gz

这个包,解压之后是这个样子的:


f5d83a22-e61a-4d50-966c-516104514dea.png
在etc目录下,需要自行创建配置文件如下:

12ae5c34-6600-4794-bf46-745c673379ec.png
config.properties(Coordinator):

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=20080
query.max-memory=10GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://data-dev-staging-01:20080

config.properties(Worker):

coordinator=false
http-server.http.port=20080
query.max-memory=10GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery.uri=http://data-dev-staging-01:20080

jvm.config(每个节点):

-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=150M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
-DHADOOP_USER_NAME=root

log.properties(每个节点):

com.facebook.presto=WARN

node.properties(每个节点):

node.environment=staging
node.id=staging-presto1    # 注意,不同节点的node.id需要唯一
node.data-dir=/data/presto

在etc/catalog/目录创建hive.properties(每个节点):

要使用hive数据源,所以必须配置hive.properties,需要注意的是:一般请不要直接指定-DHADOOP_USER_NAME属性,这个属性涉及到HDFS的ACL管理,当前环境下很容易报错。

connector.name=hive-hadoop2
hive.metastore.uri=thrift://data-dev-staging-01:9083,thrift://data-dev-staging-03:9083
hive.allow-drop-table=true
hive.config.resources=/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hadoop/etc/hadoop/core-site.xml,/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hadoop/etc/hadoop/hdfs-site.xml

修改launcher启动脚本,添加以下内容:

JAVA_HOME=/usr/java/jdk1.8.0_181PATH=$JAVA_HOME/bin:$PATH

通过指定命令进行服务启动(每个节点):

bin/launcher start --server-log-file=logs/server.log

通过cli直接启动Presto,需要提前下载官网给出的executable压缩包:


https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.241/presto-cli-0.241-executable.jar


并将其上传到Coordinator节点之后,改名:

mv presto-cli.0.241-executable.jar /opt/presto-server-0.241/bin/presto

启动Presto-cli:

bin/presto --server data-dev01:20080 --catalog hive --schema default

54f3ff00-2cc6-4105-b7d3-a486025cf5ee.png

最终可通过指定域名进行Presto的Web监控:

bea053f6-a0de-45ed-be1f-aafa73fe5a15.png
在此Web界面,可以直接获得每次查询结果。

安装过程,可以参考官方文档进行安装:

https://prestodb.io/docs/current/installation/deployment.html

多数据源的支持

Presto最大的优点就是,多数据源支持,这一个特点,在分布式数据分析引擎下其实是很占优势的。因为现在很多数据存放在不同的地点,如果每个数据源都做一套数据接入,本身也会占用很多的开发时间。

现在Presto提供的Connector如下:

19389247-83aa-41ca-a931-332621c2df37.png

注意:通过Presto,我们可以直接对Hive数据进行分析查询,甚至对ES数据也可以直接进行搜索查询,那么把查询分析的压力相当于移交到了Presto之后,就不再是像以前计划的比如数据分析直接放在Hive,通过Hive+MR的方式来分析,这个环节就很节省时间了,所以同步进行系统架构改进,会在Hive上面直接加一层Presto。


相关错误排查

最容易出现错误的点是配置问题

1、node.properties中针对节点名node.id需要配置得节点唯一

2、config.properties的配置中 discovery.uri最好是加映射,映射+port不行才考虑IP

3、jvm.config可以选择G1 GC,也可选择CMS GC

4、hive.properties的配置中hive.metastore.uri,需要和Hive本身的hive-site.xml中属性一致,此文件的所在位置:

5efe404c-253f-4d71-9506-1f2f7fdb594b.png



5、在配置的时候注意,config.properties中Coordinator节点一定不要忘记加discovery-server.enabled=true,Worker节点一定不要加discovery-server.enabled=true。

其他

【2021-06-18新增】

1、添加Presto权限控制:

vim access-control.properties
access-control.name=file
security.config-file=/opt/presto-server-0.241/etc/rules.json
rules.json:
{
  "catalogs": [
    {
      "user": "admin",
      "catalog": "(hive|system)",
      "allow": true
    },
    {
      "catalog": "hive",
      "allow": true
    },
    {
      "catalog": "system",
      "allow": false
    }
  ]
}

2、添加账户密码:

vim password-authenticator.properties
admin:big***2021
public:big***2021
staging:big***2021

3、添加hive安全控制:

vim catalog/hive-security.json
{
  "schemas": [
    {
      "user": "admin",
      "schema": ".*",
      "owner": true
    },
    {
      "user": "public",
      "schema":".*",
      "owner": false
    },
    {
      "user": "staging",
      "schema": ".*",
      "owner": false
    }
  ],
  "tables": [
    {
      "user": "admin",
      "privileges": ["SELECT", "OWNERSHIP"]
    },
    {
      "user": "public",
      "table": "sensors_db.*",
      "privileges": ["SELECT"]
    },
    {
      "user": "staging",
      "privileges": ["SELECT"]
    }
  ]
}
相关实践学习
使用CLup和iSCSI共享盘快速体验PolarDB for PostgtreSQL
在Clup云管控平台中快速体验创建与管理在iSCSI共享盘上的PolarDB for PostgtreSQL。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
1月前
|
SQL 数据库 HIVE
记录hive数据库远程访问配置问题
记录hive数据库远程访问配置问题
124 0
|
8月前
|
SQL 安全 Java
一篇文章彻底理解 HIVE 常见的三种 AUTHENTICATION 认证机制的配置与使用
一篇文章彻底理解 HIVE 常见的三种 AUTHENTICATION 认证机制的配置与使用
|
1月前
|
SQL 存储 分布式计算
Hive详解、配置、数据结构、Hive CLI
Hive详解、配置、数据结构、Hive CLI
51 0
Hive详解、配置、数据结构、Hive CLI
|
27天前
|
SQL 分布式计算 资源调度
一文看懂 Hive 优化大全(参数配置、语法优化)
以下是对提供的内容的摘要,总长度为240个字符: 在Hadoop集群中,服务器环境包括3台机器,分别运行不同的服务,如NodeManager、DataNode、NameNode等。集群组件版本包括jdk 1.8、mysql 5.7、hadoop 3.1.3和hive 3.1.2。文章讨论了YARN的配置优化,如`yarn.nodemanager.resource.memory-mb`、`yarn.nodemanager.vmem-check-enabled`和`hive.map.aggr`等参数,以及Map-Side聚合优化、Map Join和Bucket Map Join。
|
1月前
|
SQL 数据可视化 Apache
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
阿里云数据库 SelectDB 内核 Doris 的 SQL 方言转换工具, Doris SQL Convertor 致力于提供高效、稳定的 SQL 迁移解决方案,满足用户多样化的业务需求。兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移。
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
|
1月前
|
SQL HIVE
Hive【基础知识 04】【Hive 属性配置的三种方式及配置的优先级说明】
【4月更文挑战第7天】Hive【基础知识 04】【Hive 属性配置的三种方式及配置的优先级说明】
33 0
|
1月前
|
SQL Java HIVE
Flink依赖问题之connector hive依赖冲突如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
1月前
|
SQL 关系型数据库 MySQL
Flink CDC + Hudi + Hive + Presto构建实时数据湖最佳实践
Flink CDC + Hudi + Hive + Presto构建实时数据湖最佳实践
210 0
|
1月前
|
SQL 存储 关系型数据库
Presto【实践 01】Presto查询性能优化(数据存储+SQL优化+无缝替换Hive表+注意事项)及9个实践问题分享
Presto【实践 01】Presto查询性能优化(数据存储+SQL优化+无缝替换Hive表+注意事项)及9个实践问题分享
181 0
|
1月前
|
SQL Java Shell
Hive【非交互式使用、三种参数配置方式】
Hive【非交互式使用、三种参数配置方式】