spark查询hive的简单应用

使用原因:sparksql应用集群内存,查询更快

使用方法:编写代码逻辑,使用spark-submit提交到yarn上执行

简单代码示例

    核心思想就是编写查询sql,然后对获取到的df数据集再进行逻辑处理,转存

object Main extends Logging{
  def main(args: Array[String]): Unit = {
    //第一个参数:处理的hive日期分区
    //第二个参数:选择处理的字段
    //第三个参数(可空):处理经纬度时,去除噪声点的距离(m)
    val tablename:String=StoreConfig.hivetablename
    val database:String = StoreConfig.hivedatabase
    
    //构造spark连接,选择hive数据库
    val spark = SparkSession.builder().enableHiveSupport()
                        .appName("SparkTest").getOrCreate()
    spark.sql(" use "+database+" ").collect()
    base_imei(spark,args(0))
  }
}  
 //进行sql编写和对获取的df数据集进行相关操作
 def base_imei(spark: SparkSession,date:String): Unit ={

    val res = spark.sql("select *  from "+tablename")
      .rdd.mapPartitions { rows =>
      var sum = 0
      val handler=new HbaseHandler()
      try {
        rows.foreach { r =>
          sum = sum + 1
          handler.insertIMEI(basetablename,r.getString(0),r.getLong(1),date)
        }
      } catch {
        case e: Throwable =>
          logError("", e)
      } finally {
        handler.close()
        handler.client.close()
      }
      Array(sum).toIterator
    }.collect()
    logInfo(s"baseimei总数 ${res.sum}")
  }

提交操作:

搭建环境:下载spark-2.3.0按装包,将hive/hbase配置文件拷入目录下conf目录,hive/hbase依赖包拷入目录下jars文件夹,idea 打包的 jar 上传到jars文件夹

1.进入sparkshell 可以进行sparksql查询hive

        ./spark-shell --executor-memory 40G

        例句:spark.sql("select * from test1").show(1000)

2.运行提交的项目jar包:(指定内存、线程数参数,jar包需要的参数,如下面的参数cs1等)

        ./spark-submit --driver-memory 40G --master local[40]  --class Main test.jar cs1 cs2 cs3

        线上多节点spark 使用yarn模式,替换loacl模式

示例:

        ./spark-submit --master yarn --num-executors 100 --executor-memory 20G --executor-cores 5 --driver-memory 5G --conf spark.default.parallelism=1500 --class Main /home/jar/spark-with-exit.jar 2017-10-01 3

提交参数

    --num-executors    设置Spark作业总共要用多少个Executor进程来执行
    --executor-memory  设置每个Executor进程的内存
    --executor-cores   设置每个Executor进程的CPU core数量
    num-executors乘以executor-memory,就代表了你的Spark作业申请到的总内存量
    --conf spark.sql.shuffle.partitions=1024 : 这个是调整shuffle任务数量的配置
    --driver-memory    设置Driver进程的内存。
    参数调优建议:Driver的内存通常来说不设置,或者设置1G左右应该就够了。唯一需要注意的一点是,如果需要使用collect算子将RDD的数据全部拉取到Driver上进行处理,那么必须确保Driver的内存足够大,否则会出现OOM内存溢出的问题

你可能感兴趣的:(spark,hive)