Waterdrop:构建在Spark之上的简单高效数据处理系统

本文来自 Gary和RickyHuo,他们是Waterdrop开发者,从事大数据相关工作多年,熟悉Hadoop技术体系,参与过多个大数据开源项目,目前分别供职于一下科技和新浪。

Databricks 开源的 Apache Spark 对于分布式数据处理来说是一个伟大的进步。我们在使用 Spark 时发现了很多可圈可点之处,我们在此与大家分享一下我们在简化Spark使用和编程以及加快Spark在生产环境落地上做的一些努力。

一个Spark Streaming读取Kafka的案例

以一个线上案例为例,介绍如何使用Spark Streaming统计Nginx后端日志中每个域名下每个状态码每分钟出现的次数,并将结果数据输出到外部数据源Elasticsearch中。其中原始数据已经通过Rsyslog传输到了Kafka中。

数据读取

从Kafka中每隔一段时间读取数据,生成DStream

具体方法参考Spark Streaming + Kafka Integration Guide。

数据清洗

日志案例

通过Split方法从非结构化的原始数据message中获取域名以及状态码字段,并组成方便聚合的结构化数据格式Map(key -> value)

数据聚合

利用Spark提供的reduceByKey方法对数据进行聚合计算,统计每分钟每个域名下的每个错误码出现的次数,其中mapRdd是在清洗数据阶段组成的RDD

数据输出

利用Spark提供的foreachRDD方法将结果数据reduceRdd输出到外部数据源Elasticsearch

问题

我们的确可以利用Spark提供的API对数据进行任意处理,但是整套逻辑的开发是个不小的工程,需要一定的Spark基础以及使用经验才能开发出稳定高效的Spark代码。除此之外,项目的编译、打包、部署以及测试都比较繁琐,会带来不少得时间成本和学习成本。

除了开发方面的问题,数据处理时可能还会遇到以下不可逃避的麻烦:

  • 数据丢失与重复

  • 任务堆积与延迟

  • 吞吐量低

  • 应用到生产环境周期长

  • 缺少应用运行状态监控

因此我们开始尝试更加简单高效的Spark方案,并试着解决以上问题

一种简单高效的方式 -- Waterdrop

Waterdrop 是一个非常易用,高性能,能够应对海量数据的实时数据处理产品,构建于Apache Spark之上。

Waterdrop 项目地址:https://interestinglab.github.io/waterdrop

Spark固然是一个优秀的分布式数据处理工具,但是正如上文所表达的,Spark在我们的日常使用中还是存在不小的问题。因此我们也发现了我们的机会 —— 通过我们的努力让Spark的使用更简单,更高效,并将业界和我们使用Spark的优质经验固化到Waterdrop这个产品中,明显减少学习成本,加快分布式数据处理能力在生产环境落地

"Waterdrop" 的中文是“水滴”,来自中国当代科幻小说作家刘慈欣的《三体》系列ÿ

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值