1. 程式人生 > >大數據學習——點擊流日誌每天都10T,在業務應用服務器上,需要準實時上傳至(Hadoop HDFS)上

大數據學習——點擊流日誌每天都10T,在業務應用服務器上,需要準實時上傳至(Hadoop HDFS)上

路徑 log odin 分享圖片 文件的 增強 健全 nta tab

點擊流日誌每天都10T,在業務應用服務器上,需要準實時上傳至(Hadoop HDFS)上

1需求說明

點擊流日誌每天都10T,在業務應用服務器上,需要準實時上傳至(Hadoop HDFS)上

2需求分析

一般上傳文件都是在淩晨24點操作,由於很多種類的業務數據都要在晚上進行傳輸,為了減輕服務器的壓力,避開高峰期

如果需要偽實時的上傳,則采用定時上傳的方式

3技術分析

HDFS SHELL: hadoop fs –put xxxx.log /data 還可以使用 Java Api

滿足上傳一個文件,不能滿足定時、周期性傳入。

定時調度器

Linux crontab

crontab -e

*/5 * * * * $home/bin/command.sh //五分鐘執行一次

系統會自動執行腳本,每5分鐘一次,執行時判斷文件是否符合上傳規則,符合則上傳

4實現流程

4.1日誌產生程序

日誌產生程序將日誌生成後,產生一個一個的文件,使用滾動模式創建文件名。

日誌生成的邏輯由業務系統決定,比如在log4j配置文件中配置生成規則,如:當xxxx.log 等於10G時,滾動生成新日誌

 log4j.logger.msg=info,msg

log4j.appender.msg=cn.maoxiangyi.MyRollingFileAppender

log4j.appender.msg.layout=org.apache.log4j.PatternLayout

log4j.appender.msg.layout.ConversionPattern=%m%n

log4j.appender.msg.datePattern=‘.‘yyyy-MM-dd

log4j.appender.msg.Threshold=info

log4j.appender.msg.append=true

log4j.appender.msg.encoding=UTF-8

log4j.appender.msg.MaxBackupIndex=100

log4j.appender.msg.MaxFileSize=10GB

log4j.appender.msg.File=/home/hadoop/logs/log/access.log


細節:

1、 如果日誌文件後綴是1\2\3等數字,該文件滿足需求可以上傳的話。把該文件移動到準備上傳的工作區間。

2、 工作區間有文件之後,可以使用hadoop put命令將文件上傳。

階段問題:

1、 待上傳文件的工作區間的文件,在上傳完成之後,是否需要刪除掉。

4.2偽代碼

使用ls命令讀取指定路徑下的所有文件信息,

ls | while read line

//判斷line這個文件名稱是否符合規則

if line=access.log.* (

將文件移動到待上傳的工作區間

)

//批量上傳工作區間的文件

hadoop fs –put xxx

腳本寫完之後,配置linux定時任務,每5分鐘運行一次。

5代碼實現

代碼第一版本,實現基本的上傳功能和定時調度功能

技術分享圖片

代碼第二版本:增強版V2(基本能用,還是不夠健全)

技術分享圖片

技術分享圖片

6效果展示及操作步驟

1、日誌收集文件收集數據,並將數據保存起來,效果如下:

技術分享圖片

2、上傳程序通過crontab定時調度

技術分享圖片

3、程序運行時產生的臨時文件

技術分享圖片

4、Hadoo hdfs上的效果

技術分享圖片

大數據學習——點擊流日誌每天都10T,在業務應用服務器上,需要準實時上傳至(Hadoop HDFS)上