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代码如下:
- public class HiveJdbcClient {
- private static String driverName = "org.apache.hive.jdbc.HiveDriver";
- public boolean run() {
- try {
- Class.forName(driverName);
- Connection con = null;
- con = DriverManager.getConnection(
- "jdbc:hive2://192.168.30.42:10000/hivedb", "", "");
- Statement stmt = con.createStatement();
- ResultSet res = null;
- String sql = "select count(*) from test_data";
- System.out.println("Running: " + sql);
- res = stmt.executeQuery(sql);
- System.out.println("ok");
- while (res.next()) {
- System.out.println(res.getString(1));
- }
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- System.out.println("error");
- return false;
- }
- }
- }
结果报错如下:
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; } }
相关推荐
HiveServer2-JDBC及用户权限测试
docker-hiveserver2
本文将详细介绍如何在Hive中设置用户名和密码,从而保证连接的鉴权与安全。基本思路是先自定义一个权限认证类接收用户名和密码,打成jar包后放到到HIVE的Lib目录下...本文档基于HIVE 3.12 支持最新的Hive和 Hadoop版本。
HiveServer2 账号密码鉴权类编译 Jar 包
HiveServer2日志摘要器用法 #download latest scriptwget https://raw.githubusercontent.com/abajwa-hw/hiveServer2logparser/master/hiveServer2logparser.pl#run scriptperl hiveServer2logparser.pl <path>输出...
============Hive的beeline权限配置============ 1)HDFS修改core-site.xml配置 搜索 core-site.xml ...2)YARN (MR2 Included)修改core-site.xml配置 java.sql.SQLException: Could not open client transpor
php连接hive, 基于thrift2 & hiveserver2 Thrift/transport/TSaslClientTransport.php 这里的username password也得改.... 密码为空的话随便填一个 这个文件务必也要一起修改, 否则涉及mapreduce的计算都无法执行
cdh6.3.2升级hive至3.x后登陆HiveServer2连接失败
hive自带的启停hive服务非常不方便,操作麻烦,那么有没什么办法一键启停hive服务呢?这个文章就是解决这个问题的
hive1.2.1使用jdbc连接hive server2的所有jar包
既可以连接没有kerberos的hive也可以连接有kerberos的hive
Hive JDBC连接示例该项目展示了如何使用各种不同的方法连接到Hiveserver2。 所有类仅适用于Hiveserver2。 正在使用Cloudera JDBC驱动程序,可以从下载。 在撰写本文时,最新版本为v2.5.15 。要求: 您需要下载驱动...
hive自定义安全认证使用
pyhs2-0.6.0.tar.gz手动安装包,python连接hiveserver2的工具包,①python setup.py build ②python setup.py install
hive配置参数及含义, 在大数据维护中对hive的优化参数的配置明细
Bee通过C ++节俭库与HiveServer交互,从而使客户端依赖性最小化,并且处理速度很快。安装你会需要: 节俭> = 0.9.2(包括开发标头) R包:Rcpp和dplyr 制作然后运行: R CMD INSTALL .用法library(bee)bee <- ...
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...
windows下安装hive2.3.x 需要cmd文件,解压覆盖bin目录即可。原本想免积分的,没有这个选项,愿资源槛低一点,学习更容易一点。
hs2client, C 和Hive的本机客户端,带有 python/Pandas 绑定 hs2client: Impala和Hive的C Thrift 客户端生成状态 这是一个新项目,用于在 C 中创建一个...高性能的开源HiveServer2客户端库。 in Impala和使用HiveServer
是一款通过 JDBC 连接 HiveServer2 的图形界面工具(JDBC 就是 Java 数据库连接,说白了就是用 Java 语言来操作数据库)。 简单介绍一下 DataGrip: 由 JetBrains 公司推出的数据库管理软件, 几乎支持所有主流 的...