最近公司新项目申请资源,虚拟机资源打开时候使用source login.sh的脚本来进行登录注册,好奇心驱使下看了看里面的shell脚本,使用到了hiveserver2的zookeeper连接,百度一下找了篇博客学习一下;

转自:https://blog.csdn.net/qq_30950329/article/details/78024282

在生产环境中使用Hive,强烈建议使用HiveServer2来提供服务,好处很多:

1. 在应用端不用部署Hadoop和Hive客户端;

2. 相比hive-cli方式,HiveServer2不用直接将HDFS和Metastore暴漏给用户;

3. 有安全认证机制,并且支持自定义权限校验

4. 有HA机制,解决应用端的并发和负载均衡问题;

5. JDBC方式,可以使用任何语言,方便与应用进行数据交互;

6. 从2.0开始,HiveServer2提供了WEB UI。

如果使用HiveServer2的Client并发比较少,可以使用一个HiveServer2实例,没问题。

但如果这一个实例挂掉,那么会导致所有的应用连接失败。

Hive从0.14开始,使用Zookeeper实现了HiveServer2的HA功能(ZooKeeper Service Discovery),Client端可以通过指定一个nameSpace来连接HiveServer2,而不是指定某一个host和port。本文学习和研究HiveServer2的高可用配置。使用的Hive版本为apache-hive-2.0.0-bin。

如上图,我准备在node1和node2上分别启用两个HiveServer2的实例,并通过zookeeper完成HA的配置。

Hive配置

注:这里假设你的Zookeeper已经安装好,并可用。

在两个安装了apache-hive-2.0.0-bin的机器上,分别编辑hive-site.xml,添加以下参数:

  1.  
    <property>
  2.  
    <name>hive.server2.support.dynamic.service.discovery</name>
  3.  
    <value>true</value>
  4.  
    </property>
  5.  
     
  6.  
    <property>
  7.  
    <name>hive.server2.zookeeper.namespace</name>
  8.  
    <value>hiveserver2_zk</value>
  9.  
    </property>
  10.  
     
  11.  
    <property>
  12.  
    <name>hive.zookeeper.quorum</name>
  13.  
    <value> zkNode1:2181,zkNode2:2181,zkNode3:2181</value>
  14.  
    </property> 
  15.  
    <property>
  16.  
    <name>hive.zookeeper.client.port</name>
  17.  
    <value>2181</value>
  18.  
    </property> 
  19.  
    <property>
  20.  
    <name>hive.server2.thrift.bind.host</name>
  21.  
    <value>0.0.0.0</value>
  22.  
    </property> 
  23.  
    <property>
  24.  
    <name>hive.server2.thrift.port</name>
  25.  
    <value>10001</value> //两个HiveServer2实例的端口号要一致
  26.  
    </property>

先启动第一个HiveServer2 :

cd $HIVE_HOME/bin

./hiveserver2

再启动另一个:

第二个实例启动后,ZK中可以看到两个都注册上来。

JDBC连接

JDBC连接的URL格式为:

jdbc:hive2://<zookeeper quorum>/<dbName>;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2

其中:

<zookeeper quorum> 为Zookeeper的集群链接串,如zkNode1:2181,zkNode2:2181,zkNode3:2181

<dbName> 为Hive数据库,默认为default

serviceDiscoveryMode=zooKeeper 指定模式为zooKeeper

zooKeeperNamespace=hiveserver2 指定ZK中的nameSpace,即参数hive.server2.zookeeper.namespace所定义,我定义为hiveserver2_zk

使用beeline测试连接:

  1.  
    cd $HIVE_HOME/bin
  2.  
    ./beeline
  3.  
    !connect jdbc:hive2://zkNode1:2181,zkNode2:2181,zkNode3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk liuxiaowen ""

可以正常连接。

执行一个HQL查询,日志中显示连接到的HiveServer2实例为Node2,停掉Node2中的HiveServer2实例后,需要重新使用!connect命令连接,之后可以继续正常执行查询,日志显示连接到了Node1中的实例。

关于Hadoop2中的用户权限认证

本例中两个HiveServer2实例均使用普通用户liuxiaowen启动,

刚开始使用beeline链接时候报错:

1. Error: Failed to open new session:

2. java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException):

3. User: liuxiaowen is not allowed to impersonate liuxiaowen (state=,code=0)

这是由于Hadoop2中的用户权限认证导致的。

参考资料:

https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/Superusers.html

http://dongxicheng.org/mapreduce-nextgen/hadoop-secure-impersonation/

解决办法:

在Hadoop的core-site.xml中增加配置:

  1.  
    <property>
  2.  
    <name>hadoop.proxyuser.liuxiaowen.groups</name>
  3.  
    <value>*</value>
  4.  
    </property>
  5.  
     
  6.  
    <property>
  7.  
    <name>hadoop.proxyuser.liuxiaowen.hosts</name>
  8.  
    <value>*</value>
  9.  
    </property>

其中 liuxiaowen 为启动HiveServer2的用户。

使用超级用户hadoop刷新配置:

yarn rmadmin -refreshSuperUserGroupsConfiguration

hdfs dfsadmin -refreshSuperUserGroupsConfiguration

如果是对namenode做过HA,则需要在主备namenode上执行:

hdfs dfsadmin -fs hdfs://cdh5 -refreshSuperUserGroupsConfiguration

之后问题解决,后续再详细研究这块。

至此,HiveServer2的多实例高可用-Ha配置完成,的确能解决生产中的很多问题,比如:并发、负载均衡、单点故障、安全等等。

因此强烈建议在生产环境中使用该模式来提供Hive服务。

hiveserver2和zookeeper的HA搭建(转)的更多相关文章

  1. Spark集群基于Zookeeper的HA搭建部署笔记(转)

    原文链接:Spark集群基于Zookeeper的HA搭建部署笔记 1.环境介绍 (1)操作系统RHEL6.2-64 (2)两个节点:spark1(192.168.232.147),spark2(192 ...

  2. ActiveMQ笔记(2):基于ZooKeeper的HA方案

    activemq官网给出了3种master/slave的HA方案,详见:http://activemq.apache.org/masterslave.html,基于共享文件目录,db,zookeepe ...

  3. ZooKeeper一二事 - 搭建ZooKeeper伪分布式及正式集群 提供集群服务

    集群真是好好玩,最近一段时间天天搞集群,redis缓存服务集群啦,solr搜索服务集群啦,,,巴拉巴拉 今天说说zookeeper,之前搭建了一个redis集群,用了6台机子,有些朋友电脑跑步起来,有 ...

  4. HBase HA + Hadoop HA 搭建

    HBase 使用的是 1.2.9 的版本.  Hadoop HA 的搭建见我的另外一篇:Hadoop 2.7.3 HA 搭建及遇到的一些问题 以下目录均为 HBase 解压后的目录. 1. 修改 co ...

  5. hadoop HA + HBase HA搭建:

    hadoop HA搭建参考:https://www.cnblogs.com/NGames/p/11083640.html (本节:用不到YARN 所以可以不用考虑部署YARN部分) Hadoop 使用 ...

  6. Spark HA搭建

    正文 下载Spark版本,这版本又要求必须和jdk与hadoop版本对应. http://spark.apache.org/downloads.html tar -zxvf 解压到指定目录,进入con ...

  7. 分布式架构中一致性解决方案——Zookeeper集群搭建

    当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...

  8. kafka学习(二)-zookeeper集群搭建

    zookeeper概念 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 服务等.Zookeeper是h ...

  9. [ZooKeeper] 2 环境搭建

    上一篇中我们介绍了 ZooKeeper 的一些基本概念,这篇我们讲一下 ZooKeeper 的环境搭建. ZooKeeper 安装模式 单机模式:ZooKeeper 运行在一台服务器上,适合测试环境: ...

随机推荐

  1. git 命令行回退到某个指定的版本

    1.在开发过程中遇到合并别人的代码或者合并主分支的代码导致自己的分支代码冲突或有别的问题,这时我们需要回退某个git提交历史的代码 用一下命令 git reset --hard 139dcfaa558 ...

  2. [转帖]vagrant 添加带版本号的 box

    vagrant 添加带版本号的 box https://www.jianshu.com/p/12cf1ecb224b 第三种好用 lnmpcomposerphp  阅读约 8 分钟 前言 众所周知,v ...

  3. python 计算列表内容出现次数

    """python 计算列表内容出现次数""" #方法一: l = ['a','a','b','c','d','b','b','b'] te ...

  4. Controller如何进行重定向跳转

    因为在Controller的返回都是默认走视图解析器的InternalResourceViewResolver,而视图解析器都是进行请求转发,需要在返回时地址前加入字符redirect: 视图解析器不 ...

  5. Java | Spring Boot Swagger2 集成REST ful API 生成接口文档

      Spring Boot Swagger2 集成REST ful API 生成接口文档 原文 简介 由于Spring Boot 的特性,用来开发 REST ful 变得非常容易,并且结合 Swagg ...

  6. SQL Server外键关系是强制约束,外键值也可以是空(NULL)

    在SQL Server中,实际上外键值可不可以为空(NULL),和外键关系是不是强制约束无关. 我们先在SQL Server数据库中建立两张表People和Car,一个People可以有多个Car,所 ...

  7. 比较器Comparable和Comparator

    在java中要实现自定义类的比较,提供了以下两个接口: Comparable(内部排序) int compareTo(Object obj);返回值为int,默认升序排序 Comparator(外部排 ...

  8. asp获取access数据库中的一条随机记录

    针对“用一条SQL得到数据库中的随机记录集”问题在网上已经有很多答案了: SQL Server 2000: SELECT TOP n * FROM tanblename ORDER BY NEWID( ...

  9. ASP.NET Core 静态文件

    静态文件(HTML,CSS,图片和Javascript之类的资源)会被ASP.NET Core应用直接提供给客户端. 静态文件通常位于网站根目录(web root) <content-root& ...

  10. 百度webuploader如何实现秒传与断点续传

    因为这是小众需求,所以默认没有做在webuploader里面,而只是提供hook接口,让用户很简单的扩展此功能. 那么,都有哪些重要的hook接口呢? before-send-file 此hook在文 ...