做网站在线支付系统多少钱/制作网站费用
文章目录
- 前言
- 解决办法
- cat EOF
前言
最近在使用waterdrop读取hive的数据,并写入clickhouse。但是hive是按照天来分区的,所以同步数据的时候需要动态的选择分区。但是waterdrop的配置文件是conf文件,没法动态赋值。特此记录一下这个解决办法。
解决办法
我们可以使用cat <<!EOF把变量传进去,并且把脚本生成在文件夹中,然后再使用waterdrop的命令调用即可。demo如下:
#!/bin/bash# 日期及参数配置输入,默认当天无参数输入
if [ $# == 0 ];thendaydate=`date +%Y-%m-%d`
elif [ $# == 1 ];thendaydate=$1
elseecho "输入参数出错!"exit 1
fiecho "当日:$daydate"# 打印数据传输脚本并赋值
cat>test.conf<<!EOF
spark {spark.sql.catalogImplementation = "hive"spark.app.name = "hive2clickhouse"spark.executor.instances = 30spark.executor.cores = 1spark.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 = 50000retry_codes = [209, 210]retry = 3bulk_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 有常见以下三种使用方式:
- cat<<EOF,以EOF输入字符为标准输入结束
- cat>filename,创建文件,并把标准输入输出到filename文件中,以ctrl+d作为输入结束
- cat>filename<<EOF,以EOF作为输入结束,和ctrl+d的作用一样
注意:EOF必须顶行写,前面不能用制表符或者空格。