写hive到clickhouse的脚本遇到的问题及解决办法

文章目录

背景

最近有个需求,就是需要把hive的数据导入到clickhouse,目前的做法是先用waterdrop把hive的数据导入clickhouse的本地表中,然后再清洗写入分布式表中。手动处理已经是完全可以的,但是想做成定时调度,但是我们这边的大数据集群和clickhouse是分开的,所以需要远程调用执行clickhouse的命令,下面就是我在写脚本的时候遇到的问题以及解决办法,特此记录一下。

步骤

waterdrop搭建以及导数据到clickhouse可以参考:https://blog.csdn.net/anyitian/article/details/115461346

下面就是我在写脚本是的心路历程,原谅我的linux水平菜。
想要远程执行命令,第一时间想到的就是使用ssh命令远程登录到clickhouse服务器上去执行,所以先让我们的运维同学帮我们开通了大数据集群到clickhouse集群的免密登录,当然只是我们需要用到的服务器。

我写的脚本主要分为以下几个步骤:

  1. 需要可以传日期,因为数据是同步hive日分区的数据
  2. 导入之前,需要先清空clickhouse本地表的数据,防止失败导致本地表的数据重复
  3. 使用waterdrop同步hive的数据到clickhouse
  4. 数据清洗,写入分布式表
  5. 清空本地表的数据

第一步很简单,脚本如下:

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

第二步因为sql语句简单,所以也没有什么问题,直接使用ssh远程命令调用即可

ssh root@xxx.xxx.x.xxx 'clickhouse-client -u default --password m8yjvWQ+ --query="truncate table test.bi_player2"'

因为ssh命令也遵循混合使用单双引号,所以只要和clickhouse命令里的引号错开即可。

第三步 同步数据直接使用waterdrop即可。
但是waterdrop的配置文件不能传参,解决办法参考waterdrop配置文件动态赋值

脚本如下:

cat>/opt/waterdrop-1.5.1/job/ods_bi_player2.conf<<!EOF
spark {
   
  spark.sql.catalogImplementation = "hive"
  spark.app.name = "hive2clickhosue_player2"
  spark.executor.instances = 30
  spark.executor.cores = 1
  spark.executor.memory = "2g"
}
input {
   
    hive {
   
	    pre_sql = "select user_id,level,country,vip,rmb_diamonds,all_diamonds,money,wood,forage,mineral,iron,feats,card_soul,corps_money,treasure_money,official,building,castle_lv,genius,m_power,guide_step,record_time,corps_uid,horseshoe_gold,bi_sid,gather_time,if(record_time is null,dateline,from_unixtime(record_time,'yyyy-MM-dd')) as date
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值