WaterDrop初次体验--如何快速地将GreenPlum中的数据导入ClickHouse

WaterDrop认识

我们引用官网的一段话来学一下WaterDrop的作用:Waterdrop 是一个非常易用,高性能、支持实时流式和离线批处理的海量数据处理产品,架构于Apache Spark 和 Apache Flink之上。下面插入WaterDrop官网的链接地址,方便小伙伴更好的学习WaterDrop
https://interestinglab.github.io/waterdrop/#/

环境配置

GreenPlum: 6.x   ,  WaterDrop: 1.x

使用waterdrop,写.conf配置文件

该文件为在waterdrop安装目录下

	#我们将所有的conf文件均都放在jobs下,根据所抽取的数据类型不同进行文件分层
	#dim为维度层
	mkdir -p /opt/apps/waterdrop/jobs/dim/
	#创建waterdrop配置文件	
	vi /opt/apps/waterdrop/jobs/dim/staff_nq.conf

以下是staff_nq.conf文件内容

#spark相关的配置,
spark {
	#spark任务名称,我们内部的命名方式就是见明知意的,从GP库dim层staff_nq表To ClickHouse库dim层staff_nq表
	spark.app.name = "GpOdsStaffNqToClickHouseDimStaffNq"		
	
	#spark端口
	spark.ui.port = 13000	
}
#可配置任意的input插件及其参数,具体参数随不同的input插件而变化,这里我们使用的是GP分布式数据库
input{
	#jdbc链接熟悉
	jdbc {
		driver = "org.postgresql.Driver"
		url = "jdbc:postgresql://192.168.1.1:5432/dw?useUnicode=true&charSet=utf8&autoReconnect=true"
		
		#数据库链接用户名及密码
		user = "root"
		password = "123456"
		
		#需要抽取的表(也可以写成查询语句,)
		table = "(select staff_id,login,name,email,status,hrpersonnum,now() etl_time from staff_nq) d"
		
		#此插件处理后的数据,会被注册为一个可供其他插件直接访问的数据集(dataset),或者被称为临时表(table)。此处注册的数据集(dataset),其他插件可通过指定 source_table_name 来直接访问
		result_table_name = "staff_nq"
	}
}
#可配置任意的filter插件及其参数,具体参数随不同的filter插件而变化。这里我们使用的是clickHouse的SQL语句
filter {
	sql {
		#将其表中的字段进行转码,否则写入clickHouse时会因为字段类型不匹配而导致错误或者数据为空等现象
		sql = "select int(staff_id) staff_id,login,name,email,int(status) status,hrpersonnum,date_format(etl_time,'yyyy-MM-dd HH:mm:ss') etl_time from staff_nq "
	}
}
#配置任意的output插件及其参数,具体参数随不同的output插件而变化。
output{
	#该配置为ClinkHouse配置地址
	clickhouse {
		#ClickHouse集群地址,格式为host:port,允许指定多个host。如"host1:8123,host2:8123"。
		host = "192.168.2.1:8123"
		
		#ClickHouse 数据库名
		database = "dim"
		
		#ClickHouse 表名
		table = "staff_nq"
		
		#需要输出到ClickHouse的数据字段,若不配置将会自动根据数据的Schema适配。
		fields = ["staff_id","login","name","email","status","hrpersonnum","etl_time"]
		
		#CilckHouse数据库链接用户名及密码
		username = "default"
		password = ""
		
		#每次通过ClickHouse JDBC写入数据的条数,默认为20000。
		bulk_size = 1000 
		
		#除了以上必备的 clickhouse-jdbc须指定的参数外,用户还可以指定多个非必须参数,覆盖了clickhouse-jdbc提供的所有参数,指定参数的方式是在原参数名称上加上前缀"clickhouse."
		#clickHouser连接超时时间,如果不指定这些非必须参数,它们将使用clickhouse-jdbc给出的默认值。
		clickhouse.socket_timeout = 500000
	}
}

运行.conf文件,查看数据是否能够抽取

	/opt/apps/waterdrop/bin/start-waterdrop.sh --master yarn --deploy-mode cluster --config /opt/apps/waterdrop/jobs/dim/staff_nq.conf

如果执行过程没有报错,那么恭喜你,脚本已经完成!!!

开发公共配置文件

由于我们会大批量的、定时的、增量或全量的抽取数据,而我们的定时调度系统使用的是Azkaban进行调度,所以,我们可以把刚才运行的shell语句写成一个公共的脚本为 DataLoader2CKJob.sh

	mkdir -p /opt/apps/azkaban/jobs/
	vi /opt/apps/azkaban/jobs/DataLoader2CKJob.sh

以下是DataLoader2CKJob.sh的文件内容

#!/bin/bash

conf_databases=$1;
conf_job=$2;

/opt/apps/waterdrop/bin/start-waterdrop.sh --master yarn --deploy-mode cluster --config /opt/apps/waterdrop/jobs/$2/$1

后续我们使用的该脚本的时候直接调用shell脚本,传入参数即可,例

	sh /opt/apps/azkaban/jobs/DataLoader2CKJob.sh dim staff_nq.conf

处理ClinkHouse数据问题

由于我们每天都会抽取昨日最新数据,所以我们需要清空clickhouse表中的数据,然后调用linux crontab命令进行每天定时清空表数据

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值