背景
当hive客户端搭建起来之后,应用项目通过jdbc远程连接hive,目前是不需要用户名和密码,这是由于hive默认的用户名和密码都是空的,所以我们现在需要为hive添加新的用户名和密码;连接hive的时候就需要使用用户名和密码。
配置步骤
首先,添加hive的maven依赖,这儿maven的版本和hive运行的jar版本保持一致,不然容易出问题,hive/lib下查看jar的版本信息。
- pom添加hive依赖
<dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>version-info</version></dependency>
需要先用IDEA打包一个jar工具类,用于解析用户名和密码,具体需要打包的代码如下:
packageorg.apache.hadoop.hive.contrib.auth;importjavax.security.sasl.AuthenticationException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hive.conf.HiveConf;importorg.slf4j.Logger;publicclassCustomPasswdAuthenticatorimplementsorg.apache.hive.service.auth.PasswdAuthenticationProvider{privateLoggerLOG=org.slf4j.LoggerFactory.getLogger(CustomPasswdAuthenticator.class);privatestaticfinalStringHIVE_JDBC_PASSWD_AUTH_PREFIX="hive.jdbc_passwd.auth.%s";privateConfiguration conf=null;@OverridepublicvoidAuthenticate(String userName,String passwd)throwsAuthenticationException{LOG.info("user: "+userName+" try login.");String passwdConf =getConf().get(String.format(HIVE_JDBC_PASSWD_AUTH_PREFIX, userName));if(passwdConf==null){String message ="user's ACL configration is not found. user:"+userName;LOG.info(message);thrownewAuthenticationException(message);}if(!passwd.equals(passwdConf)){String message ="user name and password is mismatch. user:"+userName;thrownewAuthenticationException(message);}}publicConfigurationgetConf(){if(conf==null){this.conf=newConfiguration(newHiveConf());}return conf;}publicvoidsetConf(Configuration conf){this.conf=conf;}}
之后,将jar包放在hive的lib目录下,同时,需要修改conf下的hive-site.xml配置文件;
<!--自定义远程连接用户名和密码--><property><name>hive.server2.authentication</name><value>CUSTOM</value><!--默认为none,修改成CUSTOM--></property><!--指定解析jar包--><property><name>hive.server2.custom.authentication.class</name><value>org.apache.hadoop.hive.contrib.auth.CustomPasswdAuthenticator</value></property><!--设置用户名和密码--><property><name>hive.jdbc_passwd.auth.muzili</name><!--用户名为最后一个:muzili--><value>muzili</value><!--密码--></property>
以下没有做,可以跳过。
最后还需要修改hadoop的相关文件,切换到hadoop配置文件目录:hadoop/etc/hadoop,修改hadoop:core-site.xml,否则java连接hive没权限
<property><name>hadoop.proxyuser.hadoop.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.hadoop.groups</name><value>*</value></property>
重启hadoop和hive,可以利用beeline命令去测试;
- 创建连接测试,使用beeline命令,进入hive的beeline客户端,执行以下命令:
!connect jdbc:hive2//localhost:port/database
- 运行成功之后,即可读取hive里面的数据
总结
开发工具远程连接hive可自定义端口,缺省10000
版权归原作者 FlyWIHTSKY 所有, 如有侵权,请联系我们删除。