文章目錄
常見問題
- 項目會涉及到哪些技術?
- Nginx
- HDFS
- Flume
- MapReduce
- Scala
- Spark
- 可視化展示
- 需要會哪些編程語言?
- 具備Java基本知識
- 具備Html基本知識
- Scala?會Step by Step講解
- 需要提前做哪些準備?
- 準備Linux運行環境
- 搭建CDH集羣
項目背景
- 用戶行爲分析需要分析哪些內容?
你是誰?
你從哪裏來
- 免費流量
- 直接打開網頁
- 好友推薦
- 微信/微博/QQ
- 友情鏈接
- 搜索引擎自然流量
- 付費流量
- 上網導航
- 廣告直通車
- 搜索引擎SEM
- 爲何要分析用戶來源?
- 不同流量質量存在差異!
你要到哪裏去?
- 在瀏覽的過程中會留下各種行爲數據!
- 終極目標:促使用戶形成轉化效果
- 購物類:淘寶、京東、小紅書、拼多多
- 促進購買
- 理財類:陸金所、螞蟻財富
- 促進投資
- 新聞類:今日頭條
- 提升閱讀量
- 視頻類:愛奇藝、騰訊視頻
- 提升觀看量
- 購買會員
行爲數據價值
- 作爲評價指標
- 哪個頁面訪問人數最多
- 哪個商品最有價值
- 構建畫像
- 用戶屬性畫像
- 用戶行爲畫像
- 促進轉化率
- 構建渠道分析模型
- 構建廣告點擊模型
- 構建商品推薦模型
- 風險控制
- 識別羊毛黨
- 團伙欺詐
行爲分析指標
數據指標
數據蒐集
- 需要蒐集哪些行爲數據?
- 網頁訪問日誌
- 業務行爲
- 收藏
- 評論
- 添加購物車
- 下單
- 支付
- 點擊行爲
- 鼠標懸停
- 按鈕/圖片點擊
數據蒐集面臨的挑戰
- 所有的訪問行爲均以日誌的形式記錄
- 日誌文件離散存儲
- 日誌文件非結構化
- 記錄數量巨大:TB級每日
- 數據孤島
- 文件
- 訪問日誌
- 行爲日誌
- 數據庫:MySQL/Oracle
- 業務數據
- 文件
系統架構
工作流程
如何區分用戶和訪問
- 如何識別用戶?
- 對於每一次會話均生成唯一的一個uuid
- 如果用戶在會話期間登入
- 記錄下uuid和userId之間的關係
- 如果用戶在會話期間未登入
- 將uuid作爲訪客的userId
- HTTP協議是無狀態的,如何保存uuid信息?
- Cookie方案:客戶端保持機制
- 優點
- 服務器壓力少,可支持跨域
- 缺點
- 需要瀏覽器支持,對客戶端可見,只能存儲ASCII字符串
- 優點
- Session方案:服務器端保持機制
- 優點
- 僅在服務器端可見,可以保存任何類型數據
- 缺點
- 服務器壓力大,不支持跨域
- 優點
- Cookie方案:客戶端保持機制
有些瀏覽器可以關閉Cookie;如果還想用Cookie怎麼辦?
可以在服務端生成一個session id;然後附加到url後面來解決用戶關閉cookie的方案
數據採集
- 挑戰
- 數據源多樣化
- 數據量巨大
- 保證數據採集的可靠性
- 避免採集重複數據
- 保證數據質量
- 解決方案
- 從統一的接入層輸出日誌
- 預定義日誌輸出格式,減少清洗工作
- 使用Flume作爲數據採集工具
數據存儲
- 挑戰
- 儘可能以低成本存儲海量數據
- 支持橫向擴容
- 保證數據高可用
- 可以快速爲分佈式計算提供數據
- 解決方案
- 使用HDFS作爲存儲層
- 數據按照時間進行分區存儲
數據處理
- 挑戰
- 支持分佈式計算
- 支持橫向擴展
- 支持容錯
- 簡單高效的編程模型
- 多語言支持
- 解決方案
- MapReduce
- 大數據處理框架的工業標準和基石
- Spark
- 大規模快速通用計算框架
- 非常適合迭代類型任務
- MapReduce
MapReduce
Spark
- 一站式解決
- 離線批處理 ✓
- 流式計算 ✓
- 在線實時分析 ✓
數據展現
- 挑戰
- 要漂亮
- 容易理解
- 支持交互
- 幫助挖掘價值
- 解決方案
- Echarts
- 百度開源的可視化圖表組件
- Tableau(需要money)
- 商業級可視化數據分析智能工具
- Echarts
系統架構
數據流
Nginx配置
Nginx簡介
- Nginx 是一個高性能的HTTP和反向代理服務器
- 穩定、輕量、資源佔用率小
- 可以作爲負載均衡服務器
- 作爲網站入口統一輸出日誌
- 安裝
- Centos
- sudo yum install nginx
- Ubuntu
- sudo apt-get install nginx
- Centos
- 主配置文件
- /etc/nginx/nginx.conf
- 常用命令
- service nginx [start|restart|stop|reload]
Nginx負載均衡
- 配置負載均衡
- upstream指向Web Server
- 可以配置多臺服務器
- 默認使用輪詢方式進行負載均衡
- 每一個請求按訪問ip的hash結果分配
Nginx UserID模塊
- 啓用Nginx UserID模塊
- 使用nginx_http_userid_module模塊跟蹤識別用戶
- 藉助Cookie
Nginx 配置日誌輸出格式
- 定義log_format
- 配置樣例
log_format acc_log '$remote_addr\t$scheme://$host$request_uri\t$http_referer\t$uid_got\t$time_local';
Nginx 配置樣例
/etc/nginx/conf.d/default.conf(沒有就新建)
server {
# http和https兩個選擇一種
# http監聽80端口
# listen 80 default_server;
# https監聽443端口
listen 443 ssl http2 default_server;
# 需要註釋掉ipv6的監聽
# listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# https需要配置,如果不需要https請註釋
ssl on;
ssl_certificate /etc/nginx/conf.d/ssl.crt;
ssl_certificate_key /etc/nginx/conf.d/ssl.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_set_header X-Forwarded-SSL on;
# 啓用userid模塊
userid on;
userid_name uid;
userid_domain gp-bd.com;
userid_path /;
userid_expires 1h;
proxy_set_header Host $host;
# 日誌配置
access_log /data/log/nginx/nginx_access.log acc_log;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# 轉發配置
location / {
proxy_pass http://pool_web;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
log_format acc_log ‘$remote_addr\t$scheme://$host$request_uri\t$http_referer\t$uid_got\t$time_local';
upstream pool_web {
server 127.0.0.1:8000;
ip_hash;
}
nginx啓動失敗如何解決
https://blog.csdn.net/liyuling52011/article/details/80038642
購物車服務搭建
項目數據準備
- 使用OpenCart搭建電商網站
- 著名開源電子商務系統
- 特點
- 模板化
- 產品評論
- 產品評分
- 優惠券
- 模擬點擊並蒐集瀏覽行爲日誌
項目數據準備
- 數據庫準備
- 安裝MySQL 5.7數據庫
- sudo apt-get install mysql-server
- 修改綁定地址
- sudo vim mysqld.cnf
- bind-address = 0.0.0.0
- sudo service mysql restart
- 進入mysql
- sudo mysql -uroot -p
- 創建Database
- CREATE DATABASE opencart CHARACTER SET utf8 COLLATE utf8_general_ci;
- 創建用戶opencart
- CREATE USER ‘opencart’@’%’ IDENTIFIED BY ‘opencarT$123’;
- 進行相關表權限授權
- grant all privileges on opencart.* to ‘opencart’@’%’ IDENTIFIED BY ‘opencarT$123’ with grant option;
- flush privileges;
- 安裝MySQL 5.7數據庫
這裏我們直接使用root用戶。以上只是介紹創建其他用戶。
項目數據準備
- 使用docker鏡像安裝opencart
- 什麼是docker?
- Docker是一個開源的應用容器引擎。
- 可以將應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的
Linux機器上。
- 安裝docker
- Centos
- sudo yum install docker-ce
- 6.x https://github.com/vfleaking/uoj/wiki/Install-Docker-on-CentOS-6.x
- 7.x https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce
- Ubuntu
- sudo apt-get install docker-ce
- Centos
- Pull鏡像
- sudo docker pull vimagick/opencart
- 啓動容器
- sudo docker run -d -p 8000:80 vimagick/opencart
- docker ps 檢查端口映射
- -i參數=打開STDIN,用於控制檯交互
- -t參數=分配tty設備,該可以支持終端登錄
- -p參數=指定容器暴露的端口
- -d參數=後臺運行
- sudo docker exec -it {docker container id} /bin/bash
客戶端訪問 注意一定要用域名訪問
直接訪問https://hadoop即可
- 初始化opencart
- 數據庫URL
- 數據庫賬號
- 數據庫密碼
- 表前綴名
- 管理員賬號
- 管理員密碼
注意ip要用docker的
回到原始界面,可以隨意點擊商品
隨意點擊商品;可查看到輸出日誌;爲下一步分析做準備
檢查訪問日誌
tail -f /data/log/nginx/nginx_access.log
- opencart管理地址 http://IP:Port/admin/