基於sparksql呼叫shell指令碼執行SQL

2021-07-12 05:27:09 字數 4067 閱讀 9830

基於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: --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

0else 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('', 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'

andday =

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) 'yyyy-mm-dd hh:mm:ss'), 12, 5)

andday = '$'

group

by stock_code) t2

on t1.stockid = t2.stockid;

"\sqoop export --connect jdbc:mysql: --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

AWK呼叫SHELL,並將變數傳遞給SHELL

在shell指令碼中呼叫awk是非常自然和簡單的,以前還寫過乙個關於awk shell相互傳遞變數的文章 awk與shell之間的變數傳遞方法 在awk指令碼中,如果需要呼叫shell指令碼 命令,則需要使用system 函式,如果需要將變數傳遞給被呼叫的shell,則寫為 system sh my...

AWK呼叫SHELL,並將變數傳遞給SHELL

在shell指令碼中呼叫awk是非常自然和簡單的,以前還寫過乙個關於awk shell相互傳遞變數的文章 awk與shell之間的變數傳遞方法 在awk指令碼中,如果需要呼叫shell指令碼 命令,則需要使用system 函式,如果需要將變數傳遞給被呼叫的shell,則寫為 system sh my...

迅為IMX6ULL開發板C程式呼叫shell

本章節介紹的是在 linux 系統環境下 linux c 呼叫 shell 命令控制gpio輸入輸出步驟。shell 作為linux 作業系統的外殼,為使用者提供使用作業系統的介面。它是命令語言 命令解釋程式及程式語言的統稱,它解釋由使用者輸入的命令並且把它們送到核心。使用shell命令直接操作 s...