文章目录

  • 一 热度关键词接口
    • 1 Sugar配置
      • (1)图表配置
      • (2)接口地址
      • (3)数据格式
      • (4)执行SQL
    • 2 数据接口实现
      • (1)创建关键词统计实体类
      • (2)Mapper层:创建KeywordStatsMapper
      • (3)Service层:创建KeywordStatsService接口
      • (4)Service层:创建KeywordStatsServiceImpl
      • (5)Controller层:在SugarController中增加方法
      • (6)测试
    • 3 整体效果
  • 二 项目部署流程

一 热度关键词接口

1 Sugar配置

(1)图表配置

(2)接口地址

https://m23o108551.zicp.fun/api/sugar/keyword?date=20221213

(3)数据格式

{"status": 0,"data": [{"name": "海门","value": 1},{"name": "鄂尔多斯","value": 1}]
}

(4)执行SQL

表中数据格式:

根据关键词的出现类型分配不同的热度分数

  • 搜索关键词=10分
  • 下单商品=5分
  • 加入购物车=2分
  • 点击商品=1分
  • 其他=0分

其中ClickHouse函数multiIf类似于case when

select keyword,sum(keyword_stats_2022.ct *
multiIf(source='SEARCH',10,source='ORDER',5,source='CART',2,source='CLICK',1,0
)) ct
from keyword_stats_2022 where toYYYYMMDD(stt)=20221216
group by keyword order by ct desc limit 5;

2 数据接口实现

(1)创建关键词统计实体类

package com.hzy.gmall.publisher.beans;/*** Desc: 关键词统计实体类*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class KeywordStats {private String stt;private String edt;private String keyword;private Long ct;private String ts;
}

(2)Mapper层:创建KeywordStatsMapper

package com.hzy.gmall.publisher.mapper;public interface KeywordStatsMapper {@Select("select keyword,sum(keyword_stats_2022.ct * " +"multiIf(" +"    source='SEARCH',10," +"    source='ORDER',5," +"    source='CART',2," +"    source='CLICK',1," +"    0" +")) ct  " +" from keyword_stats_2022 where toYYYYMMDD(stt)=#{date}" +" group by keyword order by ct desc limit #{limit};")List<KeywordStats> selectKeywordStats(@Param("date") Integer date,@Param("limit") Integer limit);
}

(3)Service层:创建KeywordStatsService接口

package com.hzy.gmall.publisher.service;public interface KeywordStatsService {List<KeywordStats> getKeywordStats(Integer date,Integer limit);
}

(4)Service层:创建KeywordStatsServiceImpl

package com.hzy.gmall.publisher.service.impl;@Service
public class KeywordStatsServiceImpl implements KeywordStatsService {@Autowiredprivate KeywordStatsMapper keywordStatsMapper;@Overridepublic List<KeywordStats> getKeywordStats(Integer date, Integer limit) {return keywordStatsMapper.selectKeywordStats(date,limit);}
}

(5)Controller层:在SugarController中增加方法

@Autowired
private KeywordStatsService keywordStatsService;@RequestMapping("/keyword")
public String getKeywordStats(@RequestParam(value = "date",defaultValue = "0") Integer date,@RequestParam(value = "limit",defaultValue = "20") Integer limit) {if (date == 0) {date = now();}List<KeywordStats> keywordStatsList = keywordStatsService.getKeywordStats(date, limit);StringBuilder jsonBuilder = new StringBuilder("{\"status\": 0,\"data\": [");for (int i = 0; i < keywordStatsList.size(); i++) {KeywordStats keywordStats = keywordStatsList.get(i);jsonBuilder.append("{\"name\": \""+keywordStats.getKeyword()+"\",\"value\": "+keywordStats.getCt()+"}");if (i < keywordStatsList.size() - 1){jsonBuilder.append(",");}}jsonBuilder.append("]}");return jsonBuilder.toString();
}

(6)测试

$API_HOST/api/sugar/keyword?date=20221216

3 整体效果

二 项目部署流程

---项目打包 、部署到服务器1.修改realtime项目中的并行度(资源足够则不用修改),并打jar包-BaseLogApp -KeywordStatsApp 2.修改flink-conf.yml(注意冒号后面有一个“空格”)taskmanager.memory.process.size: 2000mtaskmanager.numberOfTaskSlots: 83.启动zk、kf、clickhouse、flink本地集群(bin/start-cluster.sh)、logger.sh4.启动BaseLog、KeywordStatsApp-独立分窗口启动bin/flink run -m hadoop101:8081 -c com.hzy.gmall.realtime.app.dwd.BaseLogApp ./gmall2022-realtime-1.O-SNAPSHOT-jar-with-dependencies.jarbin/flink run -m hadoop101:8081 -c com.hzy.gmall.realtime.app.dws.KeywordStatsApp ./gmall2022-realtime-1.O-SNAPSHOT-jar-with-dependencies.jar-编写realtime.sh脚本echo "========BaseLogApp==============="/opt/module/flink-local/bin/flink run -m hadoop101:8081 -c com.hzy.gmall.realtime.app.dwd.BaseLogApp /opt/module/flink-local/gmall2022-realtime-1.O-SNAPSHOT-jar-with-dependencies.jar>/dev/null 2>&1  &echo "========KeywordStatsApp==============="/opt/module/flink-local/bin/flink run -m hadoop101:8081 -c com.hzy.gmall.realtime.app.dws.KeywordStatsApp /opt/module/flink-local/gmall2022-realtime-1.O-SNAPSHOT-jar-with-dependencies.jar>/dev/null 2>&1  &5.打包publisher并上传运行6.花生壳添加hadoop上的publisher地址映射
hadoop101:8070/api/sugar/keyword/
aliyun服务器直接访问公网地址即可7.sugar修改空间映射8.运行模拟生成日志的jar包,查看效果9.常见问题排查-启动flink集群,不能访问webUI(logger使用的8081,flink同样使用8081,造成冲突)查看日志,端口冲突  lsof -i:8081 -集群启动之后,应用不能启动bin/flink run -m hadoop101:8081 -c com.hzy.gmall.realtime.app.dwd.BaseLogApp ./gmall2022-realtime-1.O-SNAPSHOT-jar-with-dependencies.jar*phoenix驱动不识别,需要加Class.forName指定*找不到hadoop和hbase等相关的jar原因:NoClassDefoundError:这个错误编译期间不会报,运行期间才会包。原因是运行期间找不到这个类或无法加载,这个比较复杂。我的做法是把类所在jar包放在flink lib下重启集群就不会出现这个问题。解决:>在my.env环境变量中添加export HADOOP_CLASSPATH=`hadoop classpath`>在flink的lib目录下创建执行hbase的lib的软连接ln -s /opt/module/hbase/lib/ ./*和官方jar包冲突Caused by: java.lang.ClassCastException: org.codehaus.janino.CompilerFactory cannot be cast to org.codehaus.commons.compiler.ICompilerFactory将程序中flink、hadoop相关以及三个日志包的scope调整为provided,<scope>provided</scope>注意:不包含connector相关的

【实时数仓】热度关键词接口、项目整体部署流程相关推荐

  1. Flink 实时数仓伪分布虚拟机 (所有组件部署完成)

    Flink 实时数仓伪分布虚拟机 (所有组件部署完成)-- 镜像下载 博主通过学习尚硅谷的Flink的实时数仓,将部署好的实时数仓虚拟机打包成ovf文件,由于博主电脑内存较小,博主使用了伪分布式集群搭 ...

  2. 用 Flink 取代 Spark Streaming,知乎实时数仓架构演进【推荐】

    "数据智能" (Data Intelligence) 有一个必须且基础的环节,就是数据仓库的建设,同时,数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务.从智能商业的角 ...

  3. 用Flink取代Spark Streaming,知乎实时数仓架构演进

    "数据智能" (Data Intelligence) 有一个必须且基础的环节,就是数据仓库的建设,同时,数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务.从智能商业的角 ...

  4. 「万字长文」实时数仓实践以及架构的演进

    前言 "数据智能" (Data Intelligence) 有一个必须且基础的环节,就是数据仓库的建设,同时,数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务. 从智能 ...

  5. 实时数仓实践以及架构

    前言 "数据智能" (Data Intelligence) 有一个必须且基础的环节,就是数据仓库的建设,同时,数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务. 从智能 ...

  6. 实时数仓入门训练营:实时计算 Flink 版 SQL 实践

    简介:<实时数仓入门训练营>由阿里云研究员王峰.阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭建此次训练营的课程体系,精心打 ...

  7. ULTRON — 360基于Flink的实时数仓平台

    前言:ULTRON项目从去年开始立项,伴随着Flink社区的成熟不断迭代.在开发过程中,面临着许多困难,一方面是人手紧张,另一方面是需要打通和实现的功能点复杂,从底层K8S/YARN到FLINK核心的 ...

  8. 58同城宝实时数仓建设实践

    背景 作为国内领先的覆盖生活全领域的服务平台,58同城业务覆盖招聘.房产.汽车.金融等生活领域的各个方面.58同城宝是针对生活服务信息做广告推广的平台,依托58同城海量的商户和每天更新的生活数据,58 ...

  9. 怎样不停请求接口实现实时刷新_快狗打车实时数仓和基于Hologres的数据服务建设...

    前言 数据的实时化是最近几年数据行业很重要的趋势,我们在去年底也建立起新一代的实时数仓,但是在数据应用上一直没有取得很大的突破,我们希望实时数仓不仅仅是支撑大屏.核心实时报表.个别实时应用等简单的场景 ...

最新文章

  1. Python 虚拟环境 virtualenv
  2. MPB:南京​湖泊所王建军组-​群落构建过程的定量指标——扩散-生态位连续体指数...
  3. 【转载】Python对接六大主流数据库,只需三步
  4. JavaScript中类型检测
  5. python2 'str' object has no attribute 'decode'
  6. Win10上线摸鱼神器,已经被玩疯了!
  7. sql企业管理器_Valentina Studio for mac(开源数据库管理器)
  8. 异常检测算法之LOF
  9. 博途v15安装过程中提示出错_博图V15为什么安装失败?
  10. matlab-线性代数 判断 det 矩阵是否可逆
  11. Android应用基础知识(4)---Android处理运行时变更
  12. MySQL备份/还原 Unknown storage engine 'InnoDB'
  13. CCNA认证(2)--网络互联基础
  14. idea导入项目出现时钟标志
  15. C语言期中考试答案——题目+答案·北民大
  16. 基于51单片机的指纹锁设计(附带密码解锁)
  17. HTML+CSS 基础 之页签
  18. 乔布斯往事:游戏之神卡马克眼中的“英雄和傻瓜”
  19. Linux wifi自动连接脚本
  20. 通信算法之九十七:4G LTE通信系统 PHICH信道处理流程

热门文章

  1. 有关ARM RTC时钟使用心得
  2. 安卓系统查看分区挂载信息
  3. 国内yum源的安装(163,阿里云,epel)
  4. java 使用mediainfo_使用mediainfo工具统计每个视频文件(媒体文件)播放时长
  5. 差分进化算法之Matlab实现
  6. 2G到5G演变进化之路
  7. HTTP协议——HTTP报文组成
  8. zimuku字幕下载 v1.0
  9. PyCharm连接远程服务器详细教程
  10. Thinkpad T61 fn+f5不能控制无线解决