1. 程式人生 > 其它 >大資料入門-Hadoop基礎

大資料入門-Hadoop基礎

大資料入門-Hadoop基礎

1 大資料背景
1-1 大資料4V特性

資料量 Volume
多樣性,複雜性 Variety(結構化和非結構化資料)
基於高度分析的新價值 Value (價值密度的高低和資料總量是成反比的)
速度 Velocity

1-2 大資料帶來的技術變革
技術驅動:資料量大
儲存:檔案儲存 ===> 分散式儲存
計算:單機 ===> 分散式計算
網路:百兆 ===> 萬兆
DB: Mysql(RDBMS) ===> NoSql(HBase/Redis...)
商業驅動:從資料中分析出商業價值

1-3 大資料現在的模式
1) 手握大資料,沒有大資料思維(電信行業,政府機關,金融機構)
2) 沒有大資料,有大資料思維 (IT諮詢服務行業)
3) 既有大資料,又有大資料思維 (Google,阿里,亞馬遜)

單機:CPU,Memory,Disk
分散式平行計算/處理
資料採集:Flume,Sqoop
資料儲存:Hadoop
資料處理,分析,挖掘:Hadoop,Spark,Flink...
資料視覺化:ECharts

1-5 大資料在技術架構上帶來的挑戰
1)對現有的資料庫管理技術的挑戰
2)經典資料庫技術並沒有考慮資料的多類別,比如影象,聲音,視訊等資料
3)實時性所帶來的技術性的挑戰
4)網路架構,資料中心,運維的挑戰
5)資料隱私
6)資料來源的複雜多樣

1-6 如何對大資料進行儲存和分析
瓶頸:儲存容量,讀寫速度,計算效率

1-7 大資料的典型應用
1)count/sum/avg ---> group by/join ---> 視窗分析函式 ---> 異常/欺詐檢測 ---> 人工智慧
2)報表 ---> 使用者細分(標籤,畫像) ---> 指標監控 ---> 指標預警

2 初識Hadoop

2-1 Hadoop概述

Doug Cutting ---> Hadoop之父
reliable,scalable,distributed 可靠,可擴充套件,分散式

Hadoop是一個分散式的系統基礎架構,提供分散式的儲存(一個檔案被拆分成很多塊,並且以副本的方式儲存在各個節點中)和計算,使用者可以在不瞭解分散式底層細節的情況下進行使用。

分散式檔案系統:HDFS(Hadoop Distributed File System)
實現將檔案分散式儲存在很多的伺服器上
分散式計算框架:MapReduce實現在很多機器上進行分散式平行計算
分散式資源排程框架:YARN 實現叢集資源管理以及作業的統一排程


2-2 HDFS 分散式儲存框架(Hadoop Distributed File System )
源自於GFS
特點:擴充套件性,容錯性,海量資料儲存
工作機制:將檔案切分成指定大小的資料塊,並以多副本的方式儲存在多臺機器上

檔案:test.log 200M
block(塊):預設的塊大小為 128M,則該檔案被分為 1*128+1*72M 兩個塊
副本:HDFS預設有3副本
資料的切分,多副本,容錯等操作,對於使用者來說是透明的

2-3 MapReduce 分散式計算框架
源自於谷歌的MapReduce 04.12
特點:擴充套件性,容錯性,海量資料離線處理

2-4 YARN 資源排程系統

Yet Another Resouce Neogotiator
負責整個叢集資源的管理和排程
特點:擴充套件性,容錯性,多框架資源排程

2-5 Hadoop之高可靠性(HA)
1)資料儲存:資料塊多副本儲存
2)資料計算:重新排程作業計算

2-6 Hadoop之高擴充套件性
1)儲存計算資源不夠時,可以橫向的線性擴充套件機器
2)一個叢集中可以包含數以千計萬計的節點

2-7 其他優勢
1)儲存在廉價機器上,降低成本
2)成熟的生態圈

2-8 狹義的Hadoop 和廣義的Hadoop

狹義:HDFS + MR +YARN
廣義:Hadoop生態系統,小而精的多個小系統

2-9 Hadoop生態系統特點
1)開源,生態活躍
2)包括了大資料處理的方方面面
3)成熟的生態圈

2-10 Hadoop常用的發行版以及選型
1)Apache:純開源,不同版本,不同框架之間整合不好(jar衝突)
2)CDH: cm(Cloudera manager)通過頁面一鍵安裝各種框架,升級,cm不開源,與Apache版本有衝突
3)Hortonworks: 原裝Hadoop,純開源,支援TEZ,企業級安全不開源
4)MapR:不建議

3 HDFS

3-1 HDFS概述
The Hadoop Distributed File System
1)分散式
2)commodity hardware 廉價機器,通用的
3)fault-tolerant 高容錯
4)high throughout 高吞吐量
5) large data sets 大資料集

3-2 HDFS前提和設計目標
1)Hardware Failure 硬體錯誤
每個機器只儲存檔案的部分資料,按照塊儲存
2)Streaming Data Access 流式資料訪問
資料訪問時的高吞吐量,但不考慮延遲性
3)Large Data Sets 大規模資料集
不怕資料大,就怕資料小
4)Moving Computation is Cheaper than Moving Data.
移動計算比移動資料更划算

3-3 HDFS架構 ******
1) NameNode 和 DataNode
2) master/slave的架構
3)NN : the file system namespace 對檔案架構的管理
對客戶端訪問資料的管理
4)DN: data storage 儲存資料
5)a file is split into one or more blocks.
6) blocks are stored in a set of dataNodes.
7) NN:CRUD 增刪改查
8)determins the mapping of blocks to datanodes
決定塊存放在具體的哪個DN上
9)通常情況下一個機器部署一個節點

3-4 使用HDFS API的方式來操作HDFS檔案系統
注意:1)若以命令列方式建立檔案到HDFS,則副本數以設定的為主
2)若以程式碼的方式,則要設定 configuration的副本值,,預設為3

3-5 副本的擺放策略
1)本rack的一個節點上 1)本rack的一個節點上
2)另外一個rack的節點上 2)本rack的另外一個節點上
3)與2相同的rack的另外一個節點上 3)不同rack的一個節點上

3-6 HDFS元資料管理
元資料:HDFS的目錄結構以及每個檔案的Block資訊(id,副本數,位置)
存放在什麼地方:dfs/name/...

Q1: 元資料都存放在記憶體中,若節點掛了,怎麼辦?
An:定期會將記憶體中的元資料資訊序列化到硬碟上。
若在週期內,則將時間段內的所有對HDFS相關的操作指令寫在editlogs中,再將兩者copy到SecondNameNode中。
此時SNN將fsimage和editlogs同時載入到記憶體中,並生成一個新的fsimage,此時,若節點掛掉,只需要重新載入新的fsimage,即可恢復元資料結構。。。。。這種機制稱為checkpoint

3-7 safemode
當剛剛啟動NN時,大概30s中時間,會自動退出safemode,當處於safemode時,HDFS是不能進行寫操作的

3-8 HDFS命令列操作
hadoop fs -ls /
hadoop fs -put test.txt /
hadoop fs -get /test.txt
hadoop fs -cat /test.txt
hadoop fs -mkdir /hdfs-test
hadoop fs -mv /test.txt /hdfs-test
hadoop fs -rm /test.txt
hadoop fs -rmdir /hdfs-test
hadoop fs -rm -r /test.txt

4 分散式處理框架 MapReduce

海量資料離線處理,易開發,易執行
將作業拆分成map作業和reduce作業

MapReduce程式設計模式之執行步驟
1)準備map處理的輸入資料
2)Mapper處理
3)Shuffle
4)Reducer處理
5) 輸出結果

map端的聚合操作就叫做combiner,聚合的邏輯和reduce是一樣的
優點:能減少IO和網路開銷,提升作業的執行效能
缺點:求平均值時會出錯

即combiner要根據情況來使用

Partitioner決定Maptask輸出的資料交由哪個reducerTask來處理
預設實現:分發的key的hash值與reduceTask個數取模
numReduceTasks:你的作業所指定的reducer的個數,決定了reduce作業輸 出文件的個數
HashPartitioner是MapReduce預設的分割槽規則

5 資源排程框架YARN
5-1 YARN產生的背景
1) MR 1.x ===> MR 2.x
1.x中,master/slave: JobTracker/TaskTracker
JobTracker:單點,壓力大
僅僅只能夠支援MR作業
2)資源利用率和運維成本
所有的計算框架執行在一個叢集中,共享一個叢集的資源,按需分配

5-2 YARN概述
Yet Another Resource Negotiator
通用的資源管理系統
為上層應用提供統一的資源管理和排程

5-3 YARN的架構 *****

client,RM,NM,AM

client:向RM提交任務,殺死任務
AM:每個應用程式對應一個AM,AM會向RM申請資源,用於在NM上啟動對應的Task ,資料切分
NM:幹活的,向RM傳送心跳資訊,報告任務的執行情況,接收RM的請求來啟動任 務,處理來自AM的命令
RM:叢集中同一時刻對外提供服務的只有一個,負責資源相關。
處理來自客戶端的請求:提交,殺死。
啟動/監控AM
監控NM
Container:程序,任務的執行抽象,memory,cpu...
task是執行在container裡,可以執行am,也可以執行map/reduce Task

6 使用者行為日誌
每一次訪問的行為(訪問,搜尋)產生的日誌
歷史行為資料 <=== 歷史訂單資料 ==> 推薦 ==> 訂單的轉化量,轉化率

PV(訪問量) UV(獨立訪客數)
存在的問題:
每個MR作業都去全量讀取待處理的原始日誌,如果資料量很大,是不是會瘋了
解決辦法:ETL(資料清洗)
全量資料不方便進行計算的,最好是進行一步處理後在進行相應的統計分析
去除一些不需要的欄位,將需要的欄位重新拼接在一起
壓縮(叢集cpu負載不高時)
轉移ETL後的資料至冷叢集(一段時間不動的資料)中,其中熱叢集(當前要處理的一段時間的資料)
再將資料轉移到物件儲存上,比如S3
轉移資料或者改變資料儲存格式為列式儲存(.orc格式...)

7 Hive 資料倉庫

7-1 hive產生的背景
MapReduce程式設計不方便(程式設計門檻比較高)
HDFS上的檔案並沒有schema(表明,欄位名,欄位型別)的概念,則傳統 RDBMS人員的並不能夠直接操作檔案

7-2 hive是什麼
1)由facebook開源,用於解決海量結構化日誌的資料統計問題
2)構建在Hadoop之上的資料倉庫
3)Hive提供的SQL查詢語言:HQL
4)底層支援多種不同的執行引擎 MR/TEZ/Spark(hive 2.0)
5)hive只是一個客戶端而已,並不涉及到叢集的概念

7-3 hive概述之為什麼要使用hive

1)簡單,容易上手
2)為超大資料集設計的離線計算/擴充套件框架
3)*****統一的元資料管理:
hive的資料是存放在HDFS上
元資料資訊:(記錄資料的資料)是存放在Mysql中

7-4 Hive的體系架構
client :shell,thrift/jdbc (server/client),WebUI(HUE/ Zeepelin)
metastore:元資料資訊
Driver
MapReduce
HDFS,Mysql

7-5 Derby只能進行單客戶端的操作,就是所謂的單session,所以使用mysql 來儲存元資料資訊

7-6 Hive中的DDL
Hive Data Definition Language
即:create ,delete.alter...

小技巧:1)desc database extended + 庫名
檢視資料庫詳細資訊
2)set hive.cli.print.current.db=true;
會出現目前操作的資料庫 hive(test_db)>
3) !clear; 清空控制檯

7-7 Hive中的DML
Hive Data Manipulation Language
即:load,insert...

local:本地 若不帶local,則代表從HDFS中load資料

7-8 聚合:max/min/count/avg/sum
7-9 分組:group by

規則:出現在select中的欄位,如果沒有出現在聚合函式裡,那一定要出現在group by裡
對於分組函式的過濾,要使用hiving,不能使用where

7-10 join 多表聯合

7-11 外部表的使用
Managed_table 內部表
刪除表時:HDFS上的資料被刪除了,元資料資訊也被刪除了

External_table 外部表
刪除表時:HDFS上的資料不會被刪除,元資料資訊被刪除了
當重新建該表時,資料會被自動載入進表中

7-12 hive處理流程

1)對原始資料進行ETL
2)把ETL輸出的資料載入到分割槽表裡
3)各個維度統計結果的資料輸出到各自維度的表裡
4)將資料匯出

如果一個框架不能落地到SQL層面,這個框架就不是一個非常適合的框架