1.1 什么是Hadoop
分布式計算平臺
優點:
高可靠性
高擴展性
高效性 在各節點之間動態地移動數據,保證各個節點的動態平衡
高容錯性 數據多副本;重新啟動失敗任務
?
Hadoop應用:
Yahoo 廣告系統Web搜索研究
Facebook 數據分析 機器學習
百度 搜索日志分析 網頁數據挖掘
淘寶 存儲并處理電子商務交易的相關數據
中國移動研究院對數據進行分析并對外提供服務
1.2 Hadoop項目及其結構:
Pig ???Chukwa ???Hive ???Hbase |
MapReduce ???HDFS ???ZooKeeper |
Common ???Avro |
?
Common:
為Hadoop其他子項目提供支持的常用工具
主要包括FileSystem、RPC和串行化庫
Avro:
是用于數據序列化的系統
提供了豐富的數據結構類型、快速可壓縮的二進制數據格式、存儲持久性數據的文件集、RPC、簡單的動態語言集成功能
依賴于模式(scheme),數據的讀寫是在模式下完成的,這樣可以減少寫入數據的開銷,提高序列化的速度并縮減其大小
在RPC中,Avro系統的客戶端和服務器端通過握手協議進行模式的交換
MapReduce:
一種編程模型,用于大數據集(1TB)的并行運算
HDFS:
分布式文件系統,具有高容錯性(fault-tolerant)
高吞吐率(high-throughput)
設計目標:
檢測和快速恢復硬件故障
流式數據訪問 ? 重點在于批量處理而不是用戶交互式處理,數據吞吐量而不是數據訪問的反應速度
簡化一致模型:一次寫入,多次讀取
通信協議
Client和NameNode--Client Protocol ???
NameNode和DataNode--DataNode Protocol
Chukwa:
開源的數據收集系統,監控和分析大型分布式系統的數據
在HDFS和MapReduce框架之上搭建
顯示、監視和分析數據結果,以便更好的利用所收集的結果
Hive:
建立在Hadoop之上的數據倉庫
MapReduce編程模型中也可通過Hive QL查詢數據
Hbase:
分布式的、面向列的開源數據庫,該技術來源于Google——Bigtable
適合非結構化數據存儲的數據庫
基于列模式,一個數據行擁有一個可選擇的鍵和任意數量的列
Pig:
對大型數據集進行分析、評估的平臺
突出優勢:它的結構能經受住高并行化的檢驗
底層由一個編譯器組成,運行時會產生一些MapReduce程序序列
ZooKeeper:
為分布式應用設計的開源協調服務
提供同步、配置管理、分組、命名服務,減少分布式應用程序所承擔的協調任務
目錄樹結構
J ava編寫,支持Java C
?
Sqoop:
為高效傳輸批量數據而設計的一種工具,其用于Apache Hadoop和結構化數據庫如關系型數據庫之間的數據傳輸
Flume:
一種分布式的、可靠的、用于高效搜集、匯總、移動大量日志數據的服務。
Mahout:
一種基于Hadoop的機器學習和數據挖掘的分布式計算框架算法集,實現了多種MapReduce模式的數據挖掘算法。
Spark:
一個開源的數據分析集群計算框架,建立于HDFS之上,用于構建大規模、低延時的數據分析應用,采用Scala語言開發
Storm:
分布式的、容錯的實時計算系統,屬于流處理平臺,多用于實時計算并更新數據庫
也可被用于連續計算(continuous computation),對數據流做連續查詢,在計算時將結果以流的形式輸出給用戶
Shark:
即Hive on Spark,為Spark打造的數據倉庫系統,兼容HQL
Phoenix:
構建在HBase之上的SQL中間層,Java編寫
Phoenix查詢引擎會將SQL查詢轉換為一個或多個HBase scan,并編排執行以生成標準的JDBC結果集。
直接使用HBase API、協同處理器與自定義過濾器
對簡單查詢來說是毫秒
對百萬級別的行來說是秒
Tez:
基于YARN之上的DAG(Directed Acyclic Graph)就算框架
把MapReduce拆分成若干子過程,同時可以把多個MapReduce任務組合成一個較大的DAG任務,減少了MapReduce中間過程文件的存儲
合理組合其子過程,減少任務的運行時間
Ambari:
一個供應、管理和監視Hadoop集群的開源框架
1.3 Hadoop體系結構:
兩大核心:HDFS ?MapReduce
通過HDFS實現分布式存儲的底層支持
通過MapReduce實現分布式并行任務處理的程序支持
?
HDFS:
主從結構
NameNode:管理文件系統的命名空間和客戶端對文件的訪問操作
DataNode:管理存儲的數據
?
MapReduce:
JobTracker:調度一個作業的所有任務
TaskTracker:負責主節點指派的任務
JobTracker接收到提交作業和其配置信息后,將配置信息等分發給從節點,同時調度任務并監控TaskTracker的執行。
?
1.4 Hadoop與分布式開發
Hadoop上并行應用程序的開發是基于MapReduce編程模型的
MapReduce庫的用戶用兩個函數來表達這個計算:Map和Reduce
Map函數接收一個輸入的key/value對,然后產生一個中間key/value對的集合;
把具有相同key值得value集合在一起,然后傳遞給Reduce函數。
Reduce函數接收key和相關的value集合
每次調用Reduce函數只產生0或1個輸出的value值。
MapReduce計算模型非常適合在大量計算機組成的大規模集群上并行運行。
原理:
數據分布存儲
分布式并行計算:DataNode既是數據存儲結點,也是計算結點
本地計算:移動計算比移動數據更經濟
任務粒度:Block ?M個Map任務分布于N臺計算機上并行運行,Reduce任務數由用戶指定
數據合并:Combine,在分割之前,將中間結果有相同key的value合并
數據分割:Partition,把Map任務的中間結果按key劃分為R份——reduce任務數
Reduce:Map任務的中間結果在執行完Combine、Partition之后,以文件形式存儲于本地磁盤,中間結果的位置將通知JobTracker,JobTracker再通知Reduce任務到哪取中間結果。
任務管道:有R個Reduce任務就有R個最終結果,很多情況下它們無需合并,而是作為另一個計算任務的輸入,這也就形成了任務管道。
?
1.5 Hadoop計算模型——MapReduce
將運行于大規模集群上的復雜的并行計算過程高度地抽象為兩個函數:Map和Reduce。
一個Job通常把輸入的數據集切分為若干獨立的數據塊,由Map任務并行處理。
框架對Map的輸出進行排序,然后把結果輸入給Reduce任務。
計算結點和存儲結點在一起。
?
1.6 Hadoop數據管理
分布式文件系統 HDFS
分布式數據庫 HBase
數據倉庫工具 Hive
?
HDFS的數據管理
整個集群的單一命名空間
數據一致性:一次寫入,多次讀取
文件分割成多個文件塊,每個文件塊被分配存儲到數據結點上,根據配置由復制文件塊保證數據安全
?
三個角色:NameNode,DataNode,Client
NameNode元數據信息:路徑,副本數,分塊,塊所在的結點
?
文件寫入:
1.Client向NameNode發起文件寫入請求;
2.NameNode根據文件大小和文件塊配置情況,返回給Client所管理的DataNode的信息;
3.Client將文件劃分為多個Block,根據DataNode的地址信息按順序將其寫到每一個DataNode中。
?
文件讀取:
1.Client向NameNode發起文件讀取的請求;
2.NameNode返回文件存儲的DataNode信息;
3.Client從DataNode讀取文件。
?
文件塊復制:
1.NameNode發現部分文件的Block不符合最小復制數這一要求或部分DataNode失效;
2.通知DataNode相互復制Block;
3.DataNode開始直接相互復制。
?
?
文件塊的位置:三個副本,本機架2個,另一機架1個
心跳檢測:用心跳檢測DataNode的健康狀況
數據復制:場景為DataNode宕機、需平衡DataNode的存儲利用率和平衡DataNode數據交互壓力等情況,可使用HDFS的balancer命令配置threshold來平衡每一個DataNode的磁盤利用率。
數據校驗:CRC32 ???寫入校驗信息,讀入時,先校驗后讀入
管道性寫入:寫入文件到DataNode上時,首先讀取一個Block,然后將其寫到一個DataNode上,接著由第一個DataNode將其傳遞到備份的DataNode上,直到所有備份完成后,客戶端才開始寫下一個block。
安全模式:啟動時進入/命令進入。數據不允許修改和刪除。主要是為了在系統啟動時檢查各個DataNode上數據塊的有效性,同時根據策略進行必要的復制或刪除部分數據塊。
?
Hbase的數據管理
類似于BigTable的分布式數據庫
一個稀疏的、長期存儲的、多維度的排序映射表,這張表的索引是行關鍵字、列關鍵字和時間戳
表中的數據都是字符串
每一行都有一個可排序的主鍵和任意多的列
由于列是稀疏存儲的,所以同一張表中的每一行數據都可以有截然不同的列
列名字的格式是<family><label>
每一張表有一個family集合,這個集合是固定不變的,相當于表結構
label值相對于每一行來說都是可以改變的
Hbase把同一family中的數據存儲在同一目錄下
Hbase的寫操作是鎖行的,每一行是一個原子元素,可以加鎖
時間戳,每次生成一個新的版本都會跟一個時間戳,可以設置保留幾個版本
客戶端可以獲得最近版本,也可獲得全部版本
?
三大組成部分
HBaseMaster:HBase主服務器
ZooKeeper
領導選舉法(Leader Election Algorithm)
主服務器承擔初始化集群的任務。當主服務器第一次啟動時,會試圖從HDFS獲取根或根域目錄,如果獲取失敗則創建根或根域目錄,以及第一個元域目錄。
下次啟動時,主服務器可獲得集群和集群中所有域的信息。
負責域的分配、域服務器運行狀態的監視、表格管理
HRegionServer:Hbase域服務器
服務于主服務器分配的域、處理客戶端的讀寫請求、本地緩沖回寫、本地數據壓縮、分割域
每個域只能由一臺域服務器來提供服務
當其開始服務于某個域時,它會從HDFS文件系統中讀取該域的日志和所有存儲文件
同時管理操作HDFS文件的持久性存儲工作
客戶端與主服務器通信獲取域和域服務器列表信息后,就可以直接向域服務器發送域讀寫請求,來完成操作。
HBase Client:
客戶端與Hbase主機交換消息以查找根域的位置,這是二者的唯一交流
定位根域后,客戶端獲取元域信息,元域信息中包含所需用戶域的域服務器地址
客戶端再連接元域所在的域服務器,獲得用戶域所在的域服務器地址
定位用戶域服務器后發出讀寫請求
用戶域的地址將緩存在客戶端中
?
Hive的數據管理
建立在Hadoop上的數據倉庫基礎架構,提供一系列工具進行數據的提取、轉化、加載
是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制
Hive QL
1.元數據存儲
Hive將元數據存儲在RDBMS中,有三種模式可以連接到數據庫
a.Single User Mode:此模式連接到一個In-Memory的數據庫Derby,一般用于Unit Test。
b.Multi User Mode:通過網絡連接
c.Remote Server Mode:用于非Java客戶端訪問元數據庫,在服務器端啟動一個MetaStoreServer,客戶端利用Thrift協議通過MetaStoreServer來訪問元數據庫
?
2.數據存儲
無專門存儲格式,無索引
只需明確列分隔符、行分隔符
Hive中所有數據都存儲在HDFS中
4種數據模型:Table、 ?External Table、?Partition、 ?Bucket
?
3.數據交換
用戶接口:客戶端、Web界面、數據庫接口
元數據存儲:通常存儲在關系數據庫中,如MySQL、Derby等
解釋器、編譯器、優化器、執行器
Hadoop:HDFS進行存儲、MapReduce進行計算
?
元數據包括表的名字、表的列、表的分區、表分區的屬性、表的屬性(外表?)、表的數據所在目錄。
生成的查詢計劃存儲在HDFS中,隨后由MapReduce調用執行
帶*的查詢不會生成MapReduce任務
?
1.7 Hadoop集群安全策略
用戶權限管理
用戶分組管理,為更高層的HDFS訪問、服務訪問、Job提交和配置Job等操作提供認證和控制基礎。
Hadoop上的用戶和用戶組由用戶自己指定,如果未指定,Hadoop會調用Linux的whoami命令獲取當前Linux系統的用戶名和用戶組,將其保存在Job的user.name和group.name兩個屬性中。
用戶提交Job的后續認證和授權以及集群服務的訪問都將基于此用戶名和用戶組的權限及認證信息進行。
?
HDFS安全策略
用戶和HDFS服務之間的交互主要有兩種情況:
用戶機和NameNode之間的RPC交互獲取待通信的DataNode位置;
客戶機和DataNode交互傳輸數據塊
?
MapReduce安全策略
主要涉及Job提交、Task和Shuffle三個方面