调研

从网上的调研来看,其实整个百度有清洗流程的只有[1]其他都是抄的[1]中的内容。

 

实验流程

flink on yarn 清理user数据 flink清洗数据_kafka

这个流程的话,不要去研究redis的Flink SQL Client的操作方法,因为在mvn repository中

没有看到flink-sql-connector-redis之类 的jar

所以该流程适可而止吧

####################################################################

Redis數據準備

127.0.0.1:6379> hset areas AREA_US US
 127.0.0.1:6379> hset areas AREA_CT TW,HK
 127.0.0.1:6379> hset areas AREA_IN IN
 127.0.0.1:6379> hset areas AREA_AR PK,SA,KW
 127.0.0.1:6379> hset areas AREA_IN IN127.0.0.1:6379> hgetall areas
 1) "AREA_US"
 2) "US"
 3) "AREA_CT"
 4) "TW,HK"
 5) "AREA_IN"
 6) "IN"
 7) "AREA_AR"
 8) "PK,SA,KW"


 

本实验的redis对象是没有密码的,如果事先设置了密码,可以根据[14]去除

 

Redis代码中的注意事项

代码中有这么一句话:

this.jedis = new Jedis("127.0.0.1", 6379);

注意,这里的127.0.0.1如果改成redis所在节点的域名的话,必须是该redis支持外网访问,否则此处不要修改,会导致数据读取失败

####################################################################

本实验注意事项

①redis相关的jar依赖其实目前官方没有在维护了.所以不要做太深入的钻研

②需要导入flink-shaded-hadoop-3-uber-3.1.1.7.0.3.0-79-7.0.jar

Project Structure->Global Libraries中间一列导入上述的jar

否则会报错找不到hdfs这个file system

####################################################################

数据清洗目标

kafka(存放事实表)中数据示范:

{"dt":"2021-01-11 12:30:32","countryCode":"PK","data":[{"type":"s3","score":0.8,"level":"C"},{"type":"s5","score":0.1,"level":"C"}]}

格式化后如下:

{
  "dt": "2021-01-11 12:30:32",
  "countryCode": "PK",
  "data": [
    {
      "type": "s3",
      "score": 0.8,
      "level": "C"
    },
    {
      "type": "s5",
      "score": 0.1,
      "level": "C"
    }
  ]
}

这样的一条数据,根据countryCode转化为redis(存放维度表)中的具体地区AREA_AR

后面list中的数据打散,最终想要的效果如下:

{"area":"AREA_AR","dt":"2021-01-11 12:30:32","score":0.8,"level":"C","type":"s3"}
{"area":"AREA_AR","dt":"2021-01-11 12:30:32","score":0.1,"level":"C","type":"s5"}

也就是想要根据上述要求,把一条数据转化为两条数据

####################################################################

完整实验操作与代码

https://gitee.com/appleyuchi/Flink_Code/tree/master/flink清洗数据案例/FlinkProj

####################################################################

可能涉及到的Kafka操作

操作

命令

备注

查看topic

$KAFKA/bin/kafka-topics.sh --list --zookeeper Desktop:2181

 

 

allData这个 topic发送 json 消息

$KAFKA/bin/kafka-console-producer.sh --broker-list Desktop:9091 --topic allData

这里可能碰到[2]中的报错,注意检查命令中端口与配置文件server.properties中的listeners的端口严格保持一致

[2]中的报错还可能是某个节点的kafka挂掉导致的.

 

可能碰到[3]

注意关闭防火墙

 

 

使用kafka自带消费端测试下消费

$KAFKA/bin/kafka-console-consumer.sh --bootstrap-server Desktop:9091 --from-beginning --topic allData

如果kafka自带消费者测试有问题,那么就不用继续往下面做了,

此时如果使用Flink SQL Client来消费也必然会出现问题

清除topic中所有数据[13]

$KAFKA/bin/kafka-topics.sh --zookeeper Desktop:2181 --delete --topic allData

需要$KAFKA/config/server.properties设置

delete.topic.enable=true