Flink

Flink 概述
基于数据流的一个有状态的计算框架

无界流:有开始无结束 (流式处理)
有界流:有开始有结束 (批处理)

spark streaming: 批处理为主,流式处理是批处理的一个特性(mini batch)
Flink 流式为主,批处理是流式处理的一个特例
storm 流式处理


Flink具体用在三大类

1)Event-driven Application 事件驱动
2)Data Analytics Application 数据分析
3)Data Pipeline Application 数据管道

Flink开发实时处理应用程序

1)批处理 ---> DataSet 有界
2)流处理 ---> DataStream 无界

创建flink项目

mvn archetype:generate \
-DarchetypeGroupId=org.apache.flink \
-DarchetypeArtifactId=flink-quickstart-scala \
-DarchetypeVersion=1.7.2 \
-DarchetypeCatalog=local

开发流程
step1: set up the batch execution environment 获取执行环境
step2: 读文件
step3: 逻辑处理
step4: 执行

Flink中的Batch 的WordCount:
*****一定要会默写*****
data.flatMap(_.split(",")).map((_,1)).groupBy(0).sum(1)

Flink中的Stream 的WordCount:
*****一定要会默写*****
data.flatMap(_.split(",")).map((_,1)).keyBy(0).timeWindow(Time.seconds(5)).sum(1)


DataSet

Data Source
基于文件
readTextFile(path):可以读一个文件,也可以读一个文件夹下所有文件
readCsvFile[(String,int,String)](path,ignoreFirstLine=true)
基于集合 fromcollection(seq)
基于元素 fromElements()

transformation
join方法
data1.join(data2).where(0).equalTo(0)

DataStream
Data Source
基于文件
基于socket
env.socketTextStream("localhost",9999)
nc -lk 9999
设置并行度:data.print().setParallelism(1)

FlinK中使用自定义数据源
StreamExecutionEnvironment.addSource(sourceFunction)

采取EventTime来处理
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

自定义Sink流程 <参考SinkToMySQL>
1)RichSinkFunction<T> T就是你想要写入对象的类型
2)重写方法
open/close 生命周期方法
invoke 每条记录执行一次
A WindowAssigner is responsible for assigning each incoming element to one or more windows.

有key时:keyBy().window() --->多个Task
无key时:windowAll() --->singleTask(并行度为1)

窗口分配器:定义如何将数据分配到窗口

四种窗口
tumbling windows, 滚动窗口
have a fixed size and do not overlap.
固定大小,窗口之间不会有重叠

sliding windows, 滑动窗口
overlapping 可重叠 (slide < size时)
elements are assigned to multiple windows 元素会被分配到多个窗口
window size + window slide
具体使用场景:每隔半小时统计前一个小时的topn

session windows 会话窗口
global windows. 全局窗口

JobManager和TaskManager都是跑在container里

WaterMark是用来处理乱序事件的,通常用 watermark+window来实现


KafkaConnectorConsumer
val properties=new Properties()
properties.setProperties("bootstrap.servers","192.168.187.10")
//0.8版本还需指定zookeeper地址
properties.setProperties("group.id","test")

KafkaConnectorProducer
val properties=new Properties()
properties.setProperties("bootstrap.servers","192.168.187.10")

checkpoint常用设置参数
env.enableCheckpoint(4000)
env.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE)
env.getCheckpointConfig.setCheckpointTimeout(1000)
env.getCheckpointConfig.setMaxConcurrentCheckpoints(1)


flink on yarn(HA)的配置

1.zoo.cfg:

server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

2.flink-conf.yaml

jobmanager.rpc.address: master节点地址
high-availability.storageDir: hdfs://master:9000/flink/ha/
high-availability.zookeeper.quorum: master:2181,slave1:2181,slave2:2181

Flink提交作业到yarn上执行
第一种
先启动一个long-running服务(常驻服务)
./bin/yarn-session.sh -jm 1024m -tm 1024m

再提交作业执行
./bin/flink run ./examples/batch/WordCount.jar \
--input hdfs://master:9000/LICENSE-2.0.txt \
--output hdfs://master:9000/wordcount-result.txt

第二种
-m指jobmanager
-yn 指TaskManager的数量

./bin/flink run -m yarn-cluster -yn 1 ./examples/batch/WordCount.jar


杀掉yarn中的进程
yarn application -kill application_1579587721485_0002

Flink监控及优化:
History Server配置
flink-conf.yaml中
jobmanager.archive.fs.dir: hdfs://master:9000/completed-jobs/
historyserver.archive.fs.dir: hdfs://master:9000/completed-jobs/
historyserver.archive.fs.refresh-interval: 10000

启动History Server
historyserver.sh start

FLink中常用的优化策略
1)资源
2)并行度
3)数据倾斜

ES部署:
退出root用户:
给用户添加该文件夹下的访问权限
chown -R master:master /usr/local/src/elasticsearch-6.6.2/

./elasticsearch -d 启动
master:9200查看

kibana部署
安装解压后 ./kibana 启动
master:5601查看

 

新建索引
curl -XPUT 'http://master:9200/cdn'

删除索引
curl -XDELETE 'master:9200/cdn'

curl -H "Content-Type: application/json" -XPOST 'http://master:9200/cdn/traffic/_mapping?pretty' -d '{
"traffic":{
"properties":{
"domain":{"type":"keyword"},
"traffics":{"type":"long"},
"time":{"type":"date","format": "yyyy-MM-dd HH:mm"}
}
}
}
'

 

posted @ 2021-08-17 16:25  老王不秃头  阅读(334)  评论(0编辑  收藏  举报