0
点赞
收藏
分享

微信扫一扫

如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive

Xin_So 2022-09-21 阅读 89

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。


Fayson的github:https://github.com/fayson/cdhproject


提示:代码块部分可以左右滑动查看噢


1.文档编写目的



在前面的文章Fayson介绍了《​​如何使用java代码通过JDBC连接Hive(附github源码)​​​》和《​​如何使用java代码通过JDBC连接Impala(附Github源码)​​》,本篇文章主要介绍在集群集成了OpenLDAP和启用了Sentry后使用Java通过JDBC访问的区别以及在beeline命令行如何访问。


  • 内容概述

1.环境准备

2.示例代码编写及说明

3.代码测试


  • 测试环境

1.CM和CDH版本为5.13.1

2.CentOS6.5

3.Impala JDBC驱动版本2.5.41.1061


  • 前置条件

1.集群未启用Kerberos

2.Impala已集成OpenLDAP

3.集群已启用Sentry


2.环境准备



1.下载Impala JDBC驱动包


https://downloads.cloudera.com/connectors/impala_jdbc_2.5.41.1061.zip

(可左右滑动)


如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive_hive


2.创建Java工程jdbcdemo


如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive_cloudera_02


创建工程时注意加入Hadoop的依赖包


<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.5</version>
</dependency>

(可左右滑动)


将下载的Impala驱动包添加到jdbcdemo工程lib目录下,并加载到环境变量


如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive_cloudera_03


3.示例访问代码



1.Impala示例代码


package com.cloudera.impalajdbc;
import com.cloudera.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* package: com.cloudera.impalajdbc
* describe: 访问已集成LDAP和Sentry的Impala示例
* creat_user: Fayson
* email: htechinfo@163.com
* creat_date: 2018/1/12
* creat_time: 下午3:39
* 公众号:Hadoop实操
*/
public class SentryLDAPDemo {
private static String JDBC_DRIVER = "com.cloudera.impala.jdbc41.Driver";
private static String CONNECTION_URL ="jdbc:impala://ip-172-31-5-190.fayson.com:21050/;AuthMech=3;UID=hive;PWD=123456";
static {
try {
Class.forName(JDBC_DRIVER);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println("通过JDBC连接非Kerberos环境下的Impala");
Connection connection = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
connection = DriverManager.getConnection(CONNECTION_URL);
ps = connection.prepareStatement("show databases");
rs = ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(1));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.disconnect(connection, rs, ps);
}
}
}

(可左右滑动)


由于集群已集成了OpenLDAP并启用了Sentry,所以在访问Impala时需要在JDBC URL连接串中指定AuthMech=3;UID=hive;PWD=123456参数。

AuthMech:认证类型,需要认证用户名和密码。

UID:在指定AuthMech为3时为必填字段

PWD:在指定AuthMech为3时为必填字段


2.Hive示例代码


package com.cloudera.hivejdbc;
import com.cloudera.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* package: com.cloudera.hivejdbc
* describe: 访问已集成LDAP和Sentry的Hive示例
* creat_user: Fayson
* email: htechinfo@163.com
* creat_date: 2018/1/12
* creat_time: 下午4:51
* 公众号:Hadoop实操
*/
public class SentryLDAPDemo {
private static String JDBC_DRIVER = "org.apache.hive.jdbc.HiveDriver";
private static String CONNECTION_URL ="jdbc:hive2://13.250.122.111:10000/";
private static String username = "";
private static String password = "";
static {
try {
Class.forName(JDBC_DRIVER);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println("访问已集成LDAP和Sentry的Hive示例");
Connection connection = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
connection = DriverManager.getConnection(CONNECTION_URL, username, password);
ps = connection.prepareStatement("select * from test_table");
rs = ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1) + "-------" + rs.getString(2));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.disconnect(connection, rs, ps);
}
}
}

(可左右滑动)


在访问集成OpenLDAP的HiveServer2时需要在获取Connection连接时需要输入LDAP的用户名和密码DriverManager.getConnection(URL,username,password)。


4.代码测试



1.Impala测试


在Intellij下直接运行代码,执行结果如下


如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive_cloudera_04


指定一个权限低的用户faysontest进行查询


如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive_cloudera_05


如果指定一个错误的用户或者密码


如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive_java_06


2.Hive测试


使用hive用户测试,hive用户拥有Hive库的所有权限,所以可以看到Hive下面所有的库。


如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive_hive_07


使用faysontest用户测试,faysontest用户只拥有Hive库下的default库操作权限,所以我们可以看到只能获取到default库信息


如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive_cloudera_08


输入错误的用户密码测试,是否能够正常访问


如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive_cloudera_09


5.Beeline命令行测试



关于Beeline命令行访问Impala,Fayson在前面的文章也介绍过《​​如何使用Beeline连接Impala​​》,这里就不再重复说明。


1.Beeline访问Hive


如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive_java_10


2.Beeline访问Impala


[root@ip-172-31-6-148 ~]# beeline -d "com.cloudera.impala.jdbc41.Driver" -u "jdbc:impala://ip-172-31-5-190.fayson.com:21050;AuthMech=3;UID=faysontest;PWD=123456" -n faysontest -p 123456

(可左右滑动)


如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive_hive_11


这里需要注意,在使用Beeline连接Impala的时候,除了JDBC URL中增加AuthMech=3;UID=faysontest;PWD=123456参数还需要在 Beeline 命令行增加–n faysontest –p 123456参数。


GitHub源码地址:

​​https://github.com/javaxsky/cdhproject/jdbcdemo​​



提示:代码块部分可以左右滑动查看噢


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。



推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive_java_12

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操


举报

相关推荐

0 条评论