spark-sql + spark-streaming 的处理问题

来源:11-2 -外部数据源接口

鲲t

2019-05-28

前提:

1. 需求: 统计实时订单量(类似)
2. 通过maxwell读取binlog数据同步到kafka
3. spark-streaming处理kafka里面的数据
4. spark-sql定义不同的实时报表
5. (公司之前没有做过流出里相关报表)
6. 报表可能会变, 同时定义报表的分析人员只会写sql, 所以只能用sql方式

请问下老师:

  1. 我看到网上很多案例, 同事通过binlog放到kafka里面, 然后试试计算消费, 但是同一个数据库服务器有多个库, 一个库多个表,
    • 方案1: 放入到kafka的时候, 根据库或者表, 穿件不同的topic, 然后streaming计算后聚合结果,
    • 方案2: 所有数据放到同一个topic, 因为每一条变动的binlog数据里面都有数据库字段, 数据表字段, 在用sql定义报表的时候 就多几个where就能达到查询效果了

问题: 我原本想到的是方案2, 但是方案2

  • 是不是要一条sql 提交一个job, 然后出现所有kafka的数据都要消费一遍, 这样性能不久扛不住么?
  • 或者是提交一个job, 然后试试查询某个地方是否存储了某些实时报表, 然后再次取出定义一个报表的sql进行计算呢?
  • 如果是方案1, 多个topic的数据最后通过streaming最后合并是不是特别麻烦?

当然我不太懂, 可能这个问题都是错的,
课程的Spark-SQL 愿景中说明到, spark可以自动的读更少的数据, 不知道streaming是不是也是这样的呢?

写回答

2回答

Michael_PK

2019-05-28

1) maxwell采集binlog的数据,是否支持多库?这个我不太确定。 maxwell采集的时候注意数据的前后顺序哦,否则可能导致后面的数据先被sparkstreaming消费掉了

2)sql是提交一个job,但是你可以做到context共享,大家的sql都是提交到同一个共享的server上去执行,这样就省去了作业提交的申请资源的时间了

3)streaming没有很多的全部覆盖dataframe,读更少的数据这个建议用结构化流,因为结构化流底层是统一的ds/df编程

0
1
鲲t
非常感谢!
2019-05-28
共1条回复

鲲t

提问者

2019-05-28

# 以下内容为老师在群里的回复 如果有相同问题的同学可以参考

@PK哥    请问下老师, [图片]

这个意思就就是说通常做法为,  不同sql共享context对吧?

    如果作业已经提交了, 这个时候又新增了报表sql,  是不是要动态读取不同的报表了?  感觉这种方式好像不太对,

如果每一个sql报表都提交一个作业, 消费同一个kafka的topic, (当然统计内容不一样, )这样会不会出现: 所有数据都要处理一遍, 导致性能下降很多的情况呢

鲲  21:59:02

稍后我把你在群里的会发复制到问答区,

PK哥  21:59:26

server共享

PK哥  21:59:33

你只要资源够

PK哥  21:59:38

提交就行

PK哥  22:00:03

增量

You recalled a message

鲲  22:10:50

[图片]

@PK哥    请问下老师,  共享server,  就是说我可以在这个箭头标记的地方,  写多个查询     且查询的sql, 我可以从之前预先写好的文件或者数据库中取出来,   这样理解对吧

PK哥  22:11:26

你理解成一个cs结构就行了


0
0

以慕课网日志分析为例 进入大数据Spark SQL的世界

快速转型大数据:Hadoop,Hive,SparkSQL步步为赢

1644 学习 · 1129 问题

查看课程