前言
简单介绍下目前大数据的一些基本的知识,部分图是网络上的截图,主要是为了大家容易理解。这篇文章的起因是业务方提出了一些关于埋点的需求,大致流程如下
大致流程是:数据采集->Kafka->数据加工->数据存储->生成报表!
大数据的发展历程
两个很重要的概念
流处理
流处理的处理流程是:源源不断的实时数据
--> 持续不断的处理
--> 不断更新的结果
。
应用较多的场景比如实时大屏、实时报表等。
批处理
批处理的处理流程是:统一收集数据
--> 对数据进行批量处理
--> 数据存储或生成报表
。
就是传统意义上使用类似于 Map Reduce
、Hive
、Spark Batch
等,对作业进行分析、处理、生成离线报表。
应用场景
- 定时跑数据,将数据生成报表供公司上层领导决策使用;
- 源源不断读取数据做实时计算,在数据大屏上展示;
- 消息流触发,将处理及扩展后的数据生成实时索引,写入到搜索引擎中;
- 基于规则的告警;
- 业务流程监控;
- ……
其实应用场景是比较多的。
Apache StreamPark
一个神奇的框架,让流处理更简单。
所需环境
Mac环境下进行安装
安装Java
安装完Java后,可以查看版本,建议11+
(base) ➜ ~ java --version
openjdk 11.0.14 2022-01-18 LTS
OpenJDK Runtime Environment Zulu11.54+23-CA (build 11.0.14+9-LTS)
OpenJDK 64-Bit Server VM Zulu11.54+23-CA (build 11.0.14+9-LTS, mixed mode)
安装Flink
在终端执行下面命令
brew install apache-flink
安装完Flink
,可以查看下版本
(base) ➜ ~ flink --version
Version: 1.17.1, Commit ID: 2750d5c
启动
cd /opt/homebrew/Cellar/apache-flink/1.17.1/libexec/bin
sh start-cluster.sh
启动完毕打开 localhost:8081
如果需要停止集群,则执行
sh stop-cluster.sh
安装hadoop(可以不安装)
brew install hadoop
具体配置细节可以参考:flymetothemars.github.io/2020/05/22/…
export HADOOP_HOME=/opt/homebrew/Cellar/hadoop/3.3.6
export HADOOP_CONF_DIR=$HADOOP_HOME/libexec/etc/hadoop
export HIVE_HOME=$HADOOP_HOME/../hive
export HBASE_HOME=$HADOOP_HOME/../hbase
export HADOOP_HDFS_HOME=$HADOOP_HOME/../hadoop-hdfs
export HADOOP_MAPRED_HOME=$HADOOP_HOME/../hadoop-mapreduce
export HADOOP_YARN_HOME=$HADOOP_HOME/../hadoop-yarn
export HADOOP_COMMON_HOME=$HADOOP_HOME
启动
cd /opt/homebrew/Cellar/hadoop/3.3.6/sbin
sh start-all.sh
Flink运行模式
Local模式
Flink中的Local-cluster(本地集群)模式,单节点运行,主要用于测试, 学习。
Standalone模式
独立集群模式是独立运行的,由Flink自身提供计算资源,不依赖任何外部的资源管理平台。当然独立也是有代价的,如果资源不足,或者出现故障,没有自动扩展或重分配资源的保证,必须手动处理。所以独立模式一般只用在开发测试或作业非常少的场景下。
Yarn模式
YARN 上部署的过程是客户端把 Flink 应用提交给 Yarn 的 ResourceManager,Yarn 的 ResourceManager 会 向 Yarn 的 NodeManager 申 请 容 器 。 在 这 些 容 器 上 , Flink 会 部 署 JobManager 和 TaskManager 的实例,从而启动集群。Flink 会根据运行在 JobManger 上的作业 所需要的 Slot 数量动态分配 TaskManager 资源。
在yarn模式下,启动flink集群之前要启动yarn和hadoop,以Yarn模式部署Flink任务时,要求Flink有Hadoop支持的版本。Flink1.10要求Hadoop环境需要保证版本在2.2以上,并且集群中安装有HDFS服务。
K8S 运行模式
容器化部署是如今业界流行的一项技术,基于 Docker 镜像运行能够让用户更加方便地对 应用进行管理和运维。容器管理工具中最为流行的就是 Kubernetes(k8s) ,而 Flink
也在最近 的版本中支持了 k8s
部署模式。基本原理与 YARN 是类似的。
Streampark安装
下载
从下面地址下载并解压
streampark.apache.org/download/
结构
目录具体的作用如下
.
streampark-console-service-1.2.1
├── bin
│ ├── startup.sh //启动脚本
│ ├── setclasspath.sh //java 环境变量相关的脚本 ( 内部使用,用户无需关注 )
│ ├── shutdown.sh //停止脚本
│ ├── yaml.sh //内部使用解析 yaml 参数的脚本 ( 内部使用,用户无需关注 )
├── conf
│ ├── application.yaml //项目的配置文件 ( 注意不要改动名称 )
│ ├── flink-application.template //flink 配置模板 ( 内部使用,用户无需关注 )
│ ├── logback-spring.xml //logback
│ └── ...
├── lib
│ └── *.jar //项目的 jar 包
├── client
│ └── streampark-flink-sqlclient-1.0.0.jar //Flink SQl 提交相关功能 ( 内部使用,用户无需关注 )
├── script
│ ├── schema
│ │ ├── mysql-schema.sql // mysql的ddl建表sql
│ │ └── pgsql-schema.sql // pgsql的ddl建表sql
│ ├── data
│ │ ├── mysql-data.sql // mysql的完整初始化数据
│ │ └── pgsql-data.sql // pgsql的完整初始化数据
│ ├── upgrade
│ │ ├── 1.2.3.sql //升级到 1.2.3版本需要执行的升级sql
│ │ └── 2.0.0.sql //升级到 2.0.0版本需要执行的升级sql
│ │ ...
├── logs //程序 log 目录
├── temp //内部使用到的临时路径,不要删除
初始化数据库脚本的位置如下
├── script
│ ├── schema
│ │ ├── mysql-schema.sql // mysql的ddl建表sql
│ │ └── pgsql-schema.sql // pgsql的ddl建表sql
│ ├── data
│ │ ├── mysql-data.sql // mysql的完整初始化数据
│ │ └── pgsql-data.sql // pgsql的完整初始化数据
│ ├── upgrade
│ │ ├── 1.2.3.sql //升级到 1.2.3版本需要执行的升级sql
│ │ └── 2.0.0.sql //升级到 2.0.0版本需要执行的升级sql
如果是初次安装, 依次执行 schema
和 data
目录下对应数据库的脚本文件即可, 如果是升级, 则执行对应的版本号的sql
即可.
配置信息
修改spring配置
配置文件地址是conf/application.yml
找到 spring
这一项,找到 profiles.active
的配置,修改成对应的信息即可,如下
修改数据库配置
配置文件地址: conf/application-pgsql.yml
我们需要修改其中的数据库连接信息。
修改workspace配置
配置文件地址是:conf/application.yml
streampark:
# HADOOP_USER_NAME 如果是on yarn模式( yarn-prejob | yarn-application | yarn-session)则需要配置 hadoop-user-name
hadoop-user-name: hdfs
# 本地的工作空间,用于存放项目源码,构建的目录等.
workspace:
local: /Users/xxxx/Documents/streampark_space # 本地的一个工作空间目录(很重要),用户可自行更改目录,建议单独放到其他地方,用于存放项目源码,构建的目录等.
remote: hdfs:///streampark # support hdfs:///streampark/ 、 /streampark 、hdfs://host:ip/streampark/
启动
进入到 bin 下直接执行 startup.sh 即可启动项目,默认端口是10000,如果没啥意外则会启动成功,打开浏览器 输入http://$host:10000 即可登录
cd streampark-console-service-1.0.0/bin
bash startup.sh
页面大致
编程选择
丰富的API
- 越顶层越抽象,表达含义越简明,使用越方便
- 越底层越具体,表达能力越丰富,使用越灵活
Stateful Stream Processing(有状态流处理)
通过底层API
(处理函数),对最原始数据加工处理。底层API
与DataStream API
相集成,可以处理复杂的计算。
DataStream/DataSet API(流处理/批处理)
封装了底层处理函数,提供了通用的模块,比如转换(transformations
,包括 map
、flatmap
等),连接(joins
),聚合(aggregations
),窗口(windows
)操作等。
Table API
是以表为中心的声明式编程,其中表可能会动态变化。Table API遵循关系模型:表有二维数据结构,类似于关系数据库
中的表;同时API提供可比较的操作,例如select
、project
、join
、group-by
、aggregate
等。我们可以在表与 DataStream/DataSet
之间无缝 切换,以允许程序将 Table API
与 DataStream
以及 DataSet
混合使用。
SQL
这一层在语法与表达能力上与 Table API
类似,但是是以SQL查询表达式的形式表现程序。SQL抽象与Table API交互密切,同时SQL查询可以直接在Table API定义的表上执行。
例子
代码编写大致如下,从Kafka中拿数据,然后写入到数据库。