2023年,你才开始学习大数据么?

289 阅读3分钟

前言

简单介绍下目前大数据的一些基本的知识,部分图是网络上的截图,主要是为了大家容易理解。这篇文章的起因是业务方提出了一些关于埋点的需求,大致流程如下

image.png

大致流程是:数据采集->Kafka->数据加工->数据存储->生成报表!

大数据的发展历程

image.png

两个很重要的概念

流处理

流处理的处理流程是:源源不断的实时数据 --> 持续不断的处理 --> 不断更新的结果

应用较多的场景比如实时大屏、实时报表等。

批处理

批处理的处理流程是:统一收集数据 --> 对数据进行批量处理 --> 数据存储或生成报表

就是传统意义上使用类似于 Map ReduceHiveSpark Batch 等,对作业进行分析、处理、生成离线报表。

应用场景

  1. 定时跑数据,将数据生成报表供公司上层领导决策使用;
  2. 源源不断读取数据做实时计算,在数据大屏上展示;
  3. 消息流触发,将处理及扩展后的数据生成实时索引,写入到搜索引擎中;
  4. 基于规则的告警;
  5. 业务流程监控;
  6. ……

其实应用场景是比较多的。

Apache StreamPark

一个神奇的框架,让流处理更简单。

所需环境

image.png

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

image.png

如果需要停止集群,则执行

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   

如果是初次安装, 依次执行 schemadata 目录下对应数据库的脚本文件即可, 如果是升级, 则执行对应的版本号的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

页面大致

image.png

编程选择

丰富的API

  • 越顶层越抽象,表达含义越简明,使用越方便
  • 越底层越具体,表达能力越丰富,使用越灵活

Stateful Stream Processing(有状态流处理)

通过底层API(处理函数),对最原始数据加工处理。底层APIDataStream API相集成,可以处理复杂的计算。

DataStream/DataSet API(流处理/批处理)

封装了底层处理函数,提供了通用的模块,比如转换(transformations,包括 mapflatmap等),连接(joins),聚合(aggregations),窗口(windows)操作等。

Table API

是以表为中心的声明式编程,其中表可能会动态变化。Table API遵循关系模型:表有二维数据结构,类似于关系数据库中的表;同时API提供可比较的操作,例如selectprojectjoingroup-byaggregate等。我们可以在表与 DataStream/DataSet 之间无缝 切换,以允许程序将 Table API DataStream 以及 DataSet 混合使用。

SQL

这一层在语法与表达能力上与 Table API 类似,但是是以SQL查询表达式的形式表现程序。SQL抽象与Table API交互密切,同时SQL查询可以直接在Table API定义的表上执行。

例子

代码编写大致如下,从Kafka中拿数据,然后写入到数据库。

image.png