没有合适的资源?快使用搜索试试~ 我知道了~
首页百度数据工厂在流式数据处理的应用与实践
百度数据工厂整合了各种解决方案,目的就是提供一个一站式的数据处理平台。 百度数据工厂最原先用 Hive 引擎,进行离线批量数据分析和 PB 级别的查询,处理一些核心报表数据。但是在推广过程中发现,用户其实还是有复杂分析、实时处理、数据挖掘的请求,现在则以 Spark 为基础做了统一的一个计算引擎,以前 Hive 的一套也完全融入到 Spark 里来;包括多种提交方式;安全管理等等。最后形成一套完整的成品。
资源详情
资源评论
资源推荐

流式数据处理在百度数据工厂的应用与实践
李俊卿
本文整理自百度李俊卿在 QCon 上的演讲:《流式数据处理在百度数据工厂的
应用与实践》。
百度数据工厂最原先用 Hive 引擎,进行离线批量数据分析和 PB 级别的查询,
处理一些核心报表数据。但是在我们推广过程中发现,用户其实还是有复杂分析、
实时处理、数据挖掘的请求,我们在 Spark1.0 推出的时候,就开始跟进 Spark。
在 Spark1.6 时候彻底在团队中推广起来,当时是 Spark Streaming。当时
Spark1.6 的 API 基于 RDD,它和 Spark 批式处理的 API 并不同步。后来在
Spark2.2、2.3 发布的时候,Spark 推出了 Struct Streaming,它的 API 和批处
理 API 已经完全一致,这时候我们迎来一次完整的架构升级,基于 Spark 做了
一次更强大的封装;以 Spark 为基础,加上其他的 CRM,PFS 等各种模块来做
统一元数据处理;统一的资源调度;以 Spark 为基础做了统一的一个计算引擎,
以前 Hive 的一套也有完全融入到 Spark 里来;包括多种提交方式;安全管理
等等。最后形成一套完整的成品。

这就是我们目前的一个整体的技术架构。左下角是统一元数据处理,包括文件类
的元数据处理和结构类数据,比如说 Hive,或者 MySQL 的元数据处理,这都
是作为统一的处理层的。还有就是统一调度引擎处理,我们会有统一的调度引擎,
由用户注册队列,执行的时候只需要显示队列,去执行具体的资源。目前也支持
K8S 等。再往上一层是统一的 Spark 引擎。Spark 引擎里面我们现在目前支持
了 SQL、Dataset API,可在上面跑各种复杂的处理。
再往上一层就是由 Jupyter 提供的工作空间,还有由我们自研提供的调度,自研
的一套流式计算作业处理,整个一套就构成了现在完整的数据工厂。
流式数据处理在百度数据工厂的应用
接下来是比较最核心的部分,百度在 Spark 流批处理上做的哪些内容,主要是
Spark 流式 SQL 问题、实时转离线问题、实时转大屏展示问题。

首先 Spark 本身有一套完整的 API 的,有专门的引擎用来分析,所有的流、
Batch 分析,信息都会经过这套 API 进行一系列的处理,包括语义分析、语法
分析、一些优化等。大家可以注意到,右下角是空缺的,Spark 目前是没有提供
这部分内容的。而用户转型过程中很多用户都是由 Hive 过来的,是熟悉应用
SQL 的用户,他们要处理流式数据,就会迫切的需要有一个 SQL 的引擎,来帮
他将 Hive 的 SQL 转型成一个流式的 SQL。

我们针对这个问题进行了一些开发。首先大家看一下,上面是 Spark API 层,
Spark 在流批处理上的 API 已经做得很完善了,是通过 read 和 readStream
来进行区分的。批到 SQL 处理,其实就是,可以完全看到它是首先是 Spark read
一个 Source,而它会映射成一个 From Table,具体的处理会映射成 select、join、
union 等各种操作。然后 Write Table 这种,在最后映射成了 kafka_Table。我
们流式 SQL 也可以映射这种类型的。
比如说这个例子,它从 Kafka 读取,输出到 HDFS,映射的流式 SQL 的就是
Kafka_Table。我们可以专门定义一个 Kafka Table。用户的处理,我们会变成
select *。大家注意,我中间加了一个 stream 关键字。Spark 在处理的时候,
做了统一引擎的处理。只有 API 层用户写 readStream 的时候,它才是一个流
式的处理,如果它用户写一个 Read,它就是一个批处理。相对来说,SQL 层我
们也做了相应的处理,跑的同样的 SQL,用户如果没加 Stream 关键字,它就
是批处理的一个 SQL,如果加 Stream 关键字,它就变成一个流式处理。但里
剩余15页未读,继续阅读



















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0