Spark-SQL优化案例---股票点击实时排行
来源:互联网 发布:无线传感器网络试卷 编辑:程序博客网 时间:2024/06/05 22:55
Spark-SQL优化案例---股票点击实时排行,需求每天股票点击统计排列统计、每小时股票统计排列统计,及天与小时的环比变化。
1、时间的取值采用Linux中的shell来取值,虽然sql中也能取到时间或者UDF来实现,但是shell来取明显更快。
#!/bin/sh# upload logs to hdfssource /etc/profileyesterday=`date --date='1 days ago' +%Y%m%d`yesterday2=`date --date='1 days ago' +%Y-%m-%d`today=`date --date='0 days ago' +%Y%m%d`today2=`date --date='0 days ago' +%Y-%m-%d`nowtime=`date --date='0 days ago' +%H:%M:%S`onehourage=`date --date='1 hours ago' "+%Y-%m-%d %H:%M:%S"`twohourage=`date --date='2 hours ago' "+%Y-%m-%d %H:%M:%S"`
取出昨天与今天的日期,及现在的时间与过去1小时及2小时的时间点
调用spark-sql的shell命令
/opt/modules/spark/bin/spark-sql --master spark://10.130.2.20:7077 --executor-memory 10g --total-executor-cores 120 --conf spark.ui.port=54689 --driver-memory 5g -e
这里类似 hive -e "select day,count(*) from test group by day;" 操作
2、每天股票点击统计排列统计及天的环比变化
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, '${today2}' analysis_date, '${nowtime}' analysis_timeFROM ( SELECT stock_code stockId, concat('http://stockdata.stock.hexun.com/', stock_code,'.shtml') url, COUNT(1) clickcnt FROM dms.tracklog_5min WHERE stock_type = 'STOCK' AND DAY ='${today}' GROUP BY stock_code ORDER BY clickcnt DESC limit 20) t1LEFT JOIN ( SELECT stock_code stockId, COUNT(1) clickcntyesday FROM dms.tracklog_5min a WHERE stock_type = 'STOCK' AND SUBSTR(DATETIME, 1, 10) = '${yesterday2}' AND SUBSTR(DATETIME, 12, 5) < '${nowtime}' AND DAY = '${yesterday}' GROUP BY stock_code) t2ON t1.stockId = t2.stockId;
查询的时候,注意确定好 day 即partion的范围。
3、每小时股票点击统计排列统计及小时的环比变化
INSERT overwrite TABLE st.stock_realtime_analysis PARTITION ( DTYPE='02' )SELECT t1.stockId stockId, t1.url url, t1.clickcnt clickcnt, 0, ROUND( ( t1.clickcnt / ( CASE WHEN t2.clickcnt IS NULL THEN 0 ELSE t2.clickcnt END ) - 1 ) * 100, 2 ) LPcnt, '02' type, '${today2}' analysis_date, '${nowtime}' analysis_timeFROM ( SELECT stock_code stockId, concat('http://stockdata.stock.hexun.com/', stock_code, '.shtml') url, COUNT(*) clickcnt FROM dms.tracklog_5min WHERE DAY = '${today}' AND stock_type = 'STOCK' AND DATETIME >= '${onehourage}' GROUP BY stock_code ORDER BY clickcnt DESC limit 20 ) t1LEFT JOIN ( SELECT stock_code stockId, COUNT(*) clickcnt FROM dms.tracklog_5min WHERE DAY = '${today}' AND stock_type = 'STOCK' AND DATETIME <= '${onehourage}' AND DATETIME >= '${twohourage}' GROUP BY stock_code ) t2ON t1.stockId = t2.stockIdORDER BY clickcnt DESC limit 20;
这里有个坑,子查询里已有order by 了,在shell中查询是正常排序的,但是 insert到 结果表中的时候,顺序就乱了,必须要在外层再加一个 order by 。
我们用的是 hive 1.1 , spark1.4.1 可能在升级版本后,会解决这个问题
4、sqoop导入到关系库中
sqoop export --connect jdbc:mysql://10.130.3.211:3306/charts --username dbcharts --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;sqoop export --connect jdbc:mysql://10.130.3.211:3306/charts --username dbcharts --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=02;
5、总结:
优化后每天的任务执行时间约1分钟,每小时的任务执行在半分钟内。原来都是10分钟以上的。
2 0
- Spark-SQL优化案例---股票点击实时排行
- Spark-Streaming与Spark-Sql整合实现实时股票排行---通过kafka列队数据
- Spark-Streaming与Spark-Sql整合实现实时股票排行---通过kafka列队数据
- Spark-Streaming与Spark-Sql整合实现实时股票排行---通过kafka列队数据
- Spark 实时计算整合案例
- Spark SQL+Spark Streaming案例
- Hive 股票数据SQL分析[Hive 案例]
- Spark实时流计算Java案例
- Spark+Kafka构建实时分析Dashboard案例
- SparkStreaming+Kafka+Spark SQL+TopN+Mysql 电商广告点击综合案例
- Spark SQL电影分析案例
- Spark SQL DataFrame 小案例
- Spark Streaming 结合Spark SQL 案例
- sql优化-典型案例
- SQL优化案例(1)
- SQL优化案例
- SQL优化案例-1
- SQL优化案例一则
- java 内部类(第二讲 staitc)
- Spring Mvc学习笔记(一)续
- apache的虚拟域名rewrite配置以及.htaccess的使用。
- 两个APP之间实现跳转
- FMDB使用介绍
- Spark-SQL优化案例---股票点击实时排行
- Weblogic 服务器SSL证书安装指南
- 存储器系统和局部性原理的简单介绍
- MATLAB .avi 视频文件转成 .mat 文件
- hdu 1800 (字符串哈希)
- 使用 Yocto Project 构建自定义嵌入式 Linux 发行版
- 规划 linux 下 apache nginx php mysql java tomcat jsp服务器
- Struts2 常用常量配置
- Yocto tips (17): Yocto License问题:restricted license not whitelisted in LICENSE_FLAGS_WHITELIST