Hadoop-HDFS-定时上转Nginx用户日志用shell脚本

1 篇文章 0 订阅
1 篇文章 0 订阅

1、其他API&stream操作

  Stream流形式操作HDFS,这是一个更底层的操作方式:

public void testUpload()  throws Exception{

 

 FSDataOutputStream outputStream =fs.create(newPath("/1.txt",true));

 FileInputStream inputStream=new FileInputStream("D:\\1.txt");

 IOUtils.copy(inputStream,outputStram);

}

2、案例:shell定时采集数据至HDFS

     网站每天产生的日志数据准时上传至HDFS集群上

 2.1 技术分析:

  HDFS  SHELL:

  hadoop fs -put //满足上传文件,不能满足定时,周期性传入

   Linux crontab:

   crontab -e

   0 0 * * */shell/uploadFile2Hdfs.sh //每天凌晨1200执行一次

2.2 实现流程:  采用Nginx进行日志采集

   upliadFile2HDFS.sh

   HDFS定时上传shell案例:

#!/bin/bash

#set java env

exportJAVA_HOME=/export/software/jdk1.8.0_65

exportJRE_HOME=${JAVA_HOME}/jre

exportCLASSPATH=.:${JAVA_HOME}/bin:{JRE_HOME}/bin

exportPATH=${JAVA_HOME}/bin:$PATH

 

#set hadoop env

export HADOOP HOME+/export/software/hadoop-2.7.4

exportPATH=${HADOOP_HOME}/bin:{HADOOP_HOME}/sbin:$PATH

 

 

#日志文件存放的目录

log_src_dir+/root/logs/log/

#待上转文件的存放目录

log_toupload_dir=/root/logs/toupload

#日志上传到HDFS的根路径

datel=‘date -d last-day+%Y_%m_%d’

hdfs_root_dir=/data/clickLog/$datel/

#打印环境变量信息

echo"envs:hadoop_home:$HADOOP_HOME"

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

echo"log_src_dir:"$log_src_dir

ls $log_src_dir | whileresd 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_scr_dir$fileName $log_toupload_dir"xxxxx_click_log_$fileName"$date

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

 echo log_toupload_dir"xxxx_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 readline

do

  #打印信息

echo "toupload is infile:"$line

#将待上转文件列表willDoing改名为willDoing_COPY

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

#读列文件willdoing-copy内容,此处的line就是列表中等待上传的一个文件的path

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

do

  #打印信息

  echo "puting ...$line to hdfspath......$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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞腾创客

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值