脚本调度-sqoop导出分区表-判断分区目录是否存在

                               脚本调度-sqoop导出分区表

业务场景:

我有一个导出商品数量的脚本,商品数量是动态变的,每天要执行好多次,进行动态更新。但是每天凌晨过去00:00的时候,经常会报错,报 文档不存在的错误 ,虽然知道 这个文件不存在,但是又不能停止它,在EMR中他是个工作流,脚本失败后后面的就不知行了,所以就弄了个简单的脚本做了个分区目录是否存在的判断

34: 20/09/18 08:12:59 ERROR tool.ExportTool: Encountered IOException running export job:
35: org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://emr-header-1.clu?????????? /youxian/ads/ads_every_day_ru_ku_stock_weight/dt=2020-09-18

具体实现

先判断存放在HDFS中的Hive分区目录是否存在,在选择是否执行里面的导出计划

t=`date  +%Y-%m-%d`
hadoop fs -test -e /youxian/ads/ads_every_day_ru_ku_stock_weight/dt=${t}
if [ $? -eq 0 ] ; then

 echo ${t}'日有入库商品   这里只是打印个记录 '
 
hostip=Mysql连接
post=端口号 内网/外网
db=库名
#db=gxt.test
name=Mysql账号
password=mysql密码
#输出到Mysql中的表名
table=dept_every_day_goods_deal_user_sales_num
#昨天的时间 
#t=`date -d -1day +%Y-%m-%d`
#当天
t=`date  +%Y-%m-%d`
sqoop export \
--connect jdbc:mysql://${hostip}:${post}/${db}?characterEncoding=UTF-8 \
--username  ${name} --password ${password} \
--table ${table} \
--hive-partition-key dt \
--hive-partition-value ${t} \
--export-dir /youxian/ads/ads_every_day_ru_ku_stock_weight/dt=${t} \
--input-fields-terminated-by '\001' \
--columns " dept_name, material_code,  ru_ku_stock_weight ,create_time " \
--update-mode allowinsert \
--update-key  "dept_name,material_code,  create_time  " \
-m 1
 
else

 echo ${t}'日没有入库商品'

fi

诠释:

涉及的知识点:

HADOOP  提供了内置函数  判断文件是否存在 的命令

hadoop fs -test   

  1. -d 判断<path>是否是目录
  2. -e 判断<path>是否存在      ---->   返回0 存在  , 1 不存在
  3. -f 判断<path>是否是个文件
  4. -s 判断内容是否大于0bytes ,大于0为真
  5. -z 判断内容是否等于0bytes,为0真

例如 : t=`date  +%Y-%m-%d` 
hadoop fs -test -e /youxian/ads/ads_every_day_ru_ku_stock_weight/dt=${t}

这里是动态获取的时间 做测试也可以写死。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值