`
zhangxiong0301
  • 浏览: 360787 次
社区版块
存档分类
最新评论

HIVESERVER2问题解决

    博客分类:
  • HIVE
 
阅读更多

 

hiveserver2是hiveserver的高级版本,在安全和并发上有所增强。hiveserver2相关的基础参数有:

hive.server2.transport.mode – 默认值为binary(TCP),可选值HTTP,0.13版本后开始支持。  
hive.server2.thrift.http.port– HTTP的监听端口,默认值为10001。
hive.server2.thrift.min.worker.threads– 最小工作线程数,默认为5。
hive.server2.thrift.max.worker.threads – 最大工作线程数,默认为500。  
hive.server2.thrift.port– TCP 的监听端口,默认为10000。  
hive.server2.thrift.bind.host– TCP绑定的主机,默认为localhost。
hive.server2.enable.doAs:设置为false,查询将以运行hiveserver2进程的用户运行,否则以提交查询的用户执行查询
hive.server2.long.polling.timeout:Time in milliseconds that HiveServer2 will wait, before responding to asynchronous calls that use long polling,默认值5000L。
hive.server2.authentication:HIVESERVER2的安全验证机制,有4中种选项:
      NONE: no authentication check
       LDAP: LDAP/AD based authentication
       KERBEROS: Kerberos/GSSAPI authentication
       CUSTOM: Custom authentication provider
               (Use with property hive.server2.custom.authentication.class)
       PAM: Pluggable authentication module.
hive.server2.custom.authentication.class:当采用CUSTOM验证时,指定自定义的验证类。

 

 

配置好参数就可以启动hiveserver2服务:

 

${HIVE_HOME}/bin/hive --service hiveserver2

或者 

${HIVE_HOME}/bin/hiveserver2

 

 

启动后使用JDBC连接,简单java代码如下:

 

  1. public class HiveJdbcClient {  
  2.   
  3.     private static String driverName = "org.apache.hive.jdbc.HiveDriver";  
  4.     
  5.     public boolean run() {  
  6.   
  7.         try {  
  8.             Class.forName(driverName);  
  9.             Connection con = null;  
  10.             con = DriverManager.getConnection(  
  11.                     "jdbc:hive2://192.168.30.42:10000/hivedb""""");  
  12.             Statement stmt = con.createStatement();  
  13.             ResultSet res = null;  
  14.   
  15.             String sql = "select count(*) from test_data";  
  16.   
  17.             System.out.println("Running: " + sql);  
  18.             res = stmt.executeQuery(sql);  
  19.             System.out.println("ok");  
  20.             while (res.next()) {  
  21.                 System.out.println(res.getString(1));  
  22.   
  23.             }  
  24.             return true;  
  25.         } catch (Exception e) {  
  26.             e.printStackTrace();  
  27.             System.out.println("error");  
  28.             return false;  
  29.         }  
  30.   
  31.     }  
  32. }

 

结果报错如下:

 

java.sql.SQLException: Invalid time unit l
        at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:120)
        at org.apache.hive.jdbc.Utils.verifySuccessWithInfo(Utils.java:108)
        at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:265)
        at com.dazen.HiveJDBC.exeQuery(HiveJDBC.java:21)
        at com.dazen.HiveJDBC.main(HiveJDBC.java:33)

 

 

解决办法:

 

修改配置参数:
hive.server2.long.polling.timeout 的默认值 5000L为5000,通过看hive源代码发现,hive这个参数后面的字母代表的是时间单位,如合法的有d,m,s,ms,us等等。
在hive-common工程里的Hiveconf类中有如下代码:

  public static TimeUnit unitFor(String unit, TimeUnit defaultUnit) {
    unit = unit.trim().toLowerCase();
    if (unit.isEmpty()) {
      if (defaultUnit == null) {
        throw new IllegalArgumentException("Time unit is not specified");
      }
      return defaultUnit;
    } else if (unit.equals("d") || unit.startsWith("day")) {
      return TimeUnit.DAYS;
    } else if (unit.equals("h") || unit.startsWith("hour")) {
      return TimeUnit.HOURS;
    } else if (unit.equals("m") || unit.startsWith("min")) {
      return TimeUnit.MINUTES;
    } else if (unit.equals("s") || unit.startsWith("sec")) {
      return TimeUnit.SECONDS;
    } else if (unit.equals("ms") || unit.startsWith("msec")) {
      return TimeUnit.MILLISECONDS;
    } else if (unit.equals("us") || unit.startsWith("usec")) {
      return TimeUnit.MICROSECONDS;
    } else if (unit.equals("ns") || unit.startsWith("nsec")) {
      return TimeUnit.NANOSECONDS;
    }
    throw new IllegalArgumentException("Invalid time unit " + unit);
  }

 

 

到此为止,就可以免用户账号登陆了(hive.server2.enable.doAs=false,为true的话则需要设置用户名为hadoop管理员账号密码为空),即在上述JDBC代码中用户密码两个参数为"".

 

下面配置安全策略,可以采用自定义方式,步骤为:

1. hive.server2.authentication=CUSTOM,

2. 自己需要实现一个认证的类如:com.qiku.custom.auth.HiveServer2Auth,将               class文件打成jar包放入${HIVE_HOME}/lib下

3.hive.server2.custom.authentication.class=com.qiku.custom.auth.HiveServer2Auth

4.hive.server2.enable.doAs=false。注意:如果这个参数为true的话,那我们只能用hadoop系统账号做用户名,因为此时hive将以自定义的用户名去访问hadoop文件,会遇到无访问权限的问题;设置为false,则我们的自定义的用户只做验证用,不做访问hdfs的账号。

5.按照自己的代码逻辑,在hive-site.xml中添加自定义的配置项。根据我的实现(代码后面贴出)则配置为:hive.server2.auth.hadoop=wyx,其中hadoop为用户名。

6.最后在jdbc代码中指定用户名和密码就可以。

 

具体自定义认证的代码很简单,只需要实现:一个认证接口PasswdAuthenticationProvider以完成认证,以及Configurable接口以让hive能将所有的配置参数(比如hive-site.xml)提供给我们的代码。

代码如下:

package com.qiku.custom.auth;

import javax.security.sasl.AuthenticationException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configurable;
import org.apache.hadoop.conf.Configuration;
import org.apache.hive.service.auth.PasswdAuthenticationProvider;

public class HiveServer2Auth implements PasswdAuthenticationProvider,Configurable{

	private static final Log LOG = LogFactory.getLog(  HiveServer2Auth.class );
	private Configuration conf = null;
	private static final String HIVE_SERVER2_AUTH_PREFIX="hive.server2.auth.%s";
	
	@Override
	public void Authenticate(String user, String passwd)throws AuthenticationException {
		
		String pass = getConf().get( String.format( HIVE_SERVER2_AUTH_PREFIX , user) );
		
		if( pass == null || !pass.equals( passwd ) ){
			throw new AuthenticationException( "用户登录HIVESERVER2验证失败 !" );
		}
	}

	@Override
	public Configuration getConf() {
		
		return conf;
	}

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

	
	
}

 

 

分享到:
评论

相关推荐

    hive systemctl启停hiveserver2和metastore服务.pdf

    为了解决这个问题,我们可以创建自定义的Shell脚本以及使用systemd服务来实现一键启停Hive的相关服务。 首先,我们来看一下提供的Shell脚本。这个脚本定义了两个主要的功能:启动和停止Hive的Metastore服务和...

    HiveServer2-JDBC及用户权限测试

    HiveServer2-JDBC 及用户权限测试 HiveServer2 是 Hive 的一种服务形式,能够提供 JDBC 连接方式,用户可以通过 ...在本文的结尾,我们总结了 HiveServer2 的安全机制和测试结果,并提供了相应的解决方案和优化方法。

    cdh6.3.2升级hive至3.x后登陆HiveServer2连接失败.doc

    ### CDH 6.3.2 升级 Hive 至 3.x 后登录 HiveServer2 连接失败问题分析及解决方法 #### 一、问题背景与现象 在将 Cloudera Data Hub (CDH) 6.3.2 版本中的 Hive 升级到 3.x 版本后,用户在尝试通过 JDBC 连接到 ...

    UDTF函数不生效问题.doc

    - 在某些情况下,简单的reload命令可能不足以解决问题,这时可以通过重启HiveServer2服务来强制刷新元数据信息。 - 关闭服务通常需要管理员权限,可以通过以下命令来实现: ```bash sudo service hiveserver2 ...

    Hue 常见问题解决方案,大数据平台的hue/hive常见问题总结 免费下载

    2. **Hive查询性能**:Hue通过HiveServer2执行查询,如果查询速度慢,可能是因为Hive Metastore的性能瓶颈或网络延迟。优化方案包括升级硬件,增加Metastore服务器资源,或者使用更高效的连接协议如Thrift SASL。 3...

    Hue 常见问题解决方案

    解决这个问题的一种方法是使用beeline,这是一个新的命令行工具,用于通过JDBC接口连接到HiveServer2。在Kerberos环境下,可以通过提供Kerberos认证信息来使用beeline。在Hue的Workflow中创建shell脚本任务时,可以...

    hive on spark mr 数据开发常见问题解决

    一种解决方法是增加Hiveserver2中的`hive.spark.client.server.connect.timeout`参数,将其设为更长的时间,如5分钟,以允许更长的等待时间。 4. **Java heap空间溢出** `java.lang.OutOfMemoryError: Java heap ...

    JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES解决方法

    但是,这种方法只能临时解决问题,当重新登录后,打开文件数的上限又会恢复到默认的 1024。 解决方法二:永久解决方案 为了永久解决 Too many open files 错误,可以修改 /etc/security/limits.conf 文件,添加...

    hive高可用1

    3. **支持高可用(HA)机制**,能有效解决并发和负载问题,确保服务的连续性。 4. **提供JDBC连接方式**,允许使用任何编程语言与Hive交互,增强了系统的可扩展性。 以下是一个具体的Hive高可用搭建示例: **环境...

    hbase:实验一-Hive3安装与部署.pdf

    在实验过程中,注意配置文件的修改要准确无误,同时保持日志监控,以便及时发现和解决问题。通过这个实验,你不仅掌握了Hive的安装与使用,还能深化对Hadoop生态的理解,为进一步学习大数据处理打下坚实基础。

    Hive常见问题维护手册V1.01

    在 Hive 中,日志是诊断和解决问题的关键资源。Hive 日志包括了执行过程中的各种信息,如查询解析、编译、执行的日志,以及错误信息。理解日志可以帮助我们跟踪查询状态,定位性能瓶颈,甚至排查故障。 【Hive运行...

    apache-hive-3.1.2-bin.tar.gz

    描述中提到的“为解决hive安全问题,重新编译hive源码升级jetty到9.4.24.v20191120”是一个重要的知识点。Jetty是一个开源的HTTP服务器和Servlet容器,Hive使用Jetty来提供Web界面和HTTP服务,例如HiveServer2。由于...

    HIVE HA高可用性及详细使用

    4. **配置一致性**:确保所有HiveServer2实例上的配置文件一致,避免因配置差异导致的问题。 #### 总结 本文详细介绍了Hive的基本概念、安装配置过程以及如何使用MySQL作为元数据存储的方法。同时,还简要讨论了...

    Apache Hue 2小时轻松搞定大数据可视化终端视频教程

    6.Hue配置集成HiveServer2 7.Hue集成Hive实战案例 第四章:Hue与RDBMS、Oozie、Impala集成 1.Hue配置集成RDBMS 2.Hue集成MySQL实战案例 3.Hue配置集成Oozie 4.Hue集成Oozie实战案例 5.Hue配置集成Hbase 6...

    Ubuntu 完全分布式及hive远程安装详解

    Hive的架构包括客户端、MetaStore、HiveServer2、HQL解析器和执行引擎等组件,这些组件在分布式环境下协同工作,使得用户可以方便地进行大数据查询和分析。 1. **环境准备** - **Ubuntu系统**:确保所有节点都运行...

    Hive-2.3.3在window安装需要的cmd相关

    在Windows环境下搭建Hive 2.3.3的开发环境是一项重要的任务,特别是对于...但请记住,配置过程中可能遇到的问题需要根据实际情况去解决,比如查阅官方文档、社区讨论或在线教程。祝你安装成功,愉快地探索Hive的世界!

    hive-jdbc015快照版源码

    - 通过对源码的研究,开发者可以定制功能,解决特定问题,或者为社区贡献新的特性。 4. **主要源码组件**: - `HiveDriver`:负责建立与HiveServer2的连接。 - `HiveStatement`和`HivePreparedStatement`:处理...

    藏经阁-LLAP_ Sub-Second Analytical Queries in Hive.pdf

    LLAP架构主要包括LLAP守护进程、查询执行器、协调器、HiveServer2(查询端点)、ODBC/JDBC、SQL查询、In-Memory Cache(跨所有用户共享)和HDFS/S3/WASB/Isilon等存储系统。其中,LLAP守护进程负责处理查询请求,并...

    2-8+Apache+Kyuubi+(Incubating)+在网易的深度实践.pdf

    对于已对接HiveServer2的内部系统,Kyuubi通过兼容Hive JDBC接口,简化了接入流程,实现全生命周期管理,降低资源浪费。 在网易的一个具体案例中,某团队面临任务优化空间有限、资源成本高昂、不支持云原生和混部等...

Global site tag (gtag.js) - Google Analytics