Waterdrop之数据处理

背景及痛点:

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

  • 数据丢失与重复
  • 任务堆积与延迟
  • 吞吐量低
  • 应用到生产环境周期长
  • 缺少应用运行状态监控

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

Databricks 开源的 Apache Spark 对于分布式数据处理来说是一个伟大的进步,Waterdrop是基于Spark,Flink构建的配置化,零开发成本、易用,高性能的大规模流式及离线处理工具。

WaterDrop特性:

  1. 简单易用,灵活配置,无需开发;
  2. 同时支持流式和离线处理;
  3. 模块化和插件化,易于扩展,Waterdrop的用户可根据实际的需要来扩展需要的插件,支持Java/Scala实现的Input、Filter、Output插件;
  4. 支持利用SQL做数据处理和聚合;
  5. 支持选择Spark或Flink作为底层引擎层。

WaterDrop原理:

常见的Source插件:【Input】

  1. Kafka:负责消费Kafka中的数据作为数据源;
  2. MySQL Binlog:负责消费MySQL的Binlog日志作为数据源;
  3. HDFS:负责从HDFS加载文件作为数据源。

常见的Transform插件:【Filter】

filter中的多个插件按配置顺序形成了数据处理的pipeline, 上一个filter的输出是下一个filter的输入。

  1. Split:负责切割字符串;
  2. SQL : 负责执行SQL语句 ,完成SQL中的查询和聚合处理。

常见的Sink插件:【Output】

filter处理完的数据,会发送给output中配置的每个插件。

  1. HDFS:负责将数据输出到HDFS;
  2. Elasticsearch:负责将数据输出到Elasticsearch;
  3. MySQL:负责将数据输出到MySQL;
  4. Hbase:负责将数据输出到Hbase.

打造基于Spark的插件化通用计算引擎的优势:

  1. 计算逻辑配置化,很容易满足各种业务逻辑的计算;
  2. 接入新的计算需求,几乎零开发成本;
  3. 既满足80%的常见需求,又满足20%的个性化需求(自定义插件)
  4. 在插件API的标准上开发自己的业务逻辑处理插件更加容易。
  5. 复用程度高,流程控制和现有插件都经过了长期生产环境验证。

下载

https://github.com/InterestingLab/waterdrop/releases

解压

tar -zxvf waterdrop-1.4.2-with-spark.zip

配置文件修改waterdrop-env.sh

vim ../config/waterdrop-env.sh

编写conf配置文件,test_user_data.conf【Hive->ClickHouse】

spark {
	spark.app.name = "hive2ck"
	spark.executor.instances = 8
	spark.dynamicAllocation.enabled=false
	spark.executor.cores = 2
	spark.executor.memory = "2g"
	spark.sql.catalogImplementation = "hive"
	spark.yarn.queue="root.users.test"
}

input {
	hive{
		pre_sql = "select dt,level,sorce from dw_tmp.test_data"
		result_table_name = "test_data"
	}
}

filter{
	rename{
		source_field = "dt"
		target_field = "dt"
	}
}

output {
	clickhouse{
		host = "10.50.xxx.xxx:8123"
		database = "ads_ck"
		table = "test_data"
		fields=["dt","level","sorce"]
		username = "xxx"
		password = "xxxx"
		clickhouse.socket_timeout=600000
		bulk_size = 30000
		retry = 3
	}
}

test_user_data.conf【Oracle->ClickHouse】 

spark{
	spark.app.name = "oracle2ck"
	spark.executor.instances = 8
	spark.executor.cores = 2
	spark.executor.memory = "2g"
	spark.yarn.queue="root.users.test"
}

input{
	jdbc{
		driver="oracle.jdbc.driver.OracleDriver"
		url="jdbc:oracle:thin:@//10.10.xxx.xx/testdb"
		table="(select dt,level,sorce from test.test_data)a"
		result_table_name = "test_data"
		user="test"
		password="xxxx"
	}
}

filter{
	rename{
		source_field = "dt"
		target_field = "dt"
	}
}

output{
	clickhouse{
		host = "10.50.xxx.xxx:8123"
		database = "ads_ck"
		table = "test_data"
		fields=["dt","level","sorce"]
		username = "xxx"
		password = "xxxx"
		clickhouse.socket_timeout=600000
		bulk_size = 30000
		retry = 3
	}
}

启动waterdrop,进行数据同步

/usr/java/waterdrop-1.4.2/bin/start-waterdrop.sh --master yarn --deploy-mode client --config /usr/java/waterdrop-1.4.2/config/test_user_data.conf

项目地址: GitHub - apache/incubator-seatunnel: SeaTunnel is a distributed, high-performance data integration platform for the synchronization and transformation of massive data (offline & real-time).

文档地址:https://interestinglab.github.io/waterdrop-docs/

快速入门:https://interestinglab.github.io/waterdrop-docs/#/zh-cn/v1/quick-start

行业应用案例: https://interestinglab.github.io/waterdrop-docs/#/zh-cn/v1/case_study/

插件开发:https://interestinglab.github.io/waterdrop-docs/#/zh-cn/v1/developing-plugin

Waterdrop的设计与实现原理:想用Spark实现配置化的计算平台?先参考这篇硬核方案

Waterdrop帮你快速玩转Spark数据处理

Flink技术分享公开课视频: 视频播放

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值