大資料技術學習筆記之Hadoop框架基礎3-網站日誌分析及MapReduce過程詳解
阿新 • • 發佈:2018-12-07
一、回顧
-》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反饋執行結果
-》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反饋執行結果