sparkSql 直接执行外部 sql/hql文件

2021/6/30 2:20:53

本文主要是介绍sparkSql 直接执行外部 sql/hql文件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

话不多说上代码:

======idea 部分代码======begin=====
import org.apache.hadoop.security.UserGroupInformation
import org.apache.spark.sql.SparkSession

import java.io.File
import java.util.Properties
import scala.io.{BufferedSource, Source}

/**
 * ods层数据清洗落地到dwd层
 */
object Ods2DwdFilterSql {

  def main(args: Array[String]): Unit = {

    val filePath: String = args(0)

    //读取集群配置文件
    val prop: Properties = PropertieUtil.load("config.properties")

    //本地测试读文件
//    val prop: Properties = PropertieUtil.getProperties("/config.properties")
    System.setProperty("java.security.krb5.conf", prop.getProperty(PropConstants.KRB5_CONF_PATH))
    System.setProperty("HADOOP_USER_NAME", prop.getProperty(PropConstants.HADOOP_USER_NAME))
    System.setProperty("user.name", prop.getProperty(PropConstants.USER_NAME))
    UserGroupInformation.loginUserFromKeytab(
      prop.getProperty(PropConstants.KEYTAB_NAME), prop.getProperty(PropConstants.KEYTAB_FILE_PATH)
    )

    System.out.println(UserGroupInformation.getLoginUser)


    val session: SparkSession = SparkSession.builder().master("local[2]")
      .appName("SparkSeesionApp")
      .enableHiveSupport() //支持hive
      .getOrCreate()
//    session.sparkContext.setLogLevel("error")

    val sql: String = doFile(filePath)
    println("=================sql开始=================")
    println(sql)
    println("=================sql结束=================")
    session.sql(sql).show()
    
    session.stop()
  }

  //读取外部sql文件文件
  def doFile(fileName: String): String = {
    val file: File = new File(fileName)
    import java.io.FileInputStream
    val stream: FileInputStream = new FileInputStream(file)
    val buff: BufferedSource = Source.fromInputStream(stream)
    //读取拼装SQL
    val sql = buff
      .getLines()
      .mkString("\n")
    sql
  }


}
======idea 部分代码======end=====

=====集群部分====begin====

执行脚本:sh local_start.sh dwdFilters.sql 

dwdFilters.sql 是没有语法错误的可执行sql文件

local_start.sh 是启动spark任务的

脚本内容:

#!/bin/bash

if [ $# -eq 1 ];then
        spark-submit --master local[4]  --class hx.com.Ods2DwdFilterSql --files /home/etl_admin/spark/config.properties sparkDwdFilter-1.0-SNAPSHOT.jar $1
else
  echo "Please input command. eg: ./$0 filename.sql"
fi

那些写博客只VIP可见的装B者,一点互联网分享精神都没有,还特么不如不分享,这种B不准抄我的这个方法,不然诅咒你天天出bug,其他朋友欢迎,你不点个赞?!



这篇关于sparkSql 直接执行外部 sql/hql文件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程