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(開啟Kerberos和sentry)
在開啟Kerberos認證之後,使用者需要進入登入Hive CLI或beeline需要用到keytab。為此,我們現在Kerberos資料庫中建立user1和user2兩個principal。 生成user1和user2的keytab kadmin.
工作總結之----java程式碼連線資料庫(SqlServer和oracle)
程式碼:import java.sql.*; public class JDBCUtil { private static final String DBDRIVERSQLSWRVER = "c
Hive/impala的kerberos和sentry相關問題
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獲取windows和linux的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