1. 程式人生 > >java程式碼連線Hive(開啟Kerberos和sentry)

java程式碼連線Hive(開啟Kerberos和sentry)

在開啟Kerberos認證之後,使用者需要進入登入Hive CLI或beeline需要用到keytab。為此,我們現在Kerberos資料庫中建立user1和user2兩個principal。
這裡寫圖片描述
生成user1和user2的keytab

kadmin.local:  xst -norandkey -k user1.keytab user1
Entry for principal user1 with kvno 1, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:user1.keytab.
Entry for principal user1 with
kvno 1, encryption type des3-cbc-sha1 added to keytab WRFILE:user1.keytab. Entry for principal user1 with kvno 1, encryption type arcfour-hmac added to keytab WRFILE:user1.keytab. Entry for principal user1 with kvno 1, encryption type camellia256-cts-cmac added to keytab WRFILE:user1.keytab. Entry for principal user1 with
kvno 1, encryption type camellia128-cts-cmac added to keytab WRFILE:user1.keytab. Entry for principal user1 with kvno 1, encryption type des-hmac-sha1 added to keytab WRFILE:user1.keytab. Entry for principal user1 with kvno 1, encryption type des-cbc-md5 added to keytab WRFILE:user1.keytab. kadmin.
local: xst -norandkey -k user2.keytab user2 Entry for principal user2 with kvno 1, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:user2.keytab. Entry for principal user2 with kvno 1, encryption type des3-cbc-sha1 added to keytab WRFILE:user2.keytab. Entry for principal user2 with kvno 1, encryption type arcfour-hmac added to keytab WRFILE:user2.keytab. Entry for principal user2 with kvno 1, encryption type camellia256-cts-cmac added to keytab WRFILE:user2.keytab. Entry for principal user2 with kvno 1, encryption type camellia128-cts-cmac added to keytab WRFILE:user2.keytab. Entry for principal user2 with kvno 1, encryption type des-hmac-sha1 added to keytab WRFILE:user2.keytab. Entry for principal user2 with kvno 1, encryption type des-cbc-md5 added to keytab WRFILE:user2.keytab.

由於已經在Hive CLI中建立了db1和db2兩個資料庫,其中在db1建立了table1,在db2中建立了table1和table2,並把db1的角色賦給了user1,db2的角色賦給了user2。這樣user1通過beeline只能看到db1和db1中的table1,同樣user2只能看到db2和db2中的table1和table2。
beeline通過下面語句連線

 beeline -u "jdbc:hive2://hxmaster:10000/;principal=hive/hxmaster@ANDREW.COM"

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
由於是從本地連線叢集,所以需要將生成的user1.keytab和user2.keytab以及/etc/krb5.conf拷貝到本地隨便一個目錄,這裡選擇”D:/keytab”這個目錄
這樣,我們就可以在本地IntelliJ環境下編寫java程式連線hive了,由於需要用到hive-jdbc和hadoop-client兩個jar包提供執行環境,我們把它們加入到build.sbt檔案中。

libraryDependencies += "org.apache.hive" % "hive-jdbc" % "1.1.0"

libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "2.6.5"

一切就緒,我們就可以通過以下程式碼查詢user1在hive中的表

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.security.UserGroupInformation;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class KBSimple {
    private static String JDBC_DRIVER = "org.apache.hive.jdbc.HiveDriver";
    private static String CONNECTION_URL ="jdbc:hive2://hxmaster:10000/;principal=hive/[email protected]";

    static {
        try {
            Class.forName(JDBC_DRIVER);

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception  {
        Class.forName(JDBC_DRIVER);

        //登入Kerberos賬號
        System.setProperty("java.security.krb5.conf", "D:\\keytab\\krb5.conf");

        Configuration configuration = new Configuration();
        configuration.set("hadoop.security.authentication" , "Kerberos" );
        UserGroupInformation. setConfiguration(configuration);
        UserGroupInformation.loginUserFromKeytab("[email protected]",
                "D:\\keytab\\user1.keytab");

        Connection connection = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
        try {
            connection = DriverManager.getConnection(CONNECTION_URL);
            ps = connection.prepareStatement("select * from db1.table1");
            rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getString(1));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

執行結果如下:
這裡寫圖片描述
同理,查詢一下user2中的table2,程式碼稍作修改
這裡寫圖片描述
執行結果如下:
這裡寫圖片描述

相關推薦

java程式碼連線Hive(開啟Kerberossentry)

在開啟Kerberos認證之後,使用者需要進入登入Hive CLI或beeline需要用到keytab。為此,我們現在Kerberos資料庫中建立user1和user2兩個principal。 生成user1和user2的keytab kadmin.

工作總結之----java程式碼連線資料庫(SqlServeroracle)

程式碼:import java.sql.*; public class JDBCUtil { private static final String DBDRIVERSQLSWRVER = "c

Hive/impala的kerberossentry相關問題

self application通過kerbeos認證的四種方式 Simple Hadoop Client 這種方法不包含任何的認證,他依賴於當前機器已經取得TGT,這對於服務或者需要長時間執行的程式不適用,因為TGT可能會過期。每個使用者在使用時都需

zookeeper - 通過java程式碼連線zookeeper(2)

首先建立一個Maven專案 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www

kettle-java程式碼執行hive相關ktr時報錯: database type with plugin id [HIVE2] couldn't be found!

kettle-java程式碼執行hive相關ktr時報錯: database type with plugin id [HIVE2] couldn't be found! 轉 2018年08月13日 16:47:30 lisery1993 閱讀數:305 1.在jav

java jdbc 連線hive-2.1.1

package com.linewell.hivetest; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement;

程式碼生成器——java程式碼自動生成MAVEN包類檔案

package cn.ps; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import com.baomidou.mybatisplus.core.exceptions.Mybat

HIVE的安裝配置、mysql的安裝、hive建立表、建立分割槽、修改表等內容、hive beeline使用、HIVE的四種資料匯入方式、使用Java程式碼執行hive的sql命令

1.上傳tar包 這裡我上傳的是apache-hive-1.2.1-bin.tar.gz 2.解壓 mkdir -p /home/tuzq/software/hive/ tar -zxvf apache-hive-1.2.1-bin.tar.gz  -C /home/

jdbc 中通過Java程式碼連線資料庫

示例程式碼 1.通過建立一個類  寫出連線資料庫的相關屬性 username,password,URL,Connection Statement . Resultset 物件 2.載入並註冊MySQL的驅動——在Java程式中,可以通過 “Class.forName(“

Java API連線Hive

首先導maven包: <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifac

java程式碼用eclipse開啟電腦程式,比如記事本

1.複製以下程式碼 package javaexercises; import java.io.IOException; public class open{ public static void main(String[] args) { try { R

Java程式碼獲取當前類名方法名

1、獲取類名 非靜態方法:this.getClass().getName(); 靜態方法:Thread.currentThread().getStackTrace()[1].getClassName(); private static void getString() {

IDEA使用java程式碼連線單節點Kafka連線失敗問題解決

2018-11-10 17:03:06,060] WARN [Producer clientId=producer-1] Connection to node -1 could not be estab

java程式碼連線資料庫

jdbc的知識點: JDBC(Java DataBase Connectivity,java資料庫連線)是一種用於執行SQL語句的Java API, 可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。 JDBC提供了一種基準,據此可以構建更高階的

kettle-java程式碼執行hive相關ktr時報錯: database type with plugin id [HIVE2] couldn't be found!

1.在java專案中執行hive相關的ktr: KettleEnvironment.init(); TransMeta transMeta = new TransMeta("C:\\Users\\lixiang\\Desktop\\hivetorizhi.kt

java程式碼實現資料的備份恢復

2、建立一個java專案並將jar包加入至構建路徑,如下圖: 3、測試程式碼如下: public class Test { MysqlManagerConfiguration config = new MysqlManagerConfiguration(); pu

java程式碼中建立mysql資料庫匯入資料

public class DatabaseCreatorMysql implements DatabaseCreator{ @Override public void createDatabaseAndInitialize(DriverConnectionProvi

Java程式碼中執行儲存過程函式

一:先看幾個概念: 首先,自己參考了幾篇文章,寫的很不錯,自己也借鑑一下,然後會在最後貼出自己在專案中使用到的儲存過程,已經實現過程,大家可以做個對比,實現方法不同。http://www.cnblog

用純Java程式碼根據IP獲取windowslinux的MAC實體地址

import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.regex.Matcher; import java.util.regex.Pattern; /** *  * 根據ip獲取mac地址 *  *

Hive:用Java程式碼通過JDBC連線Hiveserver

  寫在前面的話,學Hive這麼久了,發現目前國內還沒有一本完整的介紹Hive的書籍,而且網際網路上面的資料很亂,於是我決定寫一些關於《》序列文章,分享給大家。我會在接下來的時間整理有關Hive的資料,如果對Hive的東西感興趣,請關注本部落格。  我們可以通過CLI、Cli