`

thriftserver

 
阅读更多
export SPARK_CONF_DIR=/home/yunzhi.lyz/spark/spark220/conf
spark-default.conf 

spark.yarn.jars  hdfs:/app/jars/*.jar   # hdfs jar, 每次 submit ,如果 spark/jars 下面 jar 和 HDFS 上一样,用 HDFS上的,优先用 driver 上的jar
spark.app.confpath /udfconf/udf.config   # hdfs 配置

start-thriftserver.sh  一定要用 client 模式 , 而 client模式, 一定要通过  --driver-class-path $CLASSPATH:/home/...SNAPSHOT.jar  来加载 driver上的 classpath

加入 --driver-class-path  的jar  ,最终在 java command 中 会出现在  java -cp  后面。 这样 java driver 才能加载到。

spark.driver.extraClassPath  对 client 是无效的
worker 上的 spark.executor.extraClassPath   配置 , 测试  --jars 也是可用的。

      val configFilePath = sparkConf.getOption("spark.app.confpath")
        .getOrElse("/Users/l/spark/git/spark/sql/hive-thriftserver/conf-file/udf.config")
      println(s"configFilePath SparkSQLEnv : $configFilePath ")


object UdfLoadUtils {
  var configArray :Array[String] = null
  def udfRegister(configFilePath: String, spark: SparkSession): Unit = {
     if(configArray ==null) configArray = spark.sparkContext.textFile(configFilePath, 1).collect()
    //   name,classname,returnType(udf need)
    configArray.foreach(record => {
      val registerInfoArray = record.split(",")
      println(s"register udf info : $record")

      if (registerInfoArray.size == 2) {
        val Array(udfName,className) = registerInfoArray
        val instance = getUDAFInstanceByClass(className)
        spark.sqlContext.udf.register(udfName, instance)
      } else if (registerInfoArray.size == 3) {
        val Array(udfName,className,returnType) = registerInfoArray
        var  returnDataType : DataType =  null
        returnType match{
          // Numeric types
          case "ByteType" => returnDataType = DataTypes.ByteType
          case "ShortType" => returnDataType = DataTypes.ShortType
          case "IntegerType" => returnDataType = DataTypes.IntegerType
          case "LongType" => returnDataType = DataTypes.LongType
          case "FloatType" => returnDataType = DataTypes.FloatType
          case "DoubleType" => returnDataType = DataTypes.DoubleType
          //case "DecimalType" => returnDataType = DecimalType
          // String types
          case "StringType" => returnDataType = DataTypes.StringType
          // Binary type
          case "BinaryType" => returnDataType = DataTypes.BinaryType
          // Boolean type
          case "BooleanType" => returnDataType = DataTypes.BooleanType
          // Datetime type
          case "TimestampType" => returnDataType = DataTypes.TimestampType
          case "DateType" => returnDataType = DataTypes.DateType
          // Complex types
          //case "ArrayType" => returnDataType = ArrayType
          //case "MapType" => returnDataType = MapType
          //case "StructType" => returnDataType = StructType
          case _ => None
        }
        spark.sqlContext.udf.registerJava(udfName,className,returnDataType)
      }



    })



  }


  def getUDAFInstanceByClass(className: String) :UserDefinedAggregateFunction= {
    var  instance : UserDefinedAggregateFunction = null
    try {
      instance =  Class.forName(className).newInstance.asInstanceOf[UserDefinedAggregateFunction]
    }catch{
      case ex:Throwable =>  {
        println(s" instance $className  error ,error info : ${ex.getCause} ...................... ")
        ex.printStackTrace()
      }
    }
    instance
  }



}


thriftserver


org.apache.spark.sql.hive.thriftserver.SparkSQLEnv#init
      val configFilePath = sparkConf.getOption("spark.app.confpath")
        .getOrElse("/Users/l/spark/git/spark/sql/hive-thriftserver/conf-file/udf.config")
      println(s"configFilePath SparkSQLEnv : $configFilePath ")
      UdfLoadUtils.udfRegister(configFilePath,sparkSession)

org.apache.spark.sql.hive.thriftserver.SparkSQLSessionManager#openSession
  println(s" open session : single ${sqlContext.conf.hiveThriftServerSingleSession}  ")
    val ctx = if (sqlContext.conf.hiveThriftServerSingleSession) {
      sqlContext
    } else {
      sqlContext.newSession()
    }
    if(!sqlContext.conf.hiveThriftServerSingleSession){
    val configFilePath = ctx.sparkContext.conf.getOption("spark.app.confpath")
     .getOrElse("/Users/l/spark/git/spark/sql/hive-thriftserver/conf-file/udf.config")
    println(s"openSession  configFilePath: $configFilePath ")
    UdfLoadUtils.udfRegister(configFilePath,ctx.sparkSession)
    }

    ctx.setConf("spark.sql.hive.version", HiveUtils.hiveExecutionVersion)
分享到:
评论

相关推荐

    spark-hive-thriftserver_2.11-2.1.3-SNAPSHOT-123456.jar

    spark-hive-thriftserver_2.11-2.1.spark-hive-thrift

    编译的spark-hive_2.11-2.3.0和 spark-hive-thriftserver_2.11-2.3.0.jar

    spark-hive_2.11-2.3.0...spark-hive-thriftserver_2.11-2.3.0.jar log4j-2.15.0.jar slf4j-api-1.7.7.jar slf4j-log4j12-1.7.25.jar curator-client-2.4.0.jar curator-framework-2.4.0.jar curator-recipes-2.4.0.jar

    spark-hive-thriftserver_2.11-2.4.5.jar

    spark和hive结合依赖,如何使用请看我博客https://blog.csdn.net/z1987865446/article/details/109372818

    基于Scala的Spark Thrift Server设计源码

    本设计源码提供了一个基于Scala的Spark Thrift Server。项目包含12731个文件,主要使用Scala、Java、Python、Shell、JavaScript、CSS、HTML、Ruby和C编程语言。文件类型包括3539个Scala源代码文件、1559个Q文件、...

    SparkSQL的分布式执行引擎(Spark ThriftServer)

    **SparkSQL的分布式执行引擎——Spark ThriftServer详解** SparkSQL是Apache Spark项目的一个核心组件,它提供了对结构化数据的处理能力,使得用户可以使用SQL或者DataFrame/Dataset API进行数据查询和分析。Spark ...

    spark thriftserver(或hive)基于mysql8.x元数据库

    支持mysql8.x,使用utf8mb4编码。

    【Hue警告】必须在 HBase 服务中配置 Thrift Server 角色以使用 Hue HBase Browser 应用程序。

    标题中的“【Hue警告】必须在 HBase 服务中配置 Thrift Server 角色以使用 Hue HBase Browser 应用程序”指出了一个关键的问题,即为了能够通过Hue UI界面顺利地浏览和操作HBase数据库,需要在HBase服务中设置Thrift...

    thrift server support db operation and rest protocol

    标题中的“thrift server support db operation and rest protocol”指出,我们正在讨论一个经过修改的Thrift服务器,它扩展了对数据库操作的支持,并且实现了REST协议。这个服务器现在能够处理HTTP请求,内容格式为...

    thrift介绍、各种server的比较、多接口服务实现

    Thrift 是一个高性能的跨语言服务开发框架,最初由 Facebook 开发并开源。它通过接口定义语言(IDL)来定义数据类型和服务,使得不同语言之间能够进行高效且可靠的通信。Thrift IDL 文件被编译成多种编程语言的代码...

    goshine:spark-thriftserver 的 go 客户端库

    `goshine` 是一个专为 Apache Spark Thrift Server 设计的 Go 语言客户端库,它使得在 Go 应用程序中与 Spark 进行交互变得更加便捷。Spark Thrift Server 提供了一个 JDBC/ODBC 接口,允许各种编程语言通过标准的 ...

    ThriftClient&Server.zip

    一组用thrift写的Java RPC框架,是两个maven项目,直接可以用,可以传字符串。 方便初学者了解thrift RPC各部分的原理,如果想自己加功能,就要新建XX.thrift文件,定义好接口,用用thrift生成

    spark_3_2_0-thriftserver-3.2.3-1.el7.noarch.rpm

    Ambari+Bigtop 一站式编译和部署解决方案 https://gitee.com/tt-bigdata/ambari-env

    bee:适用于HiveServer 2 Spark ThriftServer的R客户端

    蜜蜂用于R的Hive客户端,它也与Spark的ThriftServer兼容。 与其他此类库不同,Bee不需要运行rJava,客户端JVM或任何其他服务。 Bee通过C ++节俭库与HiveServer交互,从而使客户端依赖性最小化,并且处理速度很快。...

    thrift通过openssl加密证书实现双向通信

    thrift框架通过vs2013编译好的静态库,然后通过vs2013实现双向通信代码,通信协议利用openssl加密证书的方式来实现,本资源给出了完整的实现代码,证书可以在网上百度一下,看看如何生成客户端和服务端的,然后编译...

    通过thrift使用c++访问hbase

    1. **验证HBase和ThriftServer状态**: 确保HBase正常工作,检查thriftserver的9090端口是否在监听,如需启动ThriftServer,可以使用`bin/hbase-daemon.sh start thrift`命令。 2. **编写和编译测试程序**: 创建一个...

    pyhs2-master.zip

    《PyHS2:Python连接Hive与Spark Thrift Server的利器》 PyHS2,一个在Python编程环境中用于连接Hive Server和Spark Thrift Server的客户端库,为开发者提供了便捷的方式来执行HQL(Hive查询语言)并获取数据。这个...

    采用java操作thrift代码示例

    4. **启动服务器**:使用生成的`ThriftServer.java`(或者自定义服务器),创建一个Thrift服务器实例,监听特定端口并处理客户端请求: ```java public class ThriftServer { public static void main(String[] ...

    HBase技术介绍.docx

    - **Thrift Gateway**: 支持多种语言(如C++、PHP、Python等),便于异构系统的集成。 - **REST Gateway**: 支持HTTP RESTful API,允许任何支持HTTP协议的客户端访问HBase。 - **Pig和Hive**: 提供高级语言支持,...

    SparkSql技术

    - **ThriftServer命令参数**:列举了ThriftServer可用的命令参数。 - **ThriftServer使用**:指导如何使用ThriftServer。 **7.3 小结** - 对ThriftServer和CLI的使用进行了总结。 #### 八、SparkSQL的综合应用 ...

    Spring集成Thrift--Server AND Client

    <bean id="thriftServer" class="org.springframework.contrib.thrift.server.ThriftServerFactoryBean"> <bean id="thriftServiceProcessor" class="org.apache.thrift.server.TThreadPoolServer$Args"> ...

Global site tag (gtag.js) - Google Analytics