基于sparksql调用shell脚本执行SQL

[Author]: kwu

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


1、定时调用脚本

[plain]  view plain copy
  1. #!/bin/sh    
  2. # upload logs to hdfs    
  3.     
  4. yesterday=`date --date='1 days ago' +%Y%m%d`    
  5.   
  6. /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 "\  
  7. insert overwrite table st.stock_realtime_analysis PARTITION (DTYPE='01' )  
  8.   select t1.stockId as stockId,  
  9.          t1.url as url,  
  10.          t1.clickcnt as clickcnt,  
  11.          0,  
  12.          round((t1.clickcnt / (case when t2.clickcntyesday is null then   0 else t2.clickcntyesday end) - 1) * 100, 2) as LPcnt,  
  13.          '01' as type,  
  14.          t1.analysis_date as analysis_date,  
  15.          t1.analysis_time as analysis_time  
  16.     from (select stock_code stockId,  
  17.                  concat('http://stockdata.stock.hexun.com/', stock_code,'.shtml') url,  
  18.                  count(1) clickcnt,  
  19.                  substr(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss'),1,10) analysis_date,  
  20.                  substr(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss'),12,8) analysis_time  
  21.             from dms.tracklog_5min  
  22.            where stock_type = 'STOCK'  
  23.              and day =  
  24.                  substr(from_unixtime(unix_timestamp(), 'yyyyMMdd'), 1, 8)  
  25.            group by stock_code  
  26.            order by clickcnt desc limit 20) t1  
  27.     left join (select stock_code stockId, count(1) clickcntyesday  
  28.                  from dms.tracklog_5min a  
  29.                 where stock_type = 'STOCK'  
  30.                   and substr(datetime, 1, 10) = date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss'),1)  
  31.                   and substr(datetime, 12, 5) <substr(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss'), 12, 5)  
  32.                   and day = '${yesterday}'  
  33.                 group by stock_code) t2  
  34.       on t1.stockId = t2.stockId;  
  35.   "\  
  36.     
  37. 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:

[plain]  view plain copy
  1. add jar /opt/bin/UDF/hive-udf.jar;  
  2. create temporary function udtf_stockidxfund as 'com.hexun.hive.udf.stock.UDTFStockIdxFund';  
  3. create temporary function udf_getbfhourstime as 'com.hexun.hive.udf.time.UDFGetBfHoursTime';  
  4. create temporary function udf_getbfhourstime2 as 'com.hexun.hive.udf.time.UDFGetBfHoursTime2';  
  5. create temporary function udf_stockidxfund as 'com.hexun.hive.udf.stock.UDFStockIdxFund';  
  6. create temporary function udf_md5 as 'com.hexun.hive.udf.common.HashMD5UDF';  
  7. create temporary function udf_murhash as 'com.hexun.hive.udf.common.HashMurUDF';  
  8. create temporary function udf_url as 'com.hexun.hive.udf.url.UDFUrl';  
  9. create temporary function url_host as 'com.hexun.hive.udf.url.UDFHost';  
  10. create temporary function udf_ip as 'com.hexun.hive.udf.url.UDFIP';  
  11. create temporary function udf_site as 'com.hexun.hive.udf.url.UDFSite';  
  12. create temporary function udf_UrlDecode as 'com.hexun.hive.udf.url.UDFUrlDecode';  
  13. create temporary function udtf_url as 'com.hexun.hive.udf.url.UDTFUrl';  
  14. create temporary function udf_ua as 'com.hexun.hive.udf.useragent.UDFUA';  
  15. create temporary function udf_ssh as 'com.hexun.hive.udf.useragent.UDFSSH';  
  16. create temporary function udtf_ua as 'com.hexun.hive.udf.useragent.UDTFUA';  
  17. create temporary function udf_kw as 'com.hexun.hive.udf.url.UDFKW';  
  18. create temporary function udf_chdecode as 'com.hexun.hive.udf.url.UDFChDecode';  

设置ui的端口

[plain]  view plain copy
  1. --conf spark.ui.port=4075   

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


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

[plain]  view plain copy
  1. --executor-memory 6g --total-executor-cores 45  



原来的语句是用hive -e 执行的,修改为spark后速度大加快了。原来为15min,提升速度后为 45s.

你可能感兴趣的:(基于sparksql调用shell脚本执行SQL)