基于sparksql调用shell脚本执行SQL

转载 2016年05月30日 23:51:10

基于sparksql调用shell脚本执行SQL,sparksql提供了类似hive中的 -e , -f ,-i的选项
1、定时调用脚本

#!/bin/sh  
# upload logs to hdfs  

yesterday=`date --date='1 days ago' +%Y%m%d`  

/opt/modules/spark/bin/spark-sql -i /opt/bin/spark_opt/init.sql --master spark://10.130.2.20:7077 --executor-memory 6g --total-executor-cores 45 --conf spark.ui.port=4075   -e "\
insert overwrite table st.stock_realtime_analysis PARTITION (DTYPE='01' )
  select t1.stockId as stockId,
         t1.url as url,
         t1.clickcnt as clickcnt,
         0,
         round((t1.clickcnt / (case when t2.clickcntyesday is null then   0 else t2.clickcntyesday end) - 1) * 100, 2) as LPcnt,
         '01' as type,
         t1.analysis_date as analysis_date,
         t1.analysis_time as analysis_time
    from (select stock_code stockId,
                 concat('http://stockdata.stock.hexun.com/', stock_code,'.shtml') url,
                 count(1) clickcnt,
                 substr(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss'),1,10) analysis_date,
                 substr(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss'),12,8) analysis_time
            from dms.tracklog_5min
           where stock_type = 'STOCK'
             and day =
                 substr(from_unixtime(unix_timestamp(), 'yyyyMMdd'), 1, 8)
           group by stock_code
           order by clickcnt desc limit 20) t1
    left join (select stock_code stockId, count(1) clickcntyesday
                 from dms.tracklog_5min a
                where stock_type = 'STOCK'
                  and substr(datetime, 1, 10) = date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss'),1)
                  and substr(datetime, 12, 5) <substr(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss'), 12, 5)
                  and day = '${yesterday}'
                group by stock_code) t2
      on t1.stockId = t2.stockId;
  "\

sqoop export  --connect jdbc:mysql://10.130.2.245:3306/charts   --username guojinlian  --password Abcd1234  --table stock_realtime_analysis  --fields-terminated-by '\001' --columns "stockid,url,clickcnt,splycnt,lpcnt,type" --export-dir /dw/st/stock_realtime_analysis/dtype=01; 

init.sql内容为加载udf:

add jar /opt/bin/UDF/hive-udf.jar;
create temporary function udtf_stockidxfund as 'com.hexun.hive.udf.stock.UDTFStockIdxFund';
create temporary function udf_getbfhourstime as 'com.hexun.hive.udf.time.UDFGetBfHoursTime';
create temporary function udf_getbfhourstime2 as 'com.hexun.hive.udf.time.UDFGetBfHoursTime2';
create temporary function udf_stockidxfund as 'com.hexun.hive.udf.stock.UDFStockIdxFund';
create temporary function udf_md5 as 'com.hexun.hive.udf.common.HashMD5UDF';
create temporary function udf_murhash as 'com.hexun.hive.udf.common.HashMurUDF';
create temporary function udf_url as 'com.hexun.hive.udf.url.UDFUrl';
create temporary function url_host as 'com.hexun.hive.udf.url.UDFHost';
create temporary function udf_ip as 'com.hexun.hive.udf.url.UDFIP';
create temporary function udf_site as 'com.hexun.hive.udf.url.UDFSite';
create temporary function udf_UrlDecode as 'com.hexun.hive.udf.url.UDFUrlDecode';
create temporary function udtf_url as 'com.hexun.hive.udf.url.UDTFUrl';
create temporary function udf_ua as 'com.hexun.hive.udf.useragent.UDFUA';
create temporary function udf_ssh as 'com.hexun.hive.udf.useragent.UDFSSH';
create temporary function udtf_ua as 'com.hexun.hive.udf.useragent.UDTFUA';
create temporary function udf_kw as 'com.hexun.hive.udf.url.UDFKW';
create temporary function udf_chdecode as 'com.hexun.hive.udf.url.UDFChDecode';

设置ui的端口

--conf spark.ui.port=4075 

默认为4040,会与其他正在跑的任务冲突,这里修改为4075

设定任务使用的内存与CPU资源

--executor-memory 6g --total-executor-cores 45

整理对Spark SQL的理解

Catalyst定位 其他系统如果想基于Spark做一些类sql、标准sql甚至其他查询语言的查询,需要基于Catalyst提供的解析器、执行计划树结构、逻辑执行计划的处理规则体系等类体系来实现执行计...

基于sparksql调用shell脚本执行SQL

基于sparksql调用shell脚本执行SQL,sparksql提供了类似hive中的 -e , -f ,-i的选项

crontab shell调用spark-sql,实现周期性动态SQL批量自动执行

对于熟悉Scala开发的人来说,对于spark-sql的使用,直接jar包中写入代码处理就能轻松实现动态语句的执行。 但是对于我,不打算学习Scala和Java语言,但是又想定时执行时间推延的周期、定...
  • oufuji
  • oufuji
  • 2015年12月18日 13:11
  • 2808

Spark-shell批量命令执行脚本

批量执行spark-shell命令,并指定提交参数#!/bin/bashsource /etc/profileexec $SPARK_HOME/bin/spark-shell --queue tv ...

如何在spark-shell命令行执行spark hql

前面已经有篇文章介绍如何编译包含hive的spark-assembly.jar了,不清楚的可以翻看一下前面的文章。 cloudera manager装好的spark,直接执行spark-shell进入...

在Yarn上运行spark-shell和spark-sql命令行

在Yarn上运行spark-shell和spark-sql命令行

spark-shell脚本浅析(Spark2.0.0)

一、首先,po出spark-shell脚本代码,位置坐标为:$SPARK_HOME/bin/spark-shell#!/usr/bin/env bash # # Licensed to the Apa...

提交spark作业:如何在java中执行shell脚本

参考java运行shell脚本方法示例 中华石衫 java1.6 API 文档场景一. 怎么在J2EE后端调用并执行spark作业呢? 执行spark作业通常用一个封装了./spark-sub...

spark sql

一:概要 spark sql是一个用于结构化数据处理的spark模块。不像是spark RDD API,Spark  SQL提供的接口提供了数据的结构和计算相关的信息。内部来说,sp...

spark执行sql语句

spark-sql回车    接下来就是执行hive的sql了。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于sparksql调用shell脚本执行SQL
举报原因:
原因补充:

(最多只允许输入30个字)