Shell -死循环执行

2 篇文章 0 订阅
2 篇文章 0 订阅

Shell -死循环执行

背景

​ 接到的一个需求,把HIVE表计算后的数据写往ES集群。计算后的数据落地在一个新的表中,每日推至ES当中。HIVE数据每日大概500MB。由于数据量比较大,所以使用SPARK开发应用对接HIVE和ES中的数据。在上线几日后,执行SPARK开发的jar包总有报错。查看日志显示内存溢出异常,于是调整执行spark程序的shell语句,将Driver内存、Executor个数、Executor核数、Executor内存都做了调整(机器资源充沛扩大到Executor 10G,Driver 2G),修改过过后,重新推HIVE数据到ES,成功。但是后续几天依然会有内存溢出。仔细看了日志。核心原因是从ES发出的,推入数据量超出ES的配置(单次写入ES集群数据量有限制,默认值是(400MB)超过400M就会中断程序),ES集群就中断了spark程序。为了让数据写入慢一点,使用coalese方法,将spark程序写入es的并行度降低为1,使写入的速度比多并行度的时候速度降低很多。但仍然不起效,神奇的是手动重跑就会成功,很玄学。ES集群负责人也不调整ES的配置参数。我们不能休息日了还再手动重新开电脑跑脚本了!

方案

无奈,网上找了个shell方法 ,执行hive数据导入es的spark开发的jar包,直至写入成功为止。

repeat() { while :; do $@ && return; sleep 600; done }
测试

上线前先做个测试,使用该方法检测下载HDFS上的sou1yu.txt的命令 。若HDFS的/jars目录下无指定名字的文件,则每10分钟会下载一次文件。

#!bin/bash
repeat(){ while :; do $@ $$ return ; sleep 600; done}
repeat hdfs dfs -get /jars/sou1yu.txt

执行shell

当上传sou1yu.txt文件至HDFS时,shell会执行完成!
完事,大功告成!他们ES集群现在还很健康。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值