hiveserver2客户端+服务端配置教程

首先是GUI客户端:

1、参考 http://blog.csdn.net/thy822/article/details/72420972 第一个SQuirrel SQL Client客户端:https://pan.baidu.com/s/1miSLSt6 ,下载下来,那几个jar包我已经去服务器上找好了打包直接下载:https://pan.baidu.com/s/1bzJGYE
一个查询8月某天1个记录的例子:
QQ截图20170807112044

2、hiveserver2的地址、账号和密码通过邮件发送给你了,没有问小月月要

3、hql基本上和mysql是兼容的,如果有不懂的地方可以先去学学sql的语法,举一个例子:
统计person_pipeline表的2017年7月上旬每天的插入的记录次数:select create_date_partition,count(*) from person_pipeline where create_date_partition>'2017-07-01' and create_date_partition<'2017-07-15' group by create_date_partition order by create_date_partition;

查询条件尽量用上create_date_partition这个日期分期字段,否则hive会扫表查询所有记录(全表1000多万数据需要30多分钟才能出结果),如果限定create_date_partition为7月的话就只需要扫7月份的数据了(7月的数据100多万只需要3分钟就能出结果);需要注意的是,由于每条记录平均有300KB大小,所以你的sql语句如果使用select * from person_pipeline...之类的语法导致查询的输出数据量太大会导致hiveserver2可能撑不住(当然了几百M的数据量应该没问题),所以尽量保证查询输出数据量不太大,也就是说select * from...这种语句必须加limit N这样。

4、py中连接hiveserver2需要自己找教程,我只试过php连接hiveserver2。

5、关于脱敏数据的解密,如果你根据某些加密字段去hive中查询数据的话得先对这些字段加密,然后才能用类似select * from person_pipeline where id="encrypt id_cards" limit 1;这样的sql来查询结果,加密解密的方法我已经在邮件中通知。

6、如果遇到了“ submitted by user root to unknown queue root.??”的话,请在jdbc中指定queue为default也就是:jdbc:hive2://<host>:<port>/default;sess_var_list?mapred.job.queue.name=default,或者连上hiveserver2之后先查询一下set mapred.job.queue.name=default应该也行。

7、关注到BI的pythoner在使用hive客户端:https://github.com/dropbox/PyHive 遇到问题,这里我把py的客户端下载配置了一遍,简略教程如下(我系统centos7):

a、按照github的repo推荐安装方法安装好
b、根据错误提示安装一些第三方的库,这里是一些需要安装的库命令(老实用pip安装,别用别的安装方法):

pip install thrift_sasl
yum install libgsasl-devel
yum install cyrus-sasl-plain  cyrus-sasl-devel  cyrus-sasl-gssapi
pip install pyhive[hive]

c、打开py的shell

from pyhive import hive
c=hive.connect(host='192.168.1.109', username='gc', password='gcpasswd').cursor();
c.execute("set mapred.job.queue.name=default")
c.execute("select count(*) from person_pipeline where create_date_partition='2017-08-02'")
print c.fetchall();
//[(75116,)]

注意在connect这一步有2个坑:第一个是官方的库写的有bug,我改了一下见:https://github.com/dropbox/PyHive/pull/147/commits/d4f93851c15db6d506f76067e4881356f9e011a2 ,现在你改的话需要在系统的python库安装的地方找到pyhive自己修改,我这里是/usr/lib/python2.7/site-packages/pyhive/hive.py,注意把hive.pyc的缓存删了。第二是如果你遇到了:thrift.transport.TTransport.TTransportException: Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism的错误就安装对应的依赖库,我这里是yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi
4、py的版本兼容、平台兼容做的不太好,库依赖也有点乱,很多逻辑难读懂;推荐大家使用工业级、简单、兼容好的语言java

服务器端:
密码验证方式选择的CUSTOM,主要参考这个答案来的:https://stackoverflow.com/questions/18186973/simple-user-password-authentication-for-hiveserver2-without-kerberos-ldap
不过这个答案有几个bug,现在修改如下:

vim SampleAuthenticator.java

package ick.SampleAuth;

import java.util.Hashtable;
import javax.security.sasl.AuthenticationException;
import org.apache.hive.service.auth.PasswdAuthenticationProvider;

public class SampleAuthenticator implements PasswdAuthenticationProvider {

  Hashtable<String, String> store = null;

  public SampleAuthenticator () {
    store = new Hashtable<String, String>();
    store.put("user1", "passwd1");
    store.put("user2", "passwd1");
  }

  @Override
  public void Authenticate(String user, String  password)
      throws AuthenticationException {

    String storedPasswd = store.get(user);

    if (storedPasswd != null && storedPasswd.equals(password))
      return;

    throw new AuthenticationException("SampleAuthenticator: Error validating user");
  }

打包命令为:

javac -cp /icksys/apache-hive-2.1.1-bin/lib/hive-service-2.1.1.jar SampleAuthenticator.java -d .
jar cf ick.jar ick
cp ick.jar /icksys/apache-hive-2.1.1-bin/lib

在hive-site.xml配置如下:

<code>
<property>
<name>hive.server2.authentication</name>
<value>CUSTOM</value>
</property>



<property>
  <name>hive.server2.custom.authentication.class</name>
  <value>ick.SampleAuth.SampleAuthenticator</value>
</property>


<property>
<name>hive.server2.enable.doAs</name>
    <description>Enable user impersonation for HiveServer2</description>
<value>false</value>
</property>

然后重启hiveserver2,让账号+用户名生效。

0

发表评论

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>