将hdfs上的数据上传到ftp服务器(是ftp不是sftpf服务器)的脚本

今天公司的业务要将hive逻辑生成的表数据做数据外发到对应的业务部门。(将数据上传到ftp服务器)

具体脚本如下:

#!/bin/bash

#/*********************************************************************
#*模块名 :数据
#*程序名 :数据
#*功能 : 数据上传sftp版本2
#*开发人 : gxg
#*开发日期: 2021-09-18
#*修改记录: 
#*执行参数:${yyyyMMdd} 
#*数据:FTP
#*
#*********************************************************************/

#这里定义变量,通常传入的日期参数pt是yyyymmdd格式,data_date是yyyy-mm-dd格式

pt=$(date -d "-0 day $3 " +%Y%m%d)
echo 'pt='$pt

USER=suiyoushi
#密码
PASSWORD='自己的密码'
#FTP目录
DESDIR=/label_data
#本地临时目录

SRCDIR=/apps/ftpdata/ai/luyin/sftp/${pt}
table_name='cdm_data'


#创建本地临时目录
mkdir -p $SRCDIR
rm -rf $SRCDIR/*
#将数据拉取到本地服务器上
hadoop fs -get /user/hive/dtwarehouse/cdm/yiche/cdm_data/pt=${pt}/*  ${SRCDIR}
hadoop fs -ls /user/hive/dtwarehouse/cdm/yiche/cdm_data/pt=${pt}/*
ls /apps/ftpdata/ai/luyin/sftp/${pt}

#ftp服务器IP
IP=81.0.0.0
#端口
PORT=21

#登陆服务器上传文件
ftp -i -v -n ${IP}<<EOF
user ${USER} ${PASSWORD}
binary
mkdir ${DESDIR}/${table_name}
cd ${DESDIR}/${table_name}
mkdir ${pt}
rm -rf ${DESDIR}/${table_name}/${pt}/*
cd ${DESDIR}/${table_name}/${pt}
pwd
lcd ${SRCDIR}
prompt
quote pasv
passive
mput 0*
cd ${DESDIR}/${pt}
pwd
ls
by
EOF
res=$? #获取上一个语句执行结果
if [ $res -ne 0 ]; then #若执行结果不为0(即出错),则退出并返回错误代码
  exit $res
fi

echo 'SFTP put success'

这里需要注意的是:我们想动态的在远程的ftp服务上建立目录,但是那好像不能创建多层目录,他不能像Linux服务器一样的通过

mkdir -p的形式创建多层目录,所以只能一级一级的创建

mkdir ${DESDIR}/${table_name}
cd ${DESDIR}/${table_name}
mkdir ${pt}
所以这里先创建了一层目录,然后进入到目录下,然后再进行创建目录。


原文地址:https://www.cnblogs.com/gxgd/p/15598607.html