hive远程访问密码设置

问题: hive安装以后使用dbeaver连接不需要用户名、密码。通过自定义"简单"验证的方式实现用户名密码的登录验证。

JAVA自定义开发:

1. 需要的MAVEN依赖: 

 <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!-- 导入hadoop依赖环境 -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-service</artifactId>
            <version>3.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>3.1.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
 

2. 实现代码:

import org.apache.commons.lang3.StringUtils;
import org.apache.hive.service.auth.PasswdAuthenticationProvider;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.conf.HiveConf;

import javax.security.sasl.AuthenticationException;
public class CustomPasswdAuthenticator implements PasswdAuthenticationProvider {
    private static final String HIVE_JDBC_PASSWD_AUTH_PREFIX="hive.jdbc_passwd.auth.%s";

    private Configuration conf=null;

    @Override
    public void Authenticate(String userName, String passwd) throws AuthenticationException {
        System.out.println("user: "+userName+" try login.");
        String passwdConf = getConf().get(String.format(HIVE_JDBC_PASSWD_AUTH_PREFIX, userName));
        if (StringUtils.isEmpty(passwdConf)) {
            String message = "找不到用户的ACL配置. user:"+userName;
            System.out.println(message);
            throw new AuthenticationException(message);
        }
        if(!passwd.equals(passwdConf)){
            String message = "用户名和密码不匹配. user:"+userName;
            throw new AuthenticationException(message);
        }
    }
    public Configuration getConf() {
        if(conf==null){
            this.conf=new Configuration(new HiveConf());
        }
        return conf;
    }

    public void setConf(Configuration conf) {
        this.conf=conf;
    }
}

3  将项目打包成jar,之后,将jar包放在hive根目录的lib,可能是:/opt/hive/conf/lib下。如果是CDH的安装方式,jar包放置的位置可以参考:

                                       /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hive/lib

4. 修改配置文件hive-site使自定义的用户名,密码生效

<!--自定义远程连接用户名和密码-->
<property>
<name>hive.server2.authentication</name>
<value>CUSTOM</value>  <!--默认为none,修改成CUSTOM-->
</property>
 
<!--指定解析jar包. value是自定义的实现类的全路径-->
<property>
<name>hive.server2.custom.authentication.class</name>
<value>aaa.bbb.CustomPasswdAuthenticator</value>
</property>  
 
<!--设置用户名和密码,如果有多个用户和密码,可以多写几个property  -->
<property>
 <name>hive.jdbc_passwd.auth.dev_username</name>  <!--用户名为最后一个: dev_username >
 <value>123456</value>  <!--密码-- 123456>
</property>  

转自: Java实现自定义Hive认证账户密码_java代码hive mrs安全认证-CSDN博客

要在Java远程访问Hive,你可以使用Hive JDBC驱动程序。下面是一个简单的示例代码,演示如何连接到远程Hive服务器并执行查询: ```java import java.sql.*; public class HiveRemoteAccess { public static void(String[] args) { // 配置远程Hive服务器的连接信息 String driverName = "org.apache.hive.jdbc.HiveDriver"; String connectionUrl = "jdbc:hive2://<hive_server>:<port>/<database>"; // 连接到Hive服务器 try { Class.forName(driverName); Connection con = DriverManager.getConnection(connectionUrl, "<username>", "<password>"); // 创建Statement对象 Statement stmt = con.createStatement(); // 执行Hive查询 String query = "SELECT * FROM <table>"; ResultSet rs = stmt.executeQuery(query); // 处理查询结果 while (rs.next()) { // 读取每行数据 // TODO: 处理数据逻辑 } // 关闭连接 rs.close(); stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 请确保将`<hive_server>`替换为实际的Hive服务器主机名或IP地址,`<port>`替换为Hive服务器的端口号,`<database>`替换为要连接的数据库名称,`<username>`和`<password>`替换为有效的用户名和密码。 代码中的TODO部分是处理查询结果的逻辑,你可以根据自己的需求进行处理。此示例使用的是Hive JDBC驱动程序,你需要将其添加到项目的依赖中。你可以从Apache Hive的官方网站或Maven仓库下载驱动程序。 希望这可以帮助到你实现Java远程访问Hive
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值