将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}
所以这里先创建了一层目录,然后进入到目录下,然后再进行创建目录。