美文网首页
spark sql thriftserver HA

spark sql thriftserver HA

作者: 邵红晓 | 来源:发表于2019-10-15 12:00 被阅读0次

    与hue进行整合,org.apache.spark.sql.hive.thriftserver,就必须解决thriftserver的单点问题,目前spark还未提供相关功能,所以必须org.apache.spark.sql.hive.thriftserver修改源码,实现方式参考HiveServer2高可用方式,详情参考https://www.jianshu.com/p/eaf615284f67
    修改源码 /spark2/jars/spark-hive-thriftserver_2.11-xxxx.jar
    我们在hue平台上提价的sql执行并行度,是在启动thriftserver服务适合指定的
    开启spark动态资源分配http://lxw1234.com/archives/2015/12/593.htm
    cd $SPARK_HOME/sbin/
    ./start-thriftserver.sh
    --master yarn-client
    --conf spark.driver.memory=3G
    --conf spark.shuffle.service.enabled=true
    --conf spark.dynamicAllocation.enabled=true
    --conf spark.dynamicAllocation.minExecutors=1
    --conf spark.dynamicAllocation.maxExecutors=30
    --conf spark.dynamicAllocation.sustainedSchedulerBacklogTimeout=5s

    HiveServer2 实现高可用,但是没有实现故障恢复

    image.png

    优点:
    高可用(解决单点问题);
    负载均衡(ZK集群随机选择HiveServer2);
    缺点:
    无法自动故障恢复(当某台HS2宕机时,与其相连的client的session会丢失,需要依赖client的自动断连重试机制),至于故障重启,依赖yarn的container故障重试策略,同flink中jobmanager高可用一样

    具体HiveServer2的高可用-HA配置

    关键字:hiveserver2、ha、高可用、high availability、ZooKeeper Service Discovery
    在生产环境中使用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

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

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

    [图片上传中...(image-187c1d-1571111714429-3)]

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

    Hive配置

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

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

    <property>
    <name>hive.server2.support.dynamic.service.discovery</name>
    <value>true</value>
    </property>
     
    <property>
    <name>hive.server2.zookeeper.namespace</name>
    <value>hiveserver2_zk</value>
    </property>
     
    <property>
    <name>hive.zookeeper.quorum</name>
    <value> zkNode1:2181,zkNode2:2181,zkNode3:2181</value>
    </property>
     
    <property>
    <name>hive.zookeeper.client.port</name>
    <value>2181</value>
    </property>
     
     
    <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>0.0.0.0</value>
    </property>
     
    <property>
    <name>hive.server2.thrift.port</name>
    <value>10001</value> //两个HiveServer2实例的端口号要一致
    </property>
    

    先启动第一个HiveServer2 :

    cd $HIVE_HOME/bin

    ./hiveserver2

    hive

    再启动另一个:

    hive

    第二个实例启动后,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测试连接:

    <pre class="prettyprint linenums" style="padding: 8px; color: rgb(68, 68, 68); border-radius: 2px; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; display: block; margin: 0px 0px 20px; font-size: 14px; line-height: 20px; word-break: break-all; overflow-wrap: break-word; white-space: pre-wrap; background-color: rgb(248, 248, 248); border: 1px solid rgb(238, 238, 238); overflow: hidden; box-shadow: rgb(238, 238, 238) 40px 0px 0px inset, rgb(51, 183, 150) 42px 0px 0px inset;">

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

    </pre>

    image.png

    可以正常连接。

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

    作者:
    lxw的大数据田地 » HiveServer2的高可用-HA配置

    相关文章

      网友评论

          本文标题:spark sql thriftserver HA

          本文链接:https://www.haomeiwen.com/subject/ogzjmctx.html