1. 程式人生 > >大資料技術學習筆記之Hadoop框架基礎3-網站日誌分析及MapReduce過程詳解

大資料技術學習筆記之Hadoop框架基礎3-網站日誌分析及MapReduce過程詳解

一、回顧
    -》Hadoop啟動方式
        -》單個程序
            sbin/hadoop-daemon.sh start namenode/datanode
            sbin/yarn-daemon.sh start resourcemanager/nodemanager
        -》分別啟動hdfs與yarn
            sbin/start-dfs.sh
            sbin/start-yarn.sh
        -》統一啟動hdfs與yarn
            sbin/start-all.sh
    -》jobhistoryserver
        sbin/mr-
        配置:mapred-site.xml
        
    -》日誌聚集
        配置:yarn-site.xml
    -》ssh免金鑰登入
        -》生成自己的祕鑰
            ssh-keygen -t rsa
        -》把公鑰傳送給需要登入的機器
            ssh-copy-id hostname
    -》安全模式
        -》不允許讀寫
        -》bin/hdfs dfsadmin -safemode leave|enter|wait|status
        
    -》MapReduce
        -》開發環境的搭建
            -》JDK
                -》下載安裝
                -》修改環境變數
                    /etc/profile
                    JAVA_HOME
                    PATH
                    source /etc/profile
            -》maven
                -》下載解壓
                -》修改配置檔案
                    -》本地倉庫
                    -》遠端倉庫的映象源地址
                -》配置環境變數
                    M2_HOME
                    PATH
                    source /etc/profile
            -》eclipse
                -》Linux:./eclipse
                    -》配置Maven
                    -》修改快捷鍵
        -》MapReduce:分散式計算模型,所有的資料傳輸通過keyvalue的格式
            -》input:負責資料的讀取,預設讀hdfs上的檔案
                格式轉換:
                    key:每一行的偏移量
                    value:每一行的內容
                一行一個keyvalue
            -》map:根據分片的大小,啟動相應的map task
                一個數據塊:128M = 一個分片:splits = 1 個map task進行處理
                -》map task每處理一條keyvalue就會呼叫一次map
                -》根據相應的實際需求,生成新的keyvalue
                -》context上下文物件負責整個MapReduce的上下文資料的承接
                    context.write(key,value)
            -》shuffle:洗牌,將擁有相同key的value合併
                輸出:
                    key,{value1,value2,value3……}
                    1,……
                    2,……
                    3,……
                -》合併:分組
                -》分割槽(預設按照key的 hash值取餘的方式)、排序
            -》reduce:合併,將每條不同的 key呼叫reduce方法進行處理
            -》output:輸出,預設到hdfs,輸出keyvalue格式的結果
            
            
            -》wordcount
                hadoop hive hbase
                hadoop spark
                spark
                
                -》input:
                    輸出:
                        19,hadoop hive hbase
                        30,hadoop spark
                        35,spark
                -》map:
                    map方法進行處理
                        -》對value進行分割
                        -》取到每個單詞
                        -》封裝keyvalue進行輸出
                    輸出:
                        hadoop,1
                        hive,1
                        hbase,1
                        hadoop,1
                        spark,1
                        spark,1
                -》shuffle:分割槽、排序、分組
                    -》輸出:
                        hadoop,{1,1}
                        hbase,{1}
                        hive,{1}
                        spark,{1,1}
                -》reduce:呼叫reduce方法
                    -》reduce方法進行處理
                        -》將迭代器中的 值累加即可
                        -》封住keyvalue
                    -》輸出:
                        hadoop,2
                        hbase,1
                        hive,1
                        spark,2
                -》output:寫入hdfs
                    key \t  value
                    
                    
二、MapReduce開發模板
    -》Driver類:驅動類
        -》繼承configured類,實現Tools介面
        -》main
        -》run
    -》Mapper類:map task需要呼叫的物件,只要負責拆分任務
        -》map
    -》Reduce類:reduce task需要呼叫的物件,負責合併
        -》reduce
                
                
三、Hadoop中的資料型別
    -》java:String、Int、double、long、null
    -》hadoop:Text、Intwritable、doublewritable、longwritable、nullwritable
    
    -》自定義資料型別:實現writablecomparable介面
        -》定義成員變數
        -》set / get
        -》構造方法
        -》toString
        -》hash
        -》equals
        -》write:序列化方法
        -》readfiled:反序列化
                
                
                
四、網站日誌分析
請求網頁連結:https://item.taobao.com/item.htm?
請求引數:key=value &
spm=a217h.9580640.831217.2.4ff525aaImnVde&
id=562109381525&
scm=1007.12144.81309.70043_0&
pvid=4dd29b32-efbd-4342-be4c-f2d501dbd2ba&
utparam=%7B%22x_object_type%22%3A%22item%22%2C%22x_object_id%22%3A562109381525%7D
                
        -》常見的業務分析
        PV:網頁瀏覽量:url
            每訪問一個網頁就是一個pv,相同網頁累計
        UV:獨立訪客數:uuid,guid
            總共有多少個人訪問了,同一個人的訪問計一次
        VV:訪客的訪問次數
            每個時段訪問的次數
        IP:獨立IP數
            某個時段內ip的總個數
        -》基於多維度的組合分析
            -》時間維度:統計每天的pv數、每小時的pv數
            -》地域維度:上海的pv數,北京pv數
            -》組合維度:每天上海的pv數
            
        -》需求:每個城市的pv數 = 每個單詞出現的次數
            結果:
                key:城市    
                value:pv數
                
            mapreduce:
                -》input:讀hdfs檔案,
                    預設key是偏移量,value是行的內容
                -》map:
                    map:非法值進行過濾
                    輸出:
                        城市id   1
                -》shuffle:
                    城市id   1
                -》reduce:
                    輸入:
                        城市id     {1,1,1……}
                    reduce:將value中的集合進行求和
                    輸出:
                        城市id        pv數
                -》output:
                    
            -》每個城市的uv
                城市id   uv數
                
                -》map    
                
                    key : 城市id
                    value:guid
                -》shuffle
                    城市id ,{guid1,guid1,guid2,guid3……}
                    上海,{user1,user1,user1,user2,user3……}
                -》reduce:
                    對每個城市的value中的集合去重,求長度
                    
                    
                    
三、MapReduce過程總結
    -》程式設計:Driver、Map、Reduce
    -》過程
        input、map、shuffle、reduce、output
    -》難點:
        合理的設計map與reduce的功能與輸入輸出的型別
        map:負責任務的拆分,資料的過濾
            -》非法值過濾
            -》欄位的過濾
            -》欄位的轉換
                dd/MMM/YYYY HH:mm:ss -> 2015-08-28 18:10:00
        shuffle:分割槽、排序、分組
            分割槽:決定我當前這條keyvalue最終由哪個reduce進行處理
            排序:預設會按照字典順序進行排序
            分組:將擁有相同key的value進行合併
        reduce:合併
            -》求和
            
        -》每天、每小時、每個地區、每種瀏覽器
            -》每=分組
            
        -》YARN執行程式的過程
            1、客戶端向resourcemanager提交任務請求
                bin/yarn jar ……
                log:connect resourcemanager: hostname:8032
            2、ResourceManager會隨機選擇一臺NodeManager(app manager)啟動application Master
            3、APP Master向ResourceManager 請求申請資源
            4、APP Manager接收請求,讓resource schedule分配資源Container
            5、APP Master拿到資源資訊及相應的指令、在其他所有機器上分配資源資訊
            6、NodeManager接收資源資訊及指令,啟動Map task及reduce task
            7、每個NodeManager執行完成任務向APP Master彙報執行結果
            8、APP Master會向APP Manager反饋執行結果