案例——Shell定时采集数据到HDFS

发布于:2022-11-01 ⋅ 阅读:(352) ⋅ 点赞:(0)

先开集群,在logs目录底下创脚本文件upload2HDFS.sh(vim upload2HDFS.sh)

 脚本内容:

#!/bin/bash          脚本开头,固定格式

#JAVA_HOME环境变量设置

export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64

export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME环境变量设置

export HADOOP_HOME=/opt/programs/hadoop-3.1.4

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

#日志文件存放的目录

log_src_dir=/opt/data/logs/log/

#待上传文件存放的目录

log_toupload=/opt/data/logs/toupload/

#设置日志文件上传的路径

#设置日期

date1=$(date -d last-day +%Y_%m_%d)

#日志文件上传到hdfs的根路径

hdfs_root_dir=/data/clicklog/$date1/

#打印环境变量信息

echo "envs:hadoop_home:$HADOOP_HOME"

#读取日志文件的目录,判断是否有需要上传的文件

echo "log-src_dir:"$log_scr_dir

#找到列表文件willDoing

ls $log_toupload_dir | grep will | grep -v "_COPY_" | grep -v "_DONE_" | while read line

do

    #打印信息

    echo "toupload is in file:"$line

    #将待上传文件列表willDoing改名为willDoing_COPY_

    mv $log_toupload_dir$line $log_toupload_dir$line"_COPY_"

    #读列表文件willDoing_COPY_的内容(一个一个的待上传文件名),此处的line就是列表中的一个待上传文件的path

    cat $log_toupload_dir$line"_COPY_" | while read line

    do

        #打印信息

        echo "puting...$line to hdfs path.....$hdfs_root_dir"

        hadoop fs -mkdir -p $hdfs_root_dir

        hadoop fs -put $line $hdfs_root_dir

    done

    mv $log_toupload_dir$line"_COPY_"  $log_toupload_dir$line"_DONE_"

done

ls $log_src_dir | while read fileName

do

    if [[ "$fileName" == access.log.* ]]; then

    # if [ "access.log" = "$fileName" ];then

        date2=$(date "+%Y_%m_%d_%H_%M_%S")

        #将文件移动到待上传目录并重命名

        #打印信息

        echo "moving $log_src_dir$fileName to $log_toupload_dir"xxxxx_click_log_$fileName"$date"

        mv $log_src_dir$fileName $log_toupload_dir"xxxxx_click_log_$fileName"$date

        #将待上传的文件path写入一个列表文件willDoing

        echo $log_toupload_dir"xxxxx_click_log_$fileName"$date >> $log_toupload_dir"willDoing."$date

    fi

done

保存文本并退出(esc键,:wq)

1、需要设置Java环境变量Hadoop环境变量(这样做是用来提高系统的可靠性,保障运行程序的机器在没有配置环境变量的情况下依然能够运行脚本)

#JAVA_HOME环境变量设置

export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64

export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME环境变量设置

export HADOOP_HOME=/opt/programs/hadoop-3.1.4

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

2、为了让开发者便于控制上传文件的流程,可以在脚本中设置一个日志存放目录待上传文件目录,若上传过程中发生错误只需要查看该目录就能知道文件的上传进度。(手动创建这两个目录:/opt/data/logs/log/opt/data/logs/toupload

手动创建两个目录:

mkdir -p  /opt/data/logs/log/

mkdir -p  /opt/data/logs/toupload/

3、设置上传的HDFS目标路径,命名格式以时间结尾,并且输出打印信息

4、从待上传目录中上传到HDFS

5、文件首先移动到待上传目录

6、保存好文件后:

        转到当前目当 :       cd /opt/data/logs/log/

        创建日志文件(内容随意):        vim access.log

7、转换格式:(/opt/data/log底下)

        cp access.log access.log.1

        cp access.log access.log.2

        cp access.log access.log.3

        cp access.log access.log.4

8、在 /opt/data/logs/目录下sh upload2HDFS.sh(执行脚本),看到这个就成功了

        envs:hadoop_home:/opt/programs/hadoop-3.1.4
        log-src_dir:
        toupload is in file:willDoing.
        puting...xxxxx_click_log_access.log.1 to hdfs path...../data/clicklog/2022_10_31/
        puting...xxxxx_click_log_access.log.2 to hdfs path...../data/clicklog/2022_10_31/
        puting...xxxxx_click_log_access.log.3 to hdfs path...../data/clicklog/2022_10_31/
        puting...xxxxx_click_log_access.log.4 to hdfs path...../data/clicklog/2022_10_31/

注:在hdfs会自动生成 /data/..

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到