备注:此博客waterdrop相关知识,原博客地址请点击此处,方便袭击学习进步

Waterdrop:构建在Spark之上的简单高效数据处理系统
Spark 2018-02-28 21:58:46 2745 0评论 下载为PDF 为什么无法评论和登录
Databricks 开源的 Apache Spark 对于分布式数据处理来说是一个伟大的进步。我们在使用 Spark 时发现了很多可圈可点之处,我们在此与大家分享一下我们在简化Spark使用和编程以及加快Spark在生产环境落地上做的一些努力。

Working with UDFs in Apache Spark
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
文章目录

1 一个Spark Streaming读取Kafka的案例
1.1 数据读取
1.2 数据清洗
1.3 数据聚合
1.4 数据输出
1.5 问题
2 一种简单高效的方式 – Waterdrop
3 Waterdrop 的特性
4 Waterdrop 的原理和工作流程
5 如何使用 Waterdrop
6 Waterdrop 未来发展路线
一个Spark Streaming读取Kafka的案例
以一个线上案例为例,介绍如何使用Spark Streaming统计Nginx后端日志中每个域名下每个状态码每分钟出现的次数,并将结果数据输出到外部数据源Elasticsearch中。其中原始数据已经通过Rsyslog传输到了Kafka中。

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

val directKafkaStream = KafkaUtils.createDirectStream[
[key class], [value class], [key decoder class], [value decoder class] ](
streamingContext, [map of Kafka parameters], [set of topics to consume])
具体方法参考Spark Streaming + Kafka Integration Guide。

数据清洗
日志案例

192.168.0.1 interestinglab.github.io 127.0.0.1 0.001s [22/Feb/2018:22:12:15 +0800] “GET /waterdrop HTTP/1.1” 200 8938 “http://github.com/” - “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36”
通过Split方法从非结构化的原始数据message中获取域名以及状态码字段,并组成方便聚合的结构化数据格式Map(key -> value)

val splitList = message.split(" ")
val domain = splitList(1)
val httpCode = splitList(9)
val item = Map((domain, httpCode) -> 1L)
数据聚合
利用Spark提供的reduceByKey方法对数据进行聚合计算,统计每分钟每个域名下的每个错误码出现的次数,其中mapRdd是在清洗数据阶段组成的RDD

val reduceRdd = mapRdd.reduceByKey((a:Long, b:Long) => (a + b))
数据输出
利用Spark提供的foreachRDD方法将结果数据reduceRdd输出到外部数据源Elasticsearch

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

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

数据丢失与重复
任务堆积与延迟
吞吐量低
应用到生产环境周期长
缺少应用运行状态监控
因此我们开始尝试更加简单高效的Spark方案,并试着解决以上问题

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

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

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

“Waterdrop” 的中文是“水滴”,来自中国当代科幻小说作家刘慈欣的《三体》系列,它是三体人制造的宇宙探测器,会反射几乎全部的电磁波, 表面绝对光滑,温度处于绝对零度,全部由被强互作用力紧密锁死的质子与中子构成,无坚不摧。 在末日之战中,仅一个水滴就摧毁了人类太空武装力量近2千艘战舰。

Waterdrop 的特性
简单易用,灵活配置,无需开发;可运行在单机、Spark Standalone集群、Yarn集群、Mesos集群之上。
实时流式处理, 高性能, 海量数据处理能力
模块化和插件化,易于扩展。Waterdrop的用户可根据实际的需要来扩展需要的插件,支持Java/Scala实现的Input、Filter、Output插件。
如果您对插件扩展感兴趣,可移步至Waterdrop插件开发
支持利用SQL做数据处理和聚合
Waterdrop 的原理和工作流程
Working with UDFs in Apache Spark
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
Waterdrop 利用了Spark的Streaming, SQL, DataFrame等技术,Java的反射机制、Service Loader等技术以及Antlr4的语法解析技术, 实现了一套完整的可插拔的数据处理工作流,如下:

Working with UDFs in Apache Spark
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
多个Filter构建了数据处理的Pipeline,满足各种各样的数据处理需求,如果您熟悉SQL,也可以直接通过SQL构建数据处理的Pipeline,简单高效。 目前Waterdrop支持的Filter列表(数据处理插件), 仍然在不断扩充中。 您也可以开发自己的数据处理插件,整个系统是易于扩展的。通过下面的配置示例,你可以快速了解到这种工作流程:

spark {

Waterdrop defined streaming batch duration in seconds

spark.streaming.batchDuration = 5

spark.app.name = “Waterdrop”
spark.ui.port = 13000
}

input {
socket {}
}

filter {
split {
fields = [“msg”, “name”]
delimiter = “,”
}
}

output {
stdout {}
}
spark是spark相关的配置,可配置的spark参数见: Spark Configuration, 其中master, deploy-mode两个参数不能在这里配置,需要在Waterdrop启动脚本中指定。
input可配置任意的input插件及其参数,具体参数随不同的input插件而变化。input支持包括File, Hdfs, Kafka, S3, Socket等插件。
filter可配置任意的filter插件及其参数,具体参数随不同的filter插件而变化。filter支持包括Date, Json, Split, Sql, Table, Repartition等40+个插件。filter中的多个插件按配置顺序形成了数据处理的pipeline, 上一个filter的输出是下一个filter的输入。
output可配置任意的output插件及其参数,具体参数随不同的output插件而变化。
filter处理完的数据,会发送给output中配置的每个插件。output支持包括Elasticsearch, File, Hdfs, Jdbc, Kafka, Mysql, S3等插件。

如何使用 Waterdrop
Step 1 : 使用 Waterdrop前请先准备好Spark和Java运行环境。

Step 2 : 下载Waterdrop安装包 并解压:

以waterdrop 1.0.2为例:

wget https://github.com/InterestingLab/waterdrop/releases/download/v1.0.2/waterdrop-1.0.2.zip -O waterdrop-1.0.2.zip
unzip waterdrop-1.0.2.zip
ln -s waterdrop-1.0.2 waterdrop
cd waterdrop
Step 3 : 配置 Waterdrop(从kafka消费数据,做字符串分割,输出到终端), 编辑 config/application.conf

spark {

Waterdrop defined streaming batch duration in seconds

spark.streaming.batchDuration = 5

spark.app.name = “Waterdrop”
spark.ui.port = 13000
spark.executor.instances = 2
spark.executor.cores = 1
spark.executor.memory = “1g”
}

input {
kafka {
topics = “mytopic”
consumer.bootstrap.servers = “localhost:9092”
consumer.zookeeper.connect = “localhost:2181”
consumer.group.id = “waterdrop_group”
}
}

filter {
split {
fields = [“msg”, “name”]
delimiter = “,”
}
}

output {
stdout {}
}
Step 4 : 启动 Waterdrop

./bin/start-waterdrop.sh --master yarn --deploy-mode client --config ./config/application.conf
更详细的使用方法见Waterdrop Quick Start

Waterdrop 未来发展路线
Waterdrop 会分为3条路线,详细展开:

提供更多Input, Filter, Output插件,提高易用性、可靠性、数据一致性。
支持Apache Flink / Apache Beam,支持Spark以外的分布式数据计算模型。
支持流式机器学习,能够通过简单的Pipeline和配置,完成常用流式机器学习模型的训练。
Waterdrop 项目地址:https://interestinglab.github.io/waterdrop

Waterdrop 项目由Interesting Lab开源。Interesting Lab (https://github.com/InterestingLab), 中文译名有趣实验室。成立于2016年,致力于让大数据变得更简单有价值。

原文地址:https://github.com/garyelephant/blog/blob/master/waterdrop-release.md

waterdrop on spark(大数据)_认识waterdrop相关推荐

  1. Spark大数据分布式机器学习处理实战

    前言 Spark是一种大规模.快速计算的集群平台,本公众号试图通过学习Spark官网的实战演练笔记提升笔者实操能力以及展现Spark的精彩之处.有关框架介绍和环境配置可以参考以下内容: 大数据处理框架 ...

  2. MAC系统中搭建Spark大数据平台(包括Scala)

    MAC系统中搭建Spark大数据平台(包括Scala) 总体介绍: 大家Spark大数据平台,包括三部分内容:JDK,Scala,Spark 这三者是依次依赖的关系,Spark依赖于Scala环境(S ...

  3. Ronald Van Loon/Greg White带你领略Hadoop/Spark大数据CCA175认证(一)

    目录 圣普伦Simplilearn课程概述: 圣普伦的Hadoop/Spark大数据CCA175认证培训课程特点: 上课模式: 预修课程: 适合人群 主要学习成果: 认证考试: 认证条件: 课程设置: ...

  4. Spark大数据技术与应用 第一章Spark简介与运行原理

    Spark大数据技术与应用 第一章Spark简介与运行原理 1.Spark是2009年由马泰·扎哈里亚在美国加州大学伯克利分校的AMPLab实验室开发的子项目,经过开源后捐赠给Aspache软件基金会 ...

  5. 王家林大咖新书预发布:清华大学出版社即将出版《Spark大数据商业实战三部曲:内核解密|商业案例|性能调优》第二版 及《企业级AI技术内幕讲解》

    王家林大咖新书预发布:清华大学出版社即将出版<Spark大数据商业实战三部曲:内核解密|商业案例|性能调优>第二版,新书在第一版的基础上以Spark 2.4.3版本全面更新源码,并以Ten ...

  6. 2018年新春报喜!热烈祝贺王家林大咖大数据经典传奇著作《SPARK大数据商业实战三部曲》 畅销书籍 清华大学出版社发行上市!

    2018年新春报喜!热烈祝贺王家林大咖大数据经典传奇著作<SPARK大数据商业实战三部曲>畅销书籍 清华大学出版社发行上市! 本书基于Spark 2.2.0新版本,以Spark商业案例实战 ...

  7. 决胜Spark大数据时代企业级最佳实践:Spark CoreSpark SQLGraphXMachine LearningBest Practice

    王家林:Spark.Docker.Android技术中国区布道师. 联系邮箱18610086859@126.com 电话:18610086859 QQ:1740415547 微信号:186100868 ...

  8. Spark大数据开发学习:Spark基础入门

    在诸多的大数据技术框架当中,Spark可以说是占据了非常重要的地位,继Hadoop之后,基于实时数据处理需求的不断上升,Spark开始占据越来越大的市场份额,而Spark,也成为大数据的必学知识点.今 ...

  9. spark 广播变量大数据_大数据处理 | Spark集群搭建及基本使用

    点击蓝字关注我 前面用了一篇文章详细的介绍了集群HDFS文件系统的搭建,HDFS文件系统只是一个用于存储数据的系统,它主要是用来服务于大数据计算框架,例如MapReduce.Spark,本文就接着上一 ...

最新文章

  1. 学精算的计算机知识,精算学专业学什么 附学习科目和课程
  2. Windows通过VNC访问Kylin桌面环境
  3. Matlab篇(三)MATLAB中conj的用法
  4. boost::reinterpret_pointer_cast相关的测试程序
  5. sqlplus中利用spool生成带日期的文件名
  6. 嵌入式linux tftp rpm,嵌入式linux的tftp配置
  7. CocoaPods 错误 target overrides the `OTHER_LDFLAGS`...
  8. 程序员不会SQL?骨灰级工程师:全等着被淘汰吧!这是必会技能!
  9. java 结果用长整数型表示_java 编程 输入正整数n,计算n!结果用长整型数表示
  10. mysql比较两个表中count_mysql两个表统计查询问题?
  11. Doing It in User Space
  12. 毕业四年,我当初是如何走上编程这条路的!
  13. Sun Jan 29 14:34:06 格林尼治标准时间+0800 2012”解析
  14. android 排他button,排他思想案例
  15. 计算机组成原理——计算机基本组成
  16. strchr和strstr的用法
  17. 中职计算机专业介绍,【中职计算机专业介绍】中职计算机专业教学改革探幽
  18. java生成一条唯一的邀请码_如何实现用户id生成一个唯一邀请码
  19. iOS-对于把图片渲染成蓝色的修改方法
  20. 浅谈中国各类教育优缺点

热门文章

  1. 365天英语口语学习_15,打电话
  2. 第四十四课第十一章Managing Tables
  3. 从小到大认识电力电子
  4. python求极限_Python符号计算之实现函数极限的方法
  5. springboot+vue+elementUI 智慧外贸商城购物销售管理系统#毕业设计
  6. 软件测试技术-测试平台配置(下)
  7. 省市联动与Bootstrap的基本使用
  8. 炫酷感科技感旋转vuejsjs特效
  9. STM32芯片内部温度监控调试记录
  10. 2022年中级会计实务考试精选模拟题及答案