用戶行爲分析之離線數據採集

咱們的數據從哪來?

互聯網行業:網站、APP、系統(交互系統)。
傳統行業:電信、上網、打電話、發短信等等。
數據源:網站、APP。
等等,這些用戶行爲都回向咱們的後臺發送請求各類各樣的請求,和進行各類邏輯交互、交易和結帳等等。java

請求轉發

網站/APP會發送請求到後臺服務器,一般會有Nginx接受請求,而後進行轉發。python

後臺服務器,例如Tomcat、Jetty

一般在面向大量用戶和高併發(每秒請求量過萬)時,都不是直接使用Tomcat來接收請求。而是使用Nginx來接收請求,而且後端介入Tomcat集羣/jetty集羣,來進行高併發下的負載均衡。
好比說,Nginx/Tomcat,通過適當配置以後,全部的請求數據都會以log的形式存儲起來;或者接收請求的後臺,也能夠按照本身制定的的規範,沒接收一個請求或者沒執行一個邏輯,就往日誌裏發一條log。
到此爲止,咱們的後臺天天就能夠至少產生一份日誌文件。web

日誌文件

日誌文件(按照咱們預先設定的格式)一般天天一份,固然也能夠多分日誌,由於有多個web服務器。
一個日誌轉移的工具,好比本身用Linux的crontab定時調度一個shell腳本/python腳本;或者本身用java開發一個後臺服務,用quartz這樣的架構進行定時調度。這個工具負責當天的全部日誌的數據都採集起來,進行合併和處理等操做 ,而後整合成一份日誌文件,轉移到flume agent正在監控的文件夾中。shell

flume 監控日誌文件

flume agent啓動以後,能夠實時的監控某個指定的文件,看是否有新的文件進來。只要發現有新的日誌文件進來時,那麼flume就會走後續的channel和sink。一般來講,sink都會配置爲HDFS。
flume負責講天天的日誌傳輸到HDFS。後端

日誌文件存儲在HDFS之中

由於HDFS能夠用來存儲大數據。tomcat

數據清洗

HDFS中的原始日誌數據會通過清洗,由於原始數據中可能不少是不符合預期的髒數據。
使用MapReduce開發本身的MR做業,能夠用crontab來定時執行,也能夠用Ooize或者bat京東美團本身開發的複雜、大型、分佈式的調度系統,來承擔全公司全部MapReduce/Hive做業的調度(對於大公司來講,可能天天除了負責數據清洗的MR做業以外,後續的創建數據倉庫、進行數據的統計分析的Hive ETL可能高達上萬個,上十萬個,上百萬等),針對HDFS中的原始日誌數據清洗以後,寫入HDFS的另一個文件之中。服務器

Hive

把HDFS清洗後的數據導入到Hive的某個表中,Hive可使用動態分區,Hive使用分區表,每一個份去放一天的數據。
Hive底層也是基於HDFS,做爲一個大數據的數據倉庫。數據倉庫內部,再日後,其實就是一些數據倉庫建模的ETL。ETL會將原始日誌所在的一個錶轉化爲幾十個、幾百個表,這些表就是咱們的數據倉庫。而後公司的統計分析人員就會根據數據倉庫中的表,執行臨時的或者天天定時的 Hive SQL ETL做業進行大數據的統計分析。
Spark/Hadoop/Storm,大數據平臺/系統可能都會採用Hive中的數據倉庫內部的表。架構

大數據平臺/系統

咱們的大數據平臺/系統,其實一般來講,都會針對Hive中的數據進行開發。數據源都是來自Hive中的表,這些表都是通過大量的Hive SQL ETL之後創建起來的數據倉庫,而後進行特殊的、符合業務需求的大數據平臺。經過大數據平臺來給公司的用戶使用,來提供大數據的支持,推進公司的發展。併發

相關文章
相關標籤/搜索