presto的hive connector连接以及JDBC访问(包含kerberos方式)

2023-11-07

参考资料:https://prestodb.io/docs/current/connector/hive.html

前言

presto支持hive connector,并支持连接多个hive connector,还支持kerberos相关

配置

普通配置

我们在etc目录下创建catalog目录,然后再下面创建hive.propertoes 文件,代表着我们创建了一个hive的catalog,hive.propertoes的配置如下

connector.name=hive-hadoop2
hive.metastore.uri=thrift://example.net:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml

connector.name — 这个是固定的,只要是hive的connector名字就为hive-hadoop2
然后再配置元数据服务的URL 和hadoop的core-site.xml 和 hdfs-site.xml到每一个presto节点

最后需要注意的是
由于没有kerberos认证,我们登陆hive用的用户名将会是启动presto进程的用户。如过我们想修改此,我们可以在jvm.config中添加

-DHADOOP_USER_NAME=hadoop

来将访问hive的用户改为hadoop用户

kerberos配置

kerberos相关的配置参考下面这篇文章
https://prestodb.io/docs/current/connector/hive-security.html

其实相当于多了几个配置,对于hive的配置有了解基本上看了配置就懂得了相关的含义。

  • 1、krb5.conf
    如果krb5.conf在/etc目录下面,那么这个可以不需要配置,如果不在,那么需要在jvm.config中显示的配置如下所示

-Djava.security.krb5.conf=/example/path/krb5.conf

  • 2、应对hive metatstore 相关的kerberos配置
hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=ms/_HOST@DEVTEST.BONC
hive.metastore.client.principal=test001@DEVTEST.BONC
hive.metastore.client.keytab=/opt/beh/metadata/key/test001.ketab

hive.metastore.service.principal ---- 这个是在hive-site.xml中配置的hive服务端的priciple。这里好的是,presto支持_HOST这种形式,很方便

hive.metastore.client.principal=test001@DEVTEST.BONC
hive.metastore.client.keytab=/opt/beh/metadata/key/test001.keytab
这两个就是当前presto用户的kerberos 相关信息了

  • 3、hdfs相关的kerberos验证
hive.hdfs.authentication.type=KERBEROS
#hive.hdfs.impersonation.enabled=true
hive.hdfs.presto.principal=test001@DEVTEST.BONC
hive.hdfs.presto.keytab=/opt/beh/metadata/key/test001.keytab

hive.hdfs.impersonation.enabled=true ------------------这个配置我先注释了,具体还没有搞懂,因为我发现注释了他对于我后续测试和验证没有影响,这个后续再说吧。

hive.hdfs.presto.principal=test001@DEVTEST.BONC
hive.hdfs.presto.keytab=/opt/beh/metadata/key/test001.keytab
这两个就是当前presto用户的kerberos 相关信息了

最后说一句,keytab文件必须在每个节点分发,在相同的位置,而且有正确的权限。

最终我在hive.properties里面的配置如下

connector.name=hive-hadoop2
hive.metastore.uri=thrift://hadooptd3.novalocal:9083
hive.config.resources=/opt/beh/core/hadoop/etc/hadoop/hdfs-site.xml
hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=ms/_HOST@DEVTEST.BONC
hive.metastore.client.principal=test001@DEVTEST.BONC
hive.metastore.client.keytab=/opt/beh/metadata/key/test001.ketab
hive.hdfs.authentication.type=KERBEROS
#hive.hdfs.impersonation.enabled=true
hive.hdfs.presto.principal=test001@DEVTEST.BONC
hive.hdfs.presto.keytab=/opt/beh/metadata/key/test001.ketab

JDBC访问

注意

不管是普通的presto的hive connector还是kerberos的hive connector,我们使用cli 和jdbc的方式是一样的,jdbc访问的URL方式也是一样的(推测应该是kerberos已经在配置文件里面配置了,所以无需在jdbc方式使用)

JDBC方式

pom配置

        <dependency>
            <groupId>com.facebook.presto</groupId>
            <artifactId>presto-jdbc</artifactId>
            <version>0.237</version>
        </dependency>

没啥好说的 直接上样例代码吧
参考文档:https://prestodb.io/docs/current/installation/jdbc.html

public class PrestoJdbc {

    private static String CONNECTION_URL = "jdbc:presto://****:16001/test001/test";

    public static void main(String[] args) throws SQLException{

        Connection connection = DriverManager.getConnection(CONNECTION_URL, "hadoop", "");

        ResultSet resultSet = connection.prepareStatement("select * from deoiuytdemo").executeQuery();

        while (resultSet.next()) {
            String str = resultSet.getString(1);
            System.out.println(str);
        }

        connection.close();
    }

}

多租户方案探究

看官网说可以连接多个hive源,那么这么来说肯定也可以以不同的租户连接同一个hive源了。
然后我在上述test001租户下,又创建了dev001.properties 相当于创建了一个dev001的catalog

connector.name=hive-hadoop2
hive.metastore.uri=thrift://hadooptd3.novalocal:9083
hive.config.resources=/opt/beh/core/hadoop/etc/hadoop/hdfs-site.xml
hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=ms/_HOST@DEVTEST.BONC
hive.metastore.client.principal=dev001@DEVTEST.BONC
hive.metastore.client.keytab=/opt/beh/metadata/key/dev001.ketab
hive.hdfs.authentication.type=KERBEROS
#hive.hdfs.impersonation.enabled=true
hive.hdfs.presto.principal=dev001@DEVTEST.BONC
hive.hdfs.presto.keytab=/opt/beh/metadata/key/dev001.ketab

然后使用jdbc测试,也是没问题的,相当于用dev001 租户创建和访问表。
那么这种情景就在后续提供了一种多租户方案,相当于不同的租户可以访问不同的database下的表(一般多租户方案就是一个租户对应一个hive database),
相对来说就很方便了很多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

presto的hive connector连接以及JDBC访问(包含kerberos方式) 的相关文章

  • Presto SQl中使用date_format()和date_parse()遇到的问题

    昨天在Presto中查数据 查出来数据不对 后来发现是我使用date parse 函数有问题 我需要查2018年12月31号到2019年1月6号之间的数据 我使用的时间过滤方式是 and behavior datetime gt 61 da
  • presto中查询行列转换 与 hive 对比

    如果有一种字段a b为下面这种 event id 1 3 4 6 user id 2 8 9 7 希望变成 event id 1 event id 3 event id 4 event id 6 user id 2 user id 8 us
  • 大数据技术之-presto

    一 Presto简介 1 Presto概念 Presto是一个开源的分布式SQL查询引擎 适用于交互式分析查询 数据量支持GB到PB字节 Presto的设计和编写完全是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的
  • 大数据的分布式SQL查询引擎 -- Presto的详细使用

    Presto Distributed SQL Query Engine for Big Data 官网 项目源码 官方文档 目录 1 Presto 概述 2 概念 2 1 服务进程 2 2 数据源 2 3 查询执行模型 3 整体架构 4 P
  • presto函数和hive函数的使用

    最近做大数据分析工作比较多 主要与presto和hive查询引擎打交道 presto在实时计算上真的很快 个人感觉比hive要快10倍吧 但是hive在面向海量数据的分析计算上也是很牛逼的 这里不得不记录下两者在使用上的一些区别 粘贴一段二
  • 使用presto+airpal+hive打造即席查询工具

    0X01 前言 即席查询怎么做 怎么选型 这次用的是presto来做尝试 缘起 公司是Impala的深度用户 我主要负责Impala的各方面的工作 最近因为一些特殊原因需要对现有的体系进行一些调整 需要做出来即席查询的组件 在spark s
  • AWS Athena:删除日期范围之间的分区

    我有一个 athena 表 其基于日期的分区如下 20190218 我想删除去年创建的所有分区 我尝试了以下查询 但没有成功 ALTER TABLE tblname DROP PARTITION partition1 lt 20181231
  • AWS Athena (Presto) OFFSET 支持

    我想知道 AWS Athena 是否支持 OFFSET 对于 mysql 以下查询正在运行 但在 athena 中它给了我错误 任何例子都会有帮助 从员工中选择 其中 empSal gt 3000 LIMIT 300 OFFSET 20 A
  • AWS Athena 上的 OFFSET

    我想在 AWS Athena 上运行查询LIMIT and an OFFSET条款 我认为前者受到支持 而后者不是 有没有办法使用其他方法来模拟此功能 Using OFFSET分页效率非常低 特别是对于像 Presto 这样经常需要执行全表
  • SQL Presto:不支持相关子查询

    考虑表x id val 1 100 3 300 和表y id 1 2 3 对于每一行y我想要val from x哪里的id从 y 等于或最接近之前id from x像那样 id val 1 100 2 100 3 300 我试图找到与相关子
  • 根据前面的单词从段落中提取数值

    我正在处理列中的一些大文本字段 经过一些清理后 我得到如下所示的内容 truth val 5 xerb Scale 2 perb Scale 1 我想提取数字 2 我试图匹配字符串 xerb Scale 然后提取 2 我尝试捕获包含 2 的
  • 在两个日期之间添加行 Presto

    我有一个包含 3 列的表 start end 和 emp num 我想生成一个新表 其中包含每个员工这些日期之间的所有日期 需要使用Presto 我参考了这个链接 在 Presto 中将日期插入到开始日期和结束日期之间的表中 https s
  • 如何在 athena 上的字符串数据类型上提取月份名称

    SELECT sales invoice date MONTH DATE TRUNC month CASE WHEN TRIM sales invoice date THEN DATE 1999 12 31 ELSE DATE PARSE
  • Athena 无法使用 OpenCSVSerde 解析日期

    我在 S3 上有一个非常简单的 csv 文件 i d f s 1 2018 01 01 1 001 something great 2 2018 01 02 2 002 something terrible 3 2018 01 03 3 0
  • 如何在 Presto 中将时间戳转换为日期?

    我喜欢将时间戳列转换为日期和时间格式 我应该如何从 presto 编写查询 我的时间戳是UTC时间 非常感谢 Timestamp format 1506929478589 After query convert it looks like
  • 如何从 AWS 中的 Athena 获取结果格式 JSON?

    我想从 AWS 中的 Athena 获取结果值格式 JSON 当我从 Athena 中选择时 结果格式如下 test value report 1 test report 2 normal report 3 hard 有没有办法获得 JSO
  • 生成最小和最大日期之间的日期范围 Athena presto SQL 序列错误

    我正在尝试使用 Presto SQL Athena 生成一系列日期unnest and sequence类似的东西generate series在 postgres 中 我的桌子看起来像 job name run date A 2021 0
  • 在 Presto 中将 array(double) 转换为 varchar

    我正在尝试将 Array double 转换为 Presto 中的 varchar 样本值 99 0 98 0 99 0 95 0 99 0 88 0 90 0 79 0 90 0 56 0 90 0 90 0 92 0 90 0 93 0
  • AWS Athena 扁平化来自嵌套 JSON 源的数据

    我想从 Athena 中的嵌套 JSON 创建一个表 描述的解决方案here http docs aws amazon com athena latest ug json html使用 hive Openx JsonSerDe 等工具尝试在
  • SQL:使用相等的键和最近的键进行连接(类似于 Pandas 的合并)

    例如 我有2个这样的表 对于表 1 中的每一行 我想获取该行 same customer id and nearest date 就我而言 table2 date lt table1 date 结果应该是这样的 我怎样才能在 SQL 中做到

随机推荐