前言:
最近在忙着整机器学习的可视化编辑界面,被前端差点搞死,后面会出一期介绍一下基于Antv G6如何开发可拖拽流程图。而今天要和大家分享的是如何采用JDBC进行Presto的接入。
Presto是什么?
由于本人也是刚接触了解 Presto,详细的介绍,推荐大家直接去撸官网,很强大,大数据必备!!! https://prestodb.io/docs/current/
参考:https://blog.csdn.net/cakexuexi/article/details/80820170Presto是一个分布式的查询引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。Presto是一个OLAP的工具,擅长对海量数据进行复杂的分析;但是对于OLTP场景,并不是Presto所擅长,所以不要把Presto当做数据库来使用.和大家熟悉的Mysql相比:首先Mysql是一个数据库,具有存储和计算分析能力,而Presto只有计算分析能力;其次数据量方面,Mysql作为传统单点关系型数据库不能满足当前大数据量的需求,于是有各种大数据的存储和分析工具产生,Presto就是这样一个可以满足大数据量分析计算需求的一个工具。
JDBC连接demo出于权限安全考虑,我司在进行Presto接入的时候,规定了一定要采用SSL认证,具体的认证方式可以参考官网,在这里就不在赘述。连接demo如下:
//pom依赖<dependency> <groupId>com.facebook.prestogroupId> <artifactId>presto-jdbcartifactId> <version>0.240.1version>dependency>
import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.Properties;public class LdapSSLSimple { private static String JDBC_DRIVER = "com.facebook.presto.jdbc.PrestoDriver"; private static String CONNECTION_URL ="jdbc:presto://cdh85-110:8443"; static { try { Class.forName(JDBC_DRIVER); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Connection connection = null; Properties properties = new Properties(); properties.setProperty("user", "bf_qd"); properties.setProperty("password", "7F8#0L$xviP4S3"); properties.setProperty("SSL", "true"); properties.setProperty("SSLKeyStorePath", "/Users/jiangyu/presto_keystore.jks"); properties.setProperty("SSLKeyStorePassword", "Abc123456"); try { connection = DriverManager.getConnection(CONNECTION_URL,properties); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("show CATALOGS"); //在这里为啥我加这么一个查询语句呢?因为很奇怪,实际测试连接的时候,不管你前面如何配置,这个connection都不会报错,这不是扯蛋么,所以加了这么一个通用的查询,来测试到底连没有连的上。 while (rs.next()) { System.out.println(rs.getString(1)); } } catch (Exception e) { e.printStackTrace(); } }}
常见错误:
The datetime zone id 'GMT+08:00' is not recognised
原因就在于你的pom引入的版本有问题,按官网最新的应该就没啥大问题。
Authentication failed: Access Denied: Invalid credentials
这个就说明你的用户名或者密码搞错了。
Error setting up SSL: /presto_keystore.jks (No such file or directory)
这个错误很明显,你的认证证书的路径加载错了,这个其实也是一个坑,虚拟机环境下部署的话,问题不是很大,你把文件固定在一个地方就行,假如是在容器中,你就得每次在打镜像的时候加上它了。
总结:
偷懒了一阵,继续跟上~加油!