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

news2024/10/5 12:50:15

文章目录

  • 一 热度关键词接口
    • 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 {

    @Autowired
    private KeywordStatsMapper keywordStatsMapper;

    @Override
    public 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: 2000m
	taskmanager.numberOfTaskSlots: 8

3.启动zk、kf、clickhouse、flink本地集群(bin/start-cluster.sh)、logger.sh

4.启动BaseLog、KeywordStatsApp
	-独立分窗口启动
		bin/flink run -m hadoop101:8081 -c com.hzy.gmall.realtime.app.dwd.BaseLogApp ./gmall2022-realtime-1.O-SNAPSHOT-jar-with-dependencies.jar


		bin/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相关的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小黑hbase终于勉强跑到了自己的m1 Macbook上啦,虽然终端用不了,但是能从happybase访问的日常积累:happybase简单使用

1.happybase连接 # 连接操作 import happybase# 建立连接 con happybase.Connection(localhost, 9090) con.open() # 输出所有表名称 print(con.tables()) # 关闭传输 con.close() con.open()2.创建表格 # 创建表格 con happybase.Connection(localhost, 9090) # 默认9090…

Android 图像混合技术

Android 图像混合技术 色彩知识 色彩 光学三原色 光学三原色由&#xff1a;红、绿、蓝组成。 色值分别是&#xff1a; 红&#xff08;red &#xff09;&#xff1a;#FF0000 RGB&#xff08;255&#xff0c;0&#xff0c;0&#xff09;绿&#xff08;green&#xff09;&am…

第十九讲:神州路由器基础知识

路由器简介路由器&#xff08;Router&#xff09;是连接Internet中多个网络或网段的网络设备&#xff0c;它能将不同网络或网段之间的数据信息进行“翻译”&#xff0c;以使它们能够相互“读”懂对方的数据&#xff0c;实现不同网络或网段的互联互通。此外&#xff0c;它会根据…

数据平台建设指南(上)

前言 年底了&#xff0c;整理了下过去做的一些项目&#xff0c;希望能够给大数据行业的同学提供些大数据平台建设的思路。内容大致分五部分&#xff1a;数据采集&#xff0c;数据存储、数据计算、基础平台以及数据治理篇。由于涉及到的内容较多&#xff0c;打算分成两篇文章&am…

PHY驱动注册部分

SOC可以对PHY 进行配置或者读取PHY 相关状态&#xff0c;这个就需要 PHY 内部寄存器去实现了。PHY 芯片寄存器地址空间为 5位&#xff08;支持访问32个寄存器).IEEE 定义了0~15这 16个寄存器的功能。而 16~31这16 个寄存器由厂商自行实现。 就是说不管你用的哪个厂家的 PHY 芯…

SAP ABAP——SAP简介(三)【S/4 HANA开发环境】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

linux常用命令(三)-目录操作

目录创建 - mkdir 我们可以使用mkdir&#xff08;make directory&#xff09;来创建目录。 示例 目录删除 - rm 可以使用rm&#xff08;remove&#xff09;来删除一个目录 语法 rm [-irf] name ...i&#xff1a;删除前逐一询问确认r&#xff1a;将目录及以下之档案亦逐一删…

转转AB平台的设计与实现

导读 在数据驱动时代&#xff0c;不管是在产品功能迭代还是策略决策时都需要数据的支撑。那么&#xff0c;当我们准备上线一个新功能或者策略时&#xff0c;如何评估新老版本优劣&#xff0c;即数据的可量化就成了问题。这个时候就需要引入 A/B Test 了。 一、A/B Test 是什么…

Tomcat基本用法

Tomcat基本用法一、Tomcat 是什么二、下载安装三、目录结构四、启动服务器五、部署静态页面一、Tomcat 是什么 汤姆猫&#xff1f; 事实上&#xff0c;Java 世界中的 “汤姆猫” 完全不是一回事&#xff0c;但是同样大名鼎鼎 ~ Tomcat 是一个 HTTP 服务器。 前面我们已经学…

公司如何做好舆情监控,舆情监控解决方案有哪些?

随着互联网快速发展&#xff0c;企业网络舆情动态成为决策发展的重要依据&#xff0c;所以做好网络舆情监控至关重要&#xff0c;接下来TOOM舆情监测小编带您简单了解公司如何做好舆情监控&#xff0c;舆情监控解决方案有哪些? 一、公司如何做好舆情监控 舆情监控是指通过不…

Spring Boot 使用 SpringDoc 库的 Swagger3.0

Swagger 定义 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法&#xff0c;参数和模型紧密集成到服务器端的代码&#xff0c;允许API来始终保持同步…

房产管理系统平台安全性分析?

房产管理系统是数图互通公司自主研发的FMCenterV5.0平台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发的一套标准产品&#xff1b;通过在中国100多所高校的成功实施和迭代&#xff0c;形成了一套成熟、完善、全生命周期的房屋资源管理解决方案。 以下是…

FL Studio21电脑版免费音乐编曲宿主软件下载

编曲主要考验电脑的处理器&#xff08;CPU&#xff09;性能、声卡。所以配置电脑的时候有条件的伙伴可以着重考虑这两方面。现在市面上惠普、戴尔、华为、苹果等品牌的电脑&#xff0c;在四五千这个范围的商务本&#xff0c;就可以胜任编曲工作。但是在一些较为庞大的工程中可能…

SolarMesh(微服务监管平台)安装教程

SolarMesh简介 SolarMesh是基于服务网格构建的微服务监管平台。SolarMesh基于 Istio 及容器技术&#xff0c;提供微服务流量监控和管理&#xff0c;提供完善的非侵入式服务治理解决方案&#xff0c;在提供Istio流量管理等基础能力外&#xff0c;还提供多集群纳管、监控告警、W…

为什么全球科技巨头都在布局超高清?

我们能明显地感受到&#xff0c;进入21世纪以来&#xff0c;影像视频所占用人类生活的时间、空间已达到人类诞生以来的最大值。根据《2022全球互联网现象报告》&#xff0c;2021年流媒体视频占互联网带宽流量的53.7%&#xff0c;比2020年提升了4.8%。衣食住行&#xff0c;休闲娱…

十亿人都在用的健康码,运维体系是怎么设计的?

导读&#xff5c;随着疫情防控模式的迭代&#xff0c;健康码访问DAU逐渐趋于下跌&#xff0c;意味着健康码将逐步完成历史使命&#xff0c;见证着疫情的结束。本文特邀腾讯研发工程师李雄政将从技术架构、可观测体系、运营保障体系等运维体系多方面&#xff0c;总结回顾健康码业…

骨传导耳机到底怎么样,五款好用的骨传导耳机推荐

还有很多人不知道骨传导耳机使用感受到底如何&#xff0c;骨传导耳机是开放式的听音方式&#xff0c;在使用骨传导耳机时&#xff0c;会更加安全、耳机的声音相对于入耳式的声音会更加具有空间立体感&#xff0c;具体使用感感受到底如何&#xff0c;看下文大家就有一定的了解了…

服务器ssl证书升级

最近服务器扫描出ssl证书是使用弱哈希算法签名的SSL证书(CVE-2004-2761)【原理扫描】&#xff0c;要求联系证书颁发机构重新颁发证书。使用弱哈希算法签名SSL证书的端口有1433&#xff0c;3389。所有要对这俩端口配置一个新的证书。算法且满足sha256。 下面是我我服务器证书升…

国际原子时(TAI),GPS时间,协调世界时(UTC)以及rinex文件起止时间

最近学习使用PRIDE-PPPAR处理GNSS原始数据&#xff0c;判断rinex文件是不是单天的问题实在让人费解。必应搜索了一下&#xff0c;结合手头上的软件&#xff0c;问题大致弄清楚了。 比如现在有1个rinex文件&#xff1a;GPSR0190.19O&#xff0c;如果用PRIDE-PPPAR 的命令pdp3处…

零售行业R公司对接亚马逊Amazon Device EDI项目案例

为了满足平台货物的多样性&#xff0c;亚马逊Amazon邀请了来自全球各地的优秀供应商加入其供应链体系。要管理如此庞大的供应商群体&#xff0c;需要完成大量的数据处理工作&#xff0c;位列世界500强的Amazon是如何传输这些数据的呢&#xff1f; 答案是&#xff1a;通过EDI&a…