Flink 大数据实战演练01

在学习大数据时可能会遇到自己一身本领,却苦于没有好的数据集,让自己有个完美的用武之地。自己造数据存在一些列问题。

  • 数据不够真实

  • 数据量不够,无法体现"大数据"优势

  • 数据质量差无法评估分析效果

本系列主要内容

  • 总体技术架构

  • 数据介绍

  • 分析目标

  • 技术准备

  • 实现细节

  • 踩坑记录

总体技术架构

技术架构图

数据集介绍

  • 数据来源 kaggle 官网有丰富的数据,可以选择感兴趣的进行处理

  • 数据总量 1.6G , 总记录 1615940

原始数据中包含23列,以下是重要字段介绍

字段 描述 示例值
Job Id 1089843540111562
Experience 工作年限 5 to 15 Years
Qualifications 资历 M.Tech
Salary Range 薪资范围 99K
location 位置 Douglas
Country 国家 Isle of Man
Work Type 工作类型 Intern
Company Size 公司规模 26801
Job Posting Date 岗位发布日期 2022-04-24

分析目标

先定一个小目标,分析不同年份,不同工作年限的平均薪资情况,以评估行情走势。(刚开始以跑通整个流程为主,后面再丰富不同的分析场景)

技术准备

CSV通常纯文本操作就可以解析,本文下载的原始文件中字符串包含一些分隔符,比如某单元格内容是 "Hello ,World" ,如果自己处理这些逻辑比较复杂, 我们需要一款好用的开源的CSV解析工具。

我们将原始数据加工发送到Kafka 中,分析任务用kafka作为数据源,每隔一段时间统计一次(比如一小时,甚至一天)。因此我们还可能用到Windows , Flink 一些聚合操作。我们将最终统计结果保存到数据库,我们可以自定义Sink ,也可以使用JDBC SinK

  • CSV 解析

本文选用opencsv,解析csv文件。

XML 复制代码
       <dependency>
            <groupId>com.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>5.4</version>
        </dependency>
  • Kafka Source 使用

引入依赖

XML 复制代码
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-kafka_2.11</artifactId>
            <version>1.14.4</version>
        </dependency>

使用Demo

java 复制代码
        KafkaSource<String> source = KafkaSource.<String>builder()
                .setBootstrapServers(Constants.BOOTSTRAP_SERVER)
                .setTopics(Constants.TOPIC)
                .setGroupId(Constants.CONSUMER_GROUP)
                .setValueOnlyDeserializer(new SimpleStringSchema())
                .build();

        DataStreamSource<String> kafkaStream = env.fromSource(source, WatermarkStrategy.noWatermarks(), "Kafka Source");
  • Window

考虑到数据不能被重复计算,因此我们选用Tumbling Window ,由于我们是每一天或者每小时处理一次,这里的时间是"机器时间",所以应当使用 ** TumblingProcessingTimeWindows ** 而非TumblingEventTimeWindows

聚合操作Function 我们选择AggregateFunction

  • Sink

可以使用 JDBC Sink , 也可以简单自定义Sink 。

无论自定义Sink 还是使用已有的JDBC Sink,不可避免和JDBC相关API 打交道。(简单起见,不引入MyBatis 框架,也不使用Spring)

这些代码相信已经勾起大家沉睡的记忆

java 复制代码
        PreparedStatement ps = ...
        ps.setString(1,value.getYear());
        ps.setInt(2,value.getExperience());
        ps.setInt(3,value.getCount());
        double avgSalary = value.getSumSalary()/value.getCount();
        ps.setDouble(4,avgSalary);
        ps.setDouble(5,value.getSumSalary());

项目结构

项目结构

最终分析结果示例数据

本文总结

限于篇幅本文主要确定总体技术架构,技术选型,下期继续实现细节和踩坑记录总结

相关推荐
企业智能研究15 小时前
企业如何落地企微私域智能客服来降本增效:从技术选型到实施落地的完整指南
大数据·人工智能·企业微信·智能客服
delishcomcn16 小时前
边缘计算+AI模型:电化铝分切装备的智能化改造路径
大数据·人工智能·边缘计算
太原geo小侦探16 小时前
2026门店AI流量实测测评:同为实体门店,AI问答曝光差距在哪?
大数据·人工智能·生活·流量运营·内容运营
AI大法师16 小时前
一个机场如何被做成 IP 场景:宝可梦机场的设计方法总结
大数据·人工智能·设计模式·新媒体运营
朴马丁18 小时前
从制造到智造:PLM如何赋能企业研发创新
大数据·运维·人工智能·食品行业·流程行业plm·化工新材料行业·新能源材料行业
大大大大晴天️21 小时前
Hudi + StarRocks 查询加速:原理与实践
大数据·starrocks·hudi
夜郎king21 小时前
解决AI图文解析偏差:CodeBuddy多模型交叉校验+腾讯地图Skill经纬度定位实战
大数据·人工智能
智慧物业老杨21 小时前
物业费公共收益维修资金三类资金分账的合规管控
大数据·人工智能·物联网
不动明王198421 小时前
Presto 查询引擎内核详解:Worker 本地执行模型——从物理计划到可调度执行单元
大数据·presto·湖仓·查询引擎内核·pipeline执行
AI_Auto21 小时前
工业与AI融合应用 | 从经验造车到数据造车:工业大模型重塑新能源汽车产业格局
大数据·人工智能·制造