Hadoop學習之Hadoop案例分析

1、日誌數據分析
1.背景
1.1 ***論壇日誌,數據分爲兩部分組成,原來是一個大文件,是56GB;之後天天生成一個文件,大約是150-200MB之間;php

每行記錄有5部分組成:1.訪問ip;2.訪問時間;3.訪問資源;4.訪問狀態;5.本次流量mysql

1.2 日誌格式是apache common日誌格式;
1.3 分析一些核心指標,供運營決策者使用;sql

1.3.1 瀏覽量PV shell

    定義:頁面瀏覽量即爲PV(Page View),是指全部用戶瀏覽頁面的總和,一個獨立用戶每打開一個頁面就被記錄1 次。分析:網站總瀏覽量,能夠考覈用戶對於網站的興趣,就像收視率對於電視劇同樣。可是對於網站運營者來講,更重要的是每一個欄目下的瀏覽量。計算公式:記錄計數。注意要和後面的IP數區分開來,瀏覽量能夠包括重複ip地址。apache

1.3.2 註冊用戶數服務器

    計算公式:對訪問member.php?mod=register的url,計數網絡

1.3.3 IP數 dom

    定義:一天以內,訪問網站的不一樣獨立IP 個數求和,其中同一IP不管訪問了幾個頁面,獨立IP 數均爲1。分析:這是咱們最熟悉的一個概念,不管同一個IP上有多少電腦,或者其餘用戶,從某種程度上來講,獨立IP的多少,是衡量網站推廣活動好壞最直接的數據。公式:對不一樣ip計數工具

1.3.4 跳出率 oop

    定義:只瀏覽了一個頁面便離開了網站的訪問次數佔總的訪問次數的百分比,即只瀏覽了一個頁面的訪問次數 / 所有的訪問次數彙總。分析:跳出率是很是重要的訪客黏性指標,它顯示了訪客對網站的興趣程度:跳出率越低說明流量質量越好,訪客對網站的內容越感興趣,這些訪客越多是網站的有效用戶、忠實用戶。

    該指標也能夠衡量網絡營銷的效果,指出有多少訪客被網絡營銷吸引到宣傳產品頁或網站上以後,又流失掉了,能夠說就是煮熟的鴨子飛了。好比,網站在某媒體上打廣告推廣,分析從這個推廣來源進入的訪客指標,其跳出率能夠反映出選擇這個媒體是否合適,廣告語的撰寫是否優秀,以及網站入口頁的設計是否用戶體驗良好。

計算公式:(1)統計一天內只出現一條記錄的ip,稱爲跳出數;(2)跳出數/PV

1.3.5 板塊熱度排行

     定義:版塊的訪問狀況排行。分析:鞏固熱點版塊成績,增強冷清版塊建設。同時對學科建設也有影響。計算公式:按訪問次數統計排序


1.4 開發該系統的目的是分了獲取一些業務相關的指標,這些指標在第三方工具中沒法得到的;

2 開發步驟

  2.1 使用flume將日誌文件上傳到HDFS;

        若是是日誌服務器數據較小、壓力較小,能夠直接使用shell命令把數據上傳到HDFS中;若是是日誌服務器數據較大、壓力較答,使用NFS在另外一臺服務器上上傳數據;若是日誌服務器很是多、數據量大,使用flume進行數據處理;

    2.2 編寫MapReduce程序對HDFS中的數據進行清洗;

    2.3 使用Hive對清洗後的數據進行統計;

    2.4 將統計後的數據經過Sqoop導出到MySql中;

    2.5 若是須要查看詳細數據,則能夠經過HBase進行展示;

3 詳細概述

   3.1 使用Shell數據將數據從Linux上傳到HDFS中

       3.1.1 首先在HDFS上建立目錄

      命令:$HADOOP_HOME/bin/hadoop fs -mkdir /hmbbs_logs

       3.1.2 編寫Shell腳本,用於上傳文件到HDFS中

      yesterday=`date --date='1 days ago' +%Y_%m_%d`
            hadoop fs -put /apache_logs/access_${yesterday}.log   /hmbbs_logs

       3.1.3 把腳本upload_to_hdfs.sh配置到crontab(定時器)中,執行命令crontab -e, 寫法以下

       * 1 * * * upload_to_hdfs.sh

  3.2 使用MapReduce對數據進行清洗,將清洗後的數據保存到HDFS中的/hmbbs_cleaned目錄下,天天產生一個子目錄

  3.3 使用Hive對清洗後的數據進行統計

    3.3.1 首先創建一個外部分區表,腳本以下

       CREATE EXTERNAL TABLE hmbbs(ip string, atime string, url string) PARTITIONED BY (logdate string) ROW FORMAT DELIMITED FIELDS        TERMINATED BY '\t' LOCATION '/hmbbs_cleaned';

    3.3.2 對新建表增長分區,腳本以下

        ALTER TABLE hmbbs ADD PARTITION(logdate='2013_05_30') LOCATION '/hmbbs_cleaned/2013_05_30';
              把代碼增長到upload_to_hdfs.sh中,內容以下
              hive -e "ALTER TABLE hmbbs ADD PARTITION(logdate='${yesterday}') LOCATION '/hmbbs_cleaned/${yesterday}';"

    3.3.3 對數據進行統計,代碼以下

       CREATE TABLE hmbbs_pv_2013_05_30 AS SELECT COUNT(1) AS PV FROM hmbbs WHERE logdate='2013_05_30';
              統計每日的註冊用戶數,代碼以下
              CREATE TABLE hmbbs_reguser_2013_05_30 AS SELECT COUNT(1) AS REGUSER FROM hmbbs WHERE logdate='2013_05_30' AND 
              統計每日的獨立ip,代碼以下
              CREATE TABLE hmbbs_ip_2013_05_30 AS SELECT COUNT(DISTINCT ip) AS IP FROM hmbbs WHERE logdate='2013_05_30';
              統計每日的跳出用戶,代碼以下
              CREATE TABLE hmbbs_jumper_2013_05_30 AS SELECT COUNT(1) AS jumper FROM (SELECT COUNT(ip) AS times FROM hmbbs WHERE
              把天天統計的數據放入一張表
              CREATE TABLE hmbbs_2013_05_30 AS SELECT '2013_05_30', a.pv, b.reguser, c.ip, d.jumper FROM hmbbs_pv_2013_05_30                  hmbbs_reguser_2013_05_30 b ON 1=1 JOIN hmbbs_ip_2013_05_30 c ON 1=1 JOIN hmbbs_jumper_2013_05_30 d ON 1=1 ;

  3.4 使用Sqoop將統計結果導出到MySql中

    sqoop export --connect jdbc:mysql://hadoop0:3306/hmbbs --username root --password admin --table hmbbs_logs_stat --fields-  terminated-by '\001' --export-dir '/user/hive/warehouse/hmbbs_2013_05_30'

  3.5 完善執行的shell腳本

    3.5.1 初始化數據的腳本

    3.5.2 每日執行的腳本

4 表結構

  4.1 HBase表結構

    

明細表

行鍵

ip:date:random

明細列族

cf:all

 

  4.2 MySql表結構

    

ip、版塊訪問表

日期

acc_date

ip

ip

版塊

forum

瀏覽量

pv

 

    

彙總表

日期

acc_date

瀏覽量

pv

新用戶

newer

獨立ip

iip

跳出數

jumper

相關文章
相關標籤/搜索