zoukankan      html  css  js  c++  java
  • hiveserver2和zookeeper的HA搭建(转)

    最近公司新项目申请资源,虚拟机资源打开时候使用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服务。

  • 相关阅读:
    poj 1860 Currency Exchange(最短路径的应用)
    poj 2965 The Pilots Brothers' refrigerator
    zoj 1827 the game of 31 (有限制的博弈论)
    poj 3295 Tautology (构造法)
    poj 1753 Flip Game(枚举)
    poj 2109 (贪心)
    poj 1328(贪心)
    Qt 对单个控件美化
    Qt 4基础
    Bash Shell
  • 原文地址:https://www.cnblogs.com/zuizui1204/p/9301055.html
Copyright © 2011-2022 走看看