• 大数据学习——服务器定期上传nginx日志到hdfs


    需求:按照所学知识完成如下:
    服务器定期上传nginx日志到hdfs
    
    提示:
    Hdfs的创建文件夹命令:
    Hadoop fs -mkdir /文件夹名称
    
    Hdfs的上传命令:
    Hadoop fs -put 目标文件   /目标目录
    
    #日志文件存放的目录
    log_src_dir=/home/hadoop/logs/log/
     
    #待上传的日志存放目录
    log_toupload_dir=/home/hadoop/logs/toupload/
     
    #日志文件上传到hdfs上的目录
    hdfs_log_dir=/data/clickLog/2017/
    
    1、定时上传,每分钟需要将nginx日志上传(25分)
    2、读取日志文件的目录,判断是否有需要上传的文件(253、如果有需要上传的文件则将文件转移到待上传目录(254、要考虑防止重复上传(25)
    
    
    
    uploadFile.sh
    
    #!/bin/bash
     
    #set java env
    export JAVA_HOME=/gcx/jdk1.7.0_45
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
     
    #set hadoop env
    export HADOOP_HOME=/gcx/hadoop-2.6.4
    export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
     
    #日志文件存放的目录
    log_src_dir=/home/hadoop/logs/log/
     
    #待上传的日志存放目录
    log_toupload_dir=/home/hadoop/logs/toupload/
     
    #日志文件上传到hdfs上的目录
    hdfs_log_dir=/data/clickLog/2017/
     
    #打印环境变量信息
    echo "envs: hadoop_home: $HADOOP_HOME"
     
    #读取日志文件的目录,判断是否有需要上传的文件
    echo "log_src_dir:"$log_src_dir
    ls $log_src_dir | while read fileName
    do
        if [[ "$fileName" == access.log.* ]]; then
        # if [ "access.log" = "$fileName" ];then
            date=`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
    #找到列表文件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 -put $line $hdfs_root_dir
        done    
        mv $log_toupload_dir$line"_COPY_"  $log_toupload_dir$line"_DONE_"
    done
    
    
    配置crontab定时任务
    
    */1 * * * * sh uploadFile.sh
  • 相关阅读:
    bzoj3531[Sdoi2014]旅行
    bzoj3212 Pku3468 A Simple Problem with Integers 线段树
    bzoj1858[Scoi2010]序列操作 线段树
    bzoj2243[SDOI2011]染色 树链剖分+线段树
    bzoj3038上帝造题的七分钟2
    bzoj1036[ZJOI2008]树的统计Count 树链剖分+线段树
    bzoj3211花神游历各国 线段树
    bzoj4596[Shoi2016]黑暗前的幻想乡 Matrix定理+容斥原理
    bzoj3129[Sdoi2013]方程 exlucas+容斥原理
    刷题总结——寻宝游戏(bzoj3991 dfs序)
  • 原文地址:https://www.cnblogs.com/feifeicui/p/10155540.html
Copyright © 2020-2023  润新知