首页 > 其他分享 >配置开启Hive远程连接

配置开启Hive远程连接

时间:2023-09-18 12:04:27浏览次数:49  
标签:java 开启 hive hadoop Hive apache org 远程

Hive远程连接

要配置Hive远程连接,首先确保HiveServer2已启动并监听指定的端口

hive/bin/hiveserver2

检查 HiveServer2是否正在运行

# lsof -i:10000
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    660 root  565u  IPv6  89917      0t0  TCP *:ndmp (LISTEN)

1.默认方式远程连接Hive

如果Hive 运行在与 Hadoop集成的环境中,HiveServer2可以与Hadoop中的用户验证机制集成,并且会使用已经验证的Hadoop用户凭据来进行身份验证和授权。

在IDEA的Database菜单栏如下操作,添加Hive连接 在这里插入图片描述 填写Hive地址,以及Hadoop中使用的用户名

注意:初次使用,配置过程会提示缺少JDBC驱动,按照提示下载即可。

在这里插入图片描述

点击Test Connection测试,发现连接Hive失败,同时hiveserver2后台日志提示:

 WARN  [HiveServer2-Handler-Pool: Thread-47] thrift.ThriftCLIService (ThriftCLIService.java:OpenSession(340)) - Error opening session:
org.apache.hive.service.cli.HiveSQLException: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate root
        at org.apache.hive.service.cli.session.SessionManager.createSession(SessionManager.java:434)
        at org.apache.hive.service.cli.session.SessionManager.openSession(SessionManager.java:373)
        at org.apache.hive.service.cli.CLIService.openSessionWithImpersonation(CLIService.java:195)
        at org.apache.hive.service.cli.thrift.ThriftCLIService.getSessionHandle(ThriftCLIService.java:472)
        at org.apache.hive.service.cli.thrift.ThriftCLIService.OpenSession(ThriftCLIService.java:322)
        at org.apache.hive.service.rpc.thrift.TCLIService$Processor$OpenSession.getResult(TCLIService.java:1497)
        at org.apache.hive.service.rpc.thrift.TCLIService$Processor$OpenSession.getResult(TCLIService.java:1482)
        at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
        at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
        at org.apache.hive.service.auth.TSetIpAddressProcessor.process(TSetIpAddressProcessor.java:56)
        at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:286)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:750)

解决方案:

Hadoop/etc/hadoop/core-site.xml文件中添加如下配置,然后分发到各个节点

注意:root:指Hadoop组件在运行时使用的用户名,根据自身配置修改

    </property>
        <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>

重启Hadoop、hiveserver2后再次连接测试

在这里插入图片描述

2.自定义身份验证类远程连接Hive

在Hive 中,默认情况下,没有启用用户验证机制,即hive默认的用户名和密码都是空。为了安全保证,可以开启用户、密码登录Hive,做法是自定义一个身份验证类

创建一个Java项目,并确保项目中包含所需的依赖项,如Hive的JDBC驱动程序

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

注意:应该使用与服务器使用的Hive JDBC版本保持一致。

创建一个实现 PasswdAuthenticationProvider 接口的类。

package cn.ybzy.demo;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hive.service.auth.PasswdAuthenticationProvider;
import org.slf4j.Logger;

import javax.security.sasl.AuthenticationException;

public class MyHiveCustomPasswdAuthenticator implements PasswdAuthenticationProvider {

    private Logger LOG = org.slf4j.LoggerFactory.getLogger(MyHiveCustomPasswdAuthenticator.class);

    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 {
        LOG.info("Hive 用户: " + userName + " 尝试登录");
        String passwdConf = getConf().get(String.format(HIVE_JDBC_PASSWD_AUTH_PREFIX, userName));
        if (passwdConf == null) {
            String message = "找不到对应用户的密码配置, 用户:" + userName;
            LOG.info(message);
            throw new AuthenticationException(message);
        }
        if (!passwd.equals(passwdConf)) {
            String message = "用户名和密码不匹配, 用户:" + 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;
    }
}

将该Java项目打包,同时上传到Hive的lib目录

mv hive/MyHiveCustomPasswdAuthenticator.jar hive/lib/

修改hive-site.xml,进行配置

<!-- 使用自定义远程连接用户名和密码 -->
<property>
	<name>hive.server2.authentication</name>
	<value>CUSTOM</value><!--默认为none,修改成CUSTOM-->
</property>
<!-- 指定解析类 -->
<property>
	<name>hive.server2.custom.authentication.class</name>
	<value>cn.ybzy.demo.MyHiveCustomPasswdAuthenticator</value>
</property>  
<!--设置用户名和密码  name属性中root是用户名 value属性中时密码-->
<property>
	<name>hive.jdbc_passwd.auth.hive</name>
	<value>hive123</value>
</property>  

在这里插入图片描述

3.权限问题

在IDEA中远程连接Hive,并操作时,可能会出现如下异常:

ERROR --- [           HiveServer2-Background-Pool: Thread-440]  org.apache.hadoop.hive.metastore.utils.MetaStoreUtils                           (line:  166)  :  Got exception: org.apache.hadoop.security.AccessControlException Permission denied: user=hive, access=WRITE, inode="/hive/warehouse":root:supergroup:drwxr-xr-x
        at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:399)
        at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:255)
        at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:193)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1855)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1839)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkAncestorAccess(FSDirectory.java:1798)
        at org.apache.hadoop.hdfs.server.namenode.FSDirMkdirOp.mkdirs(FSDirMkdirOp.java:59)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:3175)
        at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:1145)
        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.mkdirs(ClientNamenodeProtocolServerSideTranslatorPB.java:714)
        at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:527)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1036)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:1000)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:928)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1729)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2916)

原因:

在操作Hive时,其会去操作HDFS,而登录Hive的用户没有权限操作

解决方案:

要确保Hive用户(例如 hive)能够操作HDFS。

由于Hive配置了metastore数据存储位置,例如/hive/warehouse,因此,需要对该目录授予相应权限

hadoop fs -chown hive:hive /hive/warehouse

在IDEA中创建一个数据库:

create database demo;

查看HDFS: 在这里插入图片描述

4.额外说明

除了上述方式外,Hive还提供了Kerberos 或 LDAP高级认证方式,有点复杂,暂且不讨论。

另外,在较早版本的 Hive(2.x 及更早版本)中可以通过以下配置Hive远程连接的用户名与密码

<property>
  <name>hive.server2.authentication</name>
  <value>PASSWORD</value>
</property>
<property>
  <name>hive.server2.authentication.user.name</name>
  <value>hive</value>
</property>
<property>
  <name>hive.server2.authentication.user.password</name>
  <value>hive123</value>
</property>
    <property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
</property>
<property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value>
</property>
<property>
     <name>hive.server2.thrift.bind.host</name>
    <value>node01</value>
</property>

标签:java,开启,hive,hadoop,Hive,apache,org,远程
From: https://blog.51cto.com/chencoding/7508725

相关文章

  • 最新医疗界AI资讯,远程评估帕金森病症状的AI工具问世
    原创|文BFT机器人1、AI模型快速评估,自动生成评估报告罗切斯特大学研究人员开发的一种人工智能工具可以帮助帕金森病患者在几分钟内远程评估其症状的严重程度。《npj数字医学》杂志上的一项研究介绍了这种新工具,它能让用户在网络摄像头前通过敲击手指10次,以0-4的等级来评估运动性......
  • 触发器中调用远程链接的数据库的配置方法
    一般我们要保证两台机器可以互通。并且两台机器上都安装并启动了msdtc.当然不是安装并启动了msdtc就可以的。我们可能还要做一些配置。1、运行regedt32,浏览至HKEY_LOCAL_MACHINEoftware/Microsoft/MSDTC。添加一个DWORD值TurnOffRpcSecurity,值数据为1。2、重启MSDTC服务。3......
  • destoon关于archiver归档的性能优化
    今天在处理一个项目时候发现archiver单个模块归档超过百万数据,打开速度就特慢,所以打开archiver下index.php文件进行分析,发现有句sql作怪,查询需要三四分钟,所以要修改这个。$result=$db->query("SELECTtitle,linkurl,addtimeFROM{$table}WHERE$conditionORDERBYaddtimeDES......
  • destoon关于archiver归档的性能优化
     今天在处理一个项目时候发现archiver单个模块归档超过百万数据,打开速度就特慢,所以打开archiver下index.php文件进行分析,发现有句sql作怪$result=$db->query("SELECTtitle,linkurl,addtimeFROM{$table}WHERE$conditionORDERBYaddtimeDESCLIMIT$offset,$pagesize"......
  • springboot中配置类型转换,设置开启矩阵变量
    2023-09-17packagecom.hh.springboot05.config;importcom.hh.springboot05.bean.Pet;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.core.convert.converter.Conver......
  • destoon自定义一个archiver内容文档
     在archiver目录建立以下代码:<?phpdefine('DT_REWRITE',true);require'../common.inc.php';$EXT['archiver_enable']ordheader(DT_PATH);//$DT_BOTordheader(DT_PATH);$N=$M=$T=array();$midor$mid=5;$vmid=$list=0;......
  • Linux学习之CentOS(三十一)--Linux远程管理之SSH、VNC
    您可以通过点击右下角的按钮来对文章内容作出评价,也可以通过左下方的关注按钮来关注我的博客的最新动态。如果文章内容对您有帮助,不要忘记点击右下角的推荐按钮来支持一下哦如果您对文章内容有任何疑问,可以通过评论或发邮件的方式联系我:[email protected]......
  • goland dlv在远程linux里运行代码开发,并debug调适
    一、配置好ssh自动同步代码参考下面连接:https://www.cnblogs.com/haima/p/13257524.html二、配置devbug监听运行GORemote填写配置linux上运行监听服务如:上图有两种方式直接运行代码并监听dlvdebug--headless--listen=:12345--api-version=2--accept-multiclie......
  • Hive的分区
    在下面的代码中,我们创建了名为emp的分区表,使用关键字partitionedby:createtableemp(namestring,ageint)partitionedby(provicestring,citystring);在这里,用partitionedby指定创建的分区,多个分区意味着多级目录。在Hive中,可以使用多个列对表进行分......
  • 华为云OBS配置-远程附件
    使用此服务前请先注册并绑定华为云官方合作伙伴账号,享受VIP服务和优惠价格(新购和续费都有专属折扣),更能领取大额代金券!  立即注册/已有账号绑定=>>! 如果不能绑定,请联系售前商务或工单联系售后处理!  创建华为云存储OBS步骤: 一、进入OBS控制台:https://storage.huawei......