• 编译spark支持thriftserver


    cdh默认把spark的spark-sql以及hive-thriftserver给阉割掉了,想使用thriftserver,于是自己重新编译一个。

    此外,如果是spark1.6至spark2.1版本,也可以直接从官网下载编译好的包,将thriftserver相关的jar包放到cdh spark对应的目录下,并且将执行文件,比如start-thriftserver.sh上传到CDH对应的目录下即可。

    如果是spark2.3以上,只能重新编译或者使用网易开源的kyuubi(基于thriftserver改造,并且更加完善一些,可以视为spark thriftserver的增强版)

    ---摘自网易大数据平台架构实践---
    接下来,我会介绍网易在Spark多租户方面的工作,这个项目叫做Kyuubi(该项目的开源地址: https://github.com/netease-bigdata/kyuubi https://github.com/yaooqinn/kyuubi),实际上是类似于HiveSever2的程序。大家可能都知道,Hive一般有两种使用模式,一种是client模式,所有的SQL解析都客户端在这之中完成。一种是HiveSever2模式,整个SQL解析放到server端完成。
    
    在公司实际使用过程中,我们更希望用户的使用行为通过Server端完成,否则会很难管理,因为客户端根本不在平台掌控范围之内,我们很难进行各种升级及配置变化。只有当MetaStore和HDFS 配置不暴露给用户,我们才能更好得管控。Hive的社区比较完善,在这方面没有问题,但是Spark还有些不足。其实,所谓的Kyuubi只是在类似HiveSever2的基础上提供服务, 提供SparkSQL服务,而不是Hive SQL服务。
    
    Kyuubi基于Spark Thrift Sever改造,Spark Thrift Sever类似于HiveSever2,但是它不够完善。由于我们在此基础上增加了多租户的功能,因此可以支持网易内部各业务线的使用。要想实现多租户功能,首先要把SparkContext变成多实例,之后每次执行代理真正的用户身份执行;其次,我们提供了Spark SQL集群,用户请求负载均衡到每台Kyuubi服务器,并且这部分是高可用的,一台服务器挂了会立刻切换到另一台。
    
    此外,我们对安全性也进行了改进,支持kerbros。其实,整个网易猛犸平台都是强安全认证系统,每个用户都有自己的kerberos key tabkerbros,所有系统拿kerberoskerbros做认证访问都是带认证的,Kyuubi要融入这个体系同样需要支持kerberoskerbros。
    
    Kyuubi的主要特点如下:一是具备统一接口,与HiveSever2相比,Kyuubi提供SwiftThrift的API,无论是Beeline客户端、JDBC客户端、ODBC客户端还是网易猛犸自助分析查询平台、有数可视化BI平台,Kyuubi都可以用标准的方式连接到Spark。
    
    二是有弹性的资源控制能力,Kyuubi支持session级别的资源配置,每个session所需的队列、资源核数和内存都可以进行配置。
    
    三是支持SparkContext的动态缓存。创建一个SparkContext耗时较长,所以我们要对SparkContext进行缓存设置,让用户不需要每次查询都动态创建SparkContext。
    
    此外,我们也支持Spark动态资源分配特性,启用SparkContext需要启用一堆Spark执行器。如果业务需要较快的响应速度,那就直接发SQL,不需要等待进程启用。
    
    四是Kyuubi安全特性,首先是支持Kerberos还有代理执行,最后支持集成我们自己的spark-authorizer权限验证插件,该插件对Spark没有侵入性,主要用于查询优化的最后阶段。实际上,具体权限对接的是rRangerr中的权限控制中心,通过集成Spark-authorizer,我们能够做到细粒度的权限控制。
    
    此外,我们也支持服务的高可用和负载均衡,Kyuubi基于负载均衡的方式设计,通过将ZK作为Namespace来实现。具体过程为,Kyuubi将自己注册到ZK,ZK形成服务列表,注明各服务的存活状态,客户端会与ZK通讯拿到该服务器列表,从中挑选Kyuubi服务器执行。通过这种方式,我们将负载均衡到众多Spark查询设备上,从而避免了单点故障,保证了服务的可用性。
    
    总结来看,Kyuubi以HiveServer2 Thrift API为接口协议,提供Spark SQL服务。相比传统的Spark,Kyuubi主要增加了企业级特性,如果公司多租户场景较多且业务线复杂,多租户功能是比较要紧的事情比如多租户、权限、负载均衡等
    Kyuubi简述

    官网参考:

    http://spark.apache.org/docs/2.3.3/building-spark.html#building-a-runnable-distribution

    http://spark.apache.org/docs/2.3.3/sql-programming-guide.html#distributed-sql-engine

    环境:

    #java
    export JAVA_HOME="/usr/lib/java/jdk1.8.0_144"
    export JRE_HOME="$JAVA_HOME/jre"
    export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
    export PATH=$JAVA_HOME/bin:$PATH
    #maven
    export MAVEN_HOME="/home/etluser/kong/spark/apache-maven-3.6.2"
    export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
    export PATH=$MAVEN_HOME/bin:$PATH

    修改./dev/make-distribution.sh,

    1.根据服务器实际配置使用多core

    2.直接指定相关VERSION,注释获取version的部分

    3.hadoop,flume,zk指定cdh相关版本

    vim spark-2.3.4/dev/make-distribution.sh
    BUILD_COMMAND=("$MVN" -T 1C clean package -DskipTests $@)
    修改为
    BUILD_COMMAND=("$MVN" -T 10C package -DskipTests $@)

    #VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null | grep -v "INFO" | tail -n 1)
    #SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ 2>/dev/null
    # | grep -v "INFO"
    # | tail -n 1)
    #SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ 2>/dev/null
    # | grep -v "INFO"
    # | tail -n 1)
    #SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ 2>/dev/null
    # | grep -v "INFO"
    # | fgrep --count "<id>hive</id>";
    # Reset exit status to 0, otherwise the script stops here if the last grep finds nothing
    # because we use "set -o pipefail"
    # echo -n)
    VERSION=2.3.4
    SCALA_VERSION=2.11.8
    SPARK_HADOOP_VERSION=2.6.0-cdh5.13.3
    SPARK_HIVE=1

    <hadoop.version>2.6.0-cdh5.14.0</hadoop.version>
    <flume.version>1.6.0-cdh5.14.0</flume.version>
    <zookeeper.version>3.4.5-cdh5.14.0</zookeeper.version>

     修改maven conf目录下settings.xml文件,加入阿里库

    <mirror>
        <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun-maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>

    在spark-2.3.4/pom.xml 添加cdh仓库

    <repository>
        <id>cloudera</id>
        <name>cloudera Repository</name>
        <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
    </repository>

     执行

    ./make-distribution.sh --name hadoop2.6 --tgz -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.13.3 -Phive -Phive-thriftserver -DskipTests

    然后等待...

    完成!

     生成的压缩包

  • 相关阅读:
    Java之旅_高级教程_数据结构
    Java之旅_高级教程_多线程编程
    Java之旅_高级教程_URL处理
    Java之旅_高级教程_网络编程
    Java问题汇总
    java之旅_高级教程_java泛型
    Chrome中安装Firebug插件
    Selenium+Python环境搭建
    批处理DOS基础命令
    Appium-两个小报错
  • 原文地址:https://www.cnblogs.com/zz-ksw/p/11905400.html
Copyright © 2020-2023  润新知