配置开启Hive远程连接

这篇具有很好参考价值的文章主要介绍了配置开启Hive远程连接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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)

默认方式远程连接Hive

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

在IDEA的Database菜单栏如下操作,添加Hive连接
配置开启Hive远程连接,大数据,hive,hadoop,数据仓库,远程连接
填写Hive地址,以及Hadoop中使用的用户名

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

配置开启Hive远程连接,大数据,hive,hadoop,数据仓库,远程连接

点击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后再次连接测试

配置开启Hive远程连接,大数据,hive,hadoop,数据仓库,远程连接

自定义身份验证类远程连接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>  

配置开启Hive远程连接,大数据,hive,hadoop,数据仓库,远程连接

权限问题

在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:
配置开启Hive远程连接,大数据,hive,hadoop,数据仓库,远程连接

额外说明

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

另外,在较早版本的 Hive(2.x 及更早版本)中可以通过以下配置Hive远程连接的用户名与密码文章来源地址https://www.toymoban.com/news/detail-673307.html

<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>

到了这里,关于配置开启Hive远程连接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据--pyspark远程连接hive

    上一篇文章介绍了python连接hive的过程,通过地址+端口号访问到hive并对hive中的数据进行操作,这一篇文章介绍一下怎么通过windows本地pyspark+本地部署好的spark+远程虚拟机的hive,完成本地pyspark对hive的访问。 一.环境介绍 (1)关于pyspark 这个是之前就已经部署好的,本地安装了

    2023年04月20日
    浏览(20)
  • L2 数据仓库和Hive环境配置

    数据仓库DW主要是一个用于存储,分析,报告的数据系统。 数据仓库的目的是面向分析的集成化数据环境,分析结果为企业提供决策支持。 -DW不产生和消耗数据 结构数据:数据库中数据,CSV文件 直接导入DW 非结构数据:基本数据处理后导入DW 针对部门需求可以做不同DW,为

    2024年02月09日
    浏览(31)
  • 构建大数据环境:Hadoop、MySQL、Hive、Scala和Spark的安装与配置

    在当今的数据驱动时代,构建一个强大的大数据环境对于企业和组织来说至关重要。本文将介绍如何安装和配置Hadoop、MySQL、Hive、Scala和Spark,以搭建一个完整的大数据环境。 安装Hadoop 首先,从Apache Hadoop的官方网站下载所需的Hadoop发行版。选择适合你系统的二进制发行版,下

    2024年02月11日
    浏览(41)
  • Hive的安装与使用(内嵌模式derby+将Hive的元数据配置到MySQL)配置hive的远程访问,实现多客户端访问安全机制

    前期准备:因为hive是构建在hadoop集群之上的,所以要先进行hadoop集群的搭建 一、内嵌模式:使用hive内置的关系型数据库(derby)来存储元数据 1.下载并上传到虚拟机上,我是在/opt目录下 2.解压并且重命名 3.配置hive环境,个人习惯把配置文件放在my_enc.sh中 4. 初始化元数据库

    2024年02月06日
    浏览(33)
  • Hadoop——DataGrip连接MySQL|Hive

    1、下载 DataGrip下载:DataGrip: The Cross-Platform IDE for Databases SQL by JetBrains 2、破解 破解链接:https://www.cnblogs.com/xiaohuhu/p/17218430.html 3、启动环境 启动Hadoop:到Hadoop的sbin目录下右键管理员身份运行start-all.cmd,或命令运行: start-all.cmd 启动HiveServer2:以管理员身份打开cmd,目录切换

    2024年02月16日
    浏览(39)
  • 企业级大数据安全架构(十)DBeaver连接Hive的Kerberos认证配置

    1.配置本地hosts 因为Kerberos认证过程及集群服务中,很多是以主机名的形式进行访问的,所以工作机要设置hosts. 域名映射,我们通过部署CDH的集群的每一台机器都已经配置了host(文件为/etc/hosts),工作机也需要配置window的host文件,如果提示无法修改,一般是需要管理员权限的原

    2024年02月21日
    浏览(35)
  • hive 配置metastore hiveserver2服务开启

    hive-site.xml: hive-site.xml: hive-site.xml: 重启MetaStore服务: 启动hive服务: 启动后需要等待一段时间,jdbc才能连接上hive服务 使用beeline客户端验证是否可以连接:

    2024年02月03日
    浏览(31)
  • Hadoop之Hive的安装配置(详细步骤)

    配置前准备 下载apache-hive-2.1.1-bin.tar.gz安装包并上传到XShell 在XShell上解压安装包 输入解压命令: 配置  1、配置环境变量 在文件末尾增加如下内容: 使环境变量生效 进入 cd /home/ZQ/apache-hive-2.1.1-bin/conf/ 2、配置hive-env.sh  如果有hive-env.sh.template文件则输入下面的命令将 hive-

    2024年02月04日
    浏览(27)
  • Linux系统中如何开启和配置OpenGauss数据库的远程连接

    openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性. 结合cpolar 内网穿透工具,即可实现远程访问本地openGauss,实现远程访问,下面介绍从Linux安装到远程访问的方式

    2024年02月07日
    浏览(37)
  • 【hadoop——Hive的安装和配置】保姆式教学

      目录 一.Hive的安装和配置 1.Hive并不是hadoop自带的组件,因此我们需要去下载hive,此次课我们使用hive 1.2.1版本,下载地址为: 2.下载完成之后,安装包默认保存在下载文件夹中,解压安装包apache-hive-1.2.1-bin.tar.gz至路径 /usr/local,命令如下: 3.然后切换至目录 /usr/local,将文

    2023年04月22日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包