• 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服务。

  • 相关阅读:
    关于virtual、非virtual继承函数的调用
    关于文件操作的文件格式与打开方式
    C++ 文件读写操作
    C++语法题
    检测java string变量是否含有中文
    常用知识库
    WMS仓储管理系统
    运输管理
    ipconfig/flushdns 清除系统DNS缓存
    cmd查看域名账号相关的命令
  • 原文地址:https://www.cnblogs.com/zuizui1204/p/9301055.html
Copyright © 2020-2023  润新知