Linux环境下用户上传的文件自动监听上传到HDFS

一.背景

在某些业务创建下,用户需要将自己的大文件通过FTP工具上传到自己的FTP服务器文件下,然后在为了保证服务的高可用,我们可以采用监听同步的方式备份对应的数据文件。甚至可以通过该机制将文件同步到用户下的HDFS的集群中。

二.方案

 2.1rsync + inotify

业务流程图

上述是整体的业务逻辑,后面部分的hadoop同步到HDFS是其他业务场景,可以不考虑。

步骤

  1. 安装rsync同步操作
    Bash
    #生成相应的公私钥
    ssh-keygen
    #第一行,密钥存放位置,建议选默认,也可以自己更改路径
    #第二行,输入密钥密码,也可以不输入(为了后续实验,建议不输入)
    #第三行,再次确认密码
    ls /root/.ssh  #查看密钥生成情况
    
    ssh-copy-id root@XXX.XXX.XXX.XXX  #传输公钥到虚拟机A
    
    rsync -av /root/sftp/XX/1.txt root@XXX.XXX.XXX.XXX:/root
    
  2. 在需要监听的服务器上安装inotify工具
    Bash
    #安装make 和 gcc
    yum -y install make gcc
    
    tar -xf /root/inotify-tools-3.14.tar.gz -C /usr/local
    cd /usr/local/inotify-tools-3.14/
    ./configure 
    make    #编译,生成可执行的二进制文件
    make install  #make install 安装,将编译好的文件复制到安装目录
    #.查看监控程序的生成
    ls /usr/local/bin/inotifywait
    
  3. 在目录下创建远程同步shell脚本
    Shell
    #!/bin/bash
    
    Monitor="inotifywait -mrq -e modify,create,attrib,move,delete /home/"
    Sync="rsync -azH --delete --timeout=30 --exclude=$FILE /home/ root@XXX.XXX.XXX.XXX:/sftp"
    
    $Monitor | while read path action file;
    do
        #filepath="$path$file"
        #echo "File path: $filepath"
        $Sync
    done
    
  4. inotify + hdfs + supervisor
    Shell
    #!/bin/bash
    
    Monitor="inotifywait -mrq -e modify,create,move --exclude "^.bash*" /sftp/"
    $Monitor | while read path action file;
    do
        filepath="$path$file"
        username=`echo "${filepath}" | cut -d "/" -f 3`
        #echo "${filepath}  ${username}"
        case "$action" in
             "MODIFY")
                    echo "file ${filepath} has been modified."
                    ;;
             "CREATE")
                    echo "file ${filepath} has been created."
                    ;;
             "MOVED_TO")
                    echo "file ${filepath} has been moved."
                    sudo -u $username hdfs dfs -put "$filepath" "/appcom/$username/"
                    ;;
             *)
                     echo "action $action"
                    ;;
        esac
    done
    
  5. 验证是否上传成功,并设置开机自启动

    sudo -u hadoop hdfs dfs -ls /user/hadoop
    
    #给脚本赋权 
    chmod +x /etc/rc.d/rc.local 
    #设置开机自启动
    echo "/rsync.sh" >> /etc/rc.d/rc.local 
    

    2.1通过NiFi监听SFTP上传文件到HDFS

业务流程图:

步骤

需要学习相关技术工具,作者也在学习中期待后续进展。

参考文章:

rsync:
https://blog.csdn.net/hahaxixi131/article/details/119430983?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-119430983-blog-116577028.pc_relevant_3mothn_strategy_recovery&spm=1001.2101.3001.4242.1&utm_relevant_index=3

NIFI:

https://blog.csdn.net/weixin_45568892/article/details/105396032

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值