waterdrop配置文件动态赋值

前言

最近在使用waterdrop读取hive的数据,并写入clickhouse。但是hive是按照天来分区的,所以同步数据的时候需要动态的选择分区。但是waterdrop的配置文件是conf文件,没法动态赋值。特此记录一下这个解决办法。

解决办法

我们可以使用cat <<!EOF把变量传进去,并且把脚本生成在文件夹中,然后再使用waterdrop的命令调用即可。demo如下:

#!/bin/bash

# 日期及参数配置输入,默认当天无参数输入
if [ $# == 0 ];then
    daydate=`date +%Y-%m-%d`
elif [ $# == 1 ];then
    daydate=$1
else
 echo "输入参数出错!"
 exit 1
fi

echo "当日:$daydate"

# 打印数据传输脚本并赋值
cat>test.conf<<!EOF
spark {
  spark.sql.catalogImplementation = "hive"
  spark.app.name = "hive2clickhouse"
  spark.executor.instances = 30
  spark.executor.cores = 1
  spark.executor.memory = "2g"
  spark.yarn.queue = "spark_flink"
}

input {
    hive {
		pre_sql = "select * from test.test where dateline = '$daydate'"
		table_name = "test"
    }
}

filter {}

output {
    clickhouse {
		host = "xxx.xx.x.xxx:8123"
		database = "test"
		table = "test"
		fields = [ "id","user_id"]
		username = "default"
		password = "m8yjvWQ+"
		clickhouse.socket_timeout = 50000
		retry_codes = [209, 210]
		retry = 3
		bulk_size = 100000
    }
}

!EOF

/opt/waterdrop-1.5.1/bin/start-waterdrop.sh --master yarn --deploy-mode client --config ./test.conf

cat EOF

必须要说明的是EOF在这里没有特殊的含义,你可以使用FOE或OOO等(当然也不限制在三个字符或大写字符)。但是大多数都是使用大写、

cat 有常见以下三种使用方式:

  1. cat<<EOF,以EOF输入字符为标准输入结束
  2. cat>filename,创建文件,并把标准输入输出到filename文件中,以ctrl+d作为输入结束
  3. cat>filename<<EOF,以EOF作为输入结束,和ctrl+d的作用一样

注意:EOF必须顶行写,前面不能用制表符或者空格。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值