presto的hive connector連接以及JDBC訪問(包含kerberos方式)

參考資料: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/[email protected]
[email protected]
hive.metastore.client.keytab=/opt/beh/metadata/key/test001.ketab

hive.metastore.service.principal ---- 這個是在hive-site.xml中配置的hive服務端的priciple。這裏好的是,presto支持_HOST這種形式,很方便

[email protected]
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
[email protected]
hive.hdfs.presto.keytab=/opt/beh/metadata/key/test001.keytab

hive.hdfs.impersonation.enabled=true ------------------這個配置我先註釋了,具體還沒有搞懂,因爲我發現註釋了他對於我後續測試和驗證沒有影響,這個後續再說吧。

[email protected]
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/[email protected]
[email protected]
hive.metastore.client.keytab=/opt/beh/metadata/key/test001.ketab
hive.hdfs.authentication.type=KERBEROS
#hive.hdfs.impersonation.enabled=true
[email protected]
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/[email protected]
[email protected]
hive.metastore.client.keytab=/opt/beh/metadata/key/dev001.ketab
hive.hdfs.authentication.type=KERBEROS
#hive.hdfs.impersonation.enabled=true
[email protected]
hive.hdfs.presto.keytab=/opt/beh/metadata/key/dev001.ketab

然後使用jdbc測試,也是沒問題的,相當於用dev001 租戶創建和訪問表。
那麼這種情景就在後續提供了一種多租戶方案,相當於不同的租戶可以訪問不同的database下的表(一般多租戶方案就是一個租戶對應一個hive database),
相對來說就很方便了很多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章