当前位置: 代码网 > it编程>编程语言>Java > Java之JDBC连接Impala(Kerberos认证)指南

Java之JDBC连接Impala(Kerberos认证)指南

2026年08月15日 Java 我要评论
环境版本java8cdh6.3impala3.2hive3.0代码开发环境windows10两种连接方式说明hivejdbc比较方便一点,直接可以从maven远程仓库下载驱动,用hive的jdbc驱动

环境

版本
java8
cdh6.3
impala3.2
hive3.0
代码开发环境windows10

两种连接方式

说明
hivejdbc比较方便一点,直接可以从maven远程仓库下载驱动,用hive的jdbc驱动连接impala
impalajdbcimpala自身的jdbc驱动,但是在maven的远程仓库中没有,需要在官网下载

一、impala的jdbc驱动连接impala

1. 驱动下载

  • 连接impala的jdbc驱动在maven远程仓库中没有,需要到官网下载
  • 这个下载是需要先注册账号的哦!免费注册哒

点击去官网下载:https://www.cloudera.com/search.html?q=impala%20jdbc

2. 导入impala的jdbc包

下载解压后,打开文件夹,里面有两个名字类似的文件夹,选择一个即可

打开即可看到一个jar包,将其导入到我们的环境

* 我这里是导入到了idea中

3. 导入maven外部依赖

这里只需要导入一个hadoop的就可以

    <dependencies>
        <dependency>
            <groupid>org.apache.hadoop</groupid>
            <artifactid>hadoop-common</artifactid>
            <version>3.0.0</version>
        </dependency>
    </dependencies>

4. 主程序

import org.apache.hadoop.conf.configuration;
import org.apache.hadoop.security.usergroupinformation;
import java.security.privilegedaction;
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.resultset;
import java.sql.statement;

/**
 * @date: 2022/1/5
 * @author: bigbig-data
 * @description: 注: impala的jdbc驱动maven远程仓库中没有, 需要从别的地方下载: https://www.cloudera.com/search.html?q=impala%20jdbc
 */
public class iconnectimpalakerberos {
    // kerberos
    public static final string krb5_conf = "c:/windows/krb5.ini";//linux中叫 krb5.conf,改后缀即可
    public static final string principal = "normtest@hadoop.com";
    public static final string keytab = "c:/windows/normtest.keytab";
    // impala jdbc url 参数可参考官方文档   https://docs.cloudera.com/documentation/other/connectors/impala-jdbc/latest/cloudera-jdbc-driver-for-impala-install-guide.pdf
    public static string connectionurl = "jdbc:impala://host:21050/;authmech=1;krbrealm=hadoop.com;krbhostfqdn=host;krbservicename=impala";

    // 从官网下载的jar包
    public static string jdbcdrivername = "com.cloudera.impala.jdbc.driver";

    public static void main(string[] args) throws exception {

        system.setproperty("java.security.krb5.conf", krb5_conf);
        configuration conf = new configuration();
        conf.set("hadoop.security.authentication", "kerberos");
        usergroupinformation.setconfiguration(conf);
        usergroupinformation.loginuserfromkeytab(principal, keytab);
        system.out.println(">> 1. login from keytab " + keytab + " success");
        usergroupinformation loginuser = usergroupinformation.getloginuser();
        int result = loginuser.doas(new privilegedaction<integer>() {
            @override
            public integer run() {
                int result = 0;
                //加载驱动
                try {
                    class.forname(jdbcdrivername);
                } catch (classnotfoundexception e) {
                    e.printstacktrace();
                }
                system.out.println(">> 2. jdbcdriver load success");
                try (connection con = drivermanager.getconnection(connectionurl)) {
                    system.out.println(">> 3. login impala sussecs");
                    statement stmt = con.createstatement();
                    resultset rs = stmt.executequery("select count(1) from norm_demo");
                    while (rs.next()) {
                        result = rs.getint(1);
                    }
                    stmt.close();
                    con.close();
                } catch (exception e) {
                    e.printstacktrace();
                }
                return result;
            }
        });
        system.out.println("表行数: "+ result);
    }

}

二、hive的jdbc驱动连接impala

1. 导入maven外部依赖

    <dependencies>
        <dependency>
            <groupid>org.apache.hadoop</groupid>
            <artifactid>hadoop-common</artifactid>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupid>org.apache.hive</groupid>
            <artifactid>hive-jdbc</artifactid>
            <version>1.2.1</version>
        </dependency>
    </dependencies>

2. 主程序

import org.apache.hadoop.conf.configuration;
import org.apache.hadoop.security.usergroupinformation;
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.resultset;
import java.sql.statement;

public class hconnectimpalakerberos {
    // kerberos
    public static final string krb5_conf = "c:/windows/krb5.ini"; //linux中krb5.conf
    public static final string principal = "normtest@hadoop.com";
    public static final string keytab = "c:/windows/normtest.keytab";
    public static string connectionurl = "jdbc:hive2://host:21050/;principal=impala/host@hadoop.com";
    public static string jdbcdrivername = "org.apache.hive.jdbc.hivedriver";

    public static void main(string[] args) throws exception {
        system.setproperty("java.security.krb5.conf", krb5_conf);
        configuration conf = new configuration();
        conf.set("hadoop.security.authentication", "kerberos");
        usergroupinformation.setconfiguration(conf);
        usergroupinformation.loginuserfromkeytab(principal, keytab);
        system.out.println(">> 1. login from keytab " + keytab + " success");

        //加载驱动
        class.forname(jdbcdrivername);
        system.out.println(">> 2. jdbcdriver load success");
        try (connection con = drivermanager.getconnection(connectionurl)) {
            system.out.println(">> 3. login impala sussecs");
            statement stmt = con.createstatement();
            resultset rs = stmt.executequery("select count(1) from norm_demo");
            while (rs.next()) {
                system.out.println(rs.getint(1));
            }
        } catch (exception e) {
            e.printstacktrace();
        }
    }

}

常见问题

java.lang.illegalargumentexception: can’t get kerberos realm

一般是因为没有找到配置文件

  • 如果是windows,将 krb5.ini 和 xxx.keytab 需要放在 c:\windows\ 路径下,记得改后缀
  • 如果是linux,将 krb5.conf 和 xxx.keytab 需要放在 /etc/ 路径下

gss initiate failed

kerberos认证成功后,连接impala报这个错误

一般可能是因为url填写错误了,请仔细检查url中的参数等

  • 下图为官方文档示例:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com