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