当前位置 博文首页 > 文章内容

    hive JDBC连接总结

    作者: 栏目:未分类 时间:2020-08-09 14:01:01

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    1、 问题:拒绝连接

    解决方法:hiveserver2 连接异常,重启(hiveserver2连接比较慢要等一会)

    我这里两个RunJar是启动了meatestore和hiveserver2

    2、 user:duoduo is not allowed impersonate hadoop100

    这个duoduo,是我的登录的用户,hive的用户和所属组都是duoduo

    解决方法:

    在hadoop的配置文件core-site.xml增加如下配置,重启hdfs

    
        <property>
            <name>hadoop.proxyuser.duoduo.hosts</name>
            <value>*</value>
        </property>
        <property>
            <name>hadoop.proxyuser.duoduo.groups</name>
            <value>*</value>
        </property>
    

    完美解决:

    此图像的alt属性为空;文件名为image-9.png

    其中username和password都为duoduo

    不管是root,还是duoduo用户都可以登录,可以肯定与用户无关

    注意:

    将配置换成Hadoop100或者hive

    <property>
        <name>hadoop.proxyuser.hive.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hive.groups</name>
        <value>*</value>
    </property>

    无论换成什么都是duoduo用户不不能模拟hadoop100

    2.1 验证某些博客1是hive-site.xml里面的不对:

    验证:我的hive-site.xml

    这个用户名和密码是元数据mysql的用户名和密码

    2.2 验证某些博客2是主机名的不对:

    验证:我的主机名是Hadoop100

    2.3 验证要带上库名字不然会报错的

    验证:毛关系没有

    3、代理用户

    在hadoop的core-site.xml中进行如下设置, 用户“super”就可以代理主机host1和host2上属于组group1和group2的所有用户。

    <property>
         <name>hadoop.proxyuser.super.hosts</name>
         <value>host1,host2</value>
       </property>
       <property>
         <name>hadoop.proxyuser.super.groups</name>
         <value>group1,group2</value>
       </property>

    当然,也可以进行更松弛的设置。如下所示表示用户“oozie”可以代理所有主机上的所有用户

      <property>
        <name>hadoop.proxyuser.oozie.hosts</name>
        <value>*</value>
      </property>
      <property>
        <name>hadoop.proxyuser.oozie.groups</name>
        <value>*</value>
      </property>

    3.1 ProxyUser介绍和应用场景

    Hadoop2.0版本开始支持ProxyUser的机制。含义是使用User A的用户认证信息,以User B的名义去访问hadoop集群。对于服务端来说就认为此时是User B在访问集群,相应对访问请求的鉴权(包括HDFS文件系统的权限,YARN提交任务队列的权限)都以用户User B来进行。User A被认为是superuser(这里super user并不等同于hdfs中的超级用户,只是拥有代理某些用户的权限,对于hdfs来说本身也是普通用户),User B被认为是proxyuser。

    在Hadoop的用户认证机制中,如果使用的是Simple认证机制,实际上ProxyUser的使用意义并不大,因为客户端本身就可以使用任意用 户对服务端进行访问,服务端并不会做认证。而在使用了安全认证机制(例如Kerberos)的情况下,ProxyUser认证机制就很有作用:

    1. 用户的管理会比较繁琐,每增加一个新的用户,都需要维护相应的认证信息(kerberosKeyTab),使用ProxyUser的话,只需要维护少量superuser的认证信息,而新增用户只需要添加proxyuser即可,proxyuser本身不需要认证信息。
    2. 通常的安全认证方式,适合场景是不同用户在不同的客户端上提交对集群的访问;而实际应用中,通常有第三方用户平台或系统会统一用户对集群的访问,并 且执行一系列任务调度逻辑,例如Oozie、华为的BDI系统等。此时访问集群提交任务的实际只有一个客户端。使用ProxyUser机制,则可以在这一 个客户端上,实现多个用户对集群的访问。

    使用ProxyUser访问hadoop集群,访问请求的UGI对象中实际包含了以下信息:

    1. proxyUser用户名
    2. superUser用户名
    3. superUser的认证信息(kerberos等安全认证模式下) 而非ProxyUser方式访问,UGI中只包含了普通用户及其认证信息。 通过ProxyUser方式访问hadoop集群,认证鉴权流程如下:

    1. 对SuperUser进行认证,在Simple认证模式下直接通过认证,在Kerberos认证模式下,会验证ticket的合法性。
    2. 代理权限认证,即认证SuperUser是否有权限代理proxyUser。这里权限认证的逻辑的实现可以通过 hadoop.security.impersonation.provider.class参数指定。在默认实现中通过一系列参数可以指定每个 SuperUser允许代理用户的范围。
    3. 访问请求鉴权,即验证proxyUser是否有权限对集群(hdfs文件系统访问或者yarn提交任务到资源队列)的访问。这里的鉴权只是针对 proxyUser用户而已经与SuperUser用户无关,及时superUser用户有权限访问某个目录,而proxyUser无权限访问,此时鉴权 也会返回失败。

    3.2 ProxyUser的使用和相关配置

    ProxyUser对象通过UserGroupInformation.createProxy(“proxyUser”,superUgi)来创建,访问集群时通过proxyUser.doAs方式进行调用。

         // 创建superUser用户
        UserGroupInformation superUser = UserGroupInformation.getCurrentUser();
        //创建proxyUser用户
        UserGroupInformation proxyUgi = UserGroupInformation.createProxyUser(“proxyUser”, superUser);
        // 使用proxyUser用户访问集群
        proxyUgi.doAs(new PrivilegedExceptionAction<Void>() {
        @Override
        public Void run() throws Exception {
        // 使用proxy用户访问hdfs
        FileSystem fs = FileSystem.get(conf);
        fs.mkdirs(new Path(“/proxyUserDir”));
        // 使用proxy用户提交mr作业
        JobClient jc = new JobClient(conf);
    
        jc.submitJob(conf);
    
          return null;
          }
        });
    

    服务端需要在NameNode和ResourceManager的core-site.xml中进行代理权限相关配置。 对于每一个superUser用户,配置参数:

    对于每个superUser用户,hosts必须进行配置,而groups和users至少需要配置一个。

    这几个配置项的值都可以使用*来表示允许所有的主机/用户组/用户。

    例如:

    <property>
    <name>hadoop.proxyuser.userA.hosts</name>
    <value>*</value>
    </property>
    <property>
    <name>hadoop.proxyuser.userA.users</name>
    <value>user1,user2</value>
    </property>

    表示允许用户userA,在任意主机节点,代理用户user1和user2

    代理用户权限相关配置的改动,需要修改core-site.xml文件中相关配置。修改后配置并不会自动更新到服务器(这与fair- scheduler.xml配置会自动更新不同)。修改配置后需要执行以下命令进行同步,分别将信息更新到namenode和 resourcemananger上。

    参考1:https://www.jianshu.com/p/a27bc8651533
    参考2:https://blog.csdn.net/u012948976/article/details/49904675
    官网:https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/Superusers.html