目錄
一 緒論
1 大數據5v特點 --1.6
2 Google三駕馬車 GFS MapReduce BigTable --1.18
3 Hadoop的特點 --1.23
4 Hadoop生態系統 (教材p6)
6 NoSQL有哪些
二 HDFS架構
1 三大基本組件 --2.1.2
2 HDFS特性和局限性(教材p38) --2.1.4-5
3 HDFS ?block
4 HDFS守護進程
5?主從架構 --2.1.10
6 元數據、Block、DataNode、NameNode、心跳
????????元數據管理機制(教材p35) --2.1.11
????????元數據管理過程:
????????心跳機制(重要) --2.1.21
7??HA模式 HDFS高可用性(教材p36) --2.1.18
8 DataNode容錯機制
9?HDFS數據讀寫機制(重要)(教材p40) --2.1.22-25
10?Hadoop安裝類型 --2.2.2
11?常用的虛擬機
12?安裝大致的流程
13 常見的配置文件
15?Hadoop常見配置文件
16?HDFS守護進程、YARN守護進程
18?異常分析
19?HDFS JavaAPI用途
20 HDFS和YARN各守護進程的啟動順序
13 HDFS命令(重要)
三 YARN
1 YARN是什么
2 YARN主從架構(守護進程)
3 主要的名詞Resourcemanager,NodeManager,Container,Job,ApplicationMaster
4 Yarn調度器(三種)
5 一級調度RM,二級調度AM??基于hadoop 2.0的架構(MRv2)
6 YARN的工作流程(教材75-76) --3.13
5. 主從架構和雙層調度范式,誰是一級調度,誰是二級調度(重要)主要在PPT上
一 緒論
1 大數據5v特點 --1.6
Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低密度價值)、Veracity(真實性)
2 Google三駕馬車 GFS MapReduce BigTable --1.18
- GFS(分布式文件系統)
- MapReduce(超大集群的簡單數據處理)
- BigTable(結構化數據的分布式存儲系統)
3 Hadoop的特點 --1.23
- 擴容能力:可靠的存儲和處理PB級數據
- 低成本:普通計算機組成集群來處理數據,可達上千個節點
- 高效率:節點上并行處理數據使得速度快
- 可靠性:自動維護數據的多份復制,任務失敗后自動重新部署計算任務
4 Hadoop生態系統 (教材p6)
HDFS:分布式存儲,數據存儲功能
MapReduce:分布式計算框架
HBase:分布式數據庫,基于HDFS的NOSQL數據庫
Zookeeper:,分布式協調服務框架,hadoop組件管理端
Pig:數據流處理,對MapReduce的抽象
Hive:數據倉庫,將結構化的數據文件映射為數據表,將SQL翻譯為MapReduce語句進行查詢
5、Hadoop的主要版本
???p7 1.3.4 ??最新的3.*,出現了YARN的版本2.0
6 NoSQL有哪些
- 文檔數據庫(Document Databases):MongoDB、Couchbase和CouchDB。
- 列族數據庫(Column Family Databases):HBase和Cassandra
- 鍵值對數據庫(Key-Value Databases):Redis和Memcached
- 圖數據庫(Graph Databases):Neo4j和OrientDB
- 搜索引擎(Search Engines):Elasticsearch和Solr
7、Hadoop/HBase/Zookeeper屬于什么開源項目?
???Apache基金會
8、Hadoop的開發語言(Hadoop是用什么語言編寫的)
???Java
二 HDFS架構
1 三大基本組件 --2.1.2
Hadoop核心組件(教材p5)
HDFS:分布式文件系統,數據存儲
YARN:統一資源管理和調度系統,支持多種框架
MapReduce:分布式計算框架,運行于YARN上
2 HDFS特性和局限性(教材p38) --2.1.4-5
特性:
能保存PB級數據量,數據散布在大量節點上,支持更大文件
可靠性、高容錯性,多節點數據備份
與MapReduce集成,允許數據在本地計算,減少計算時數據交互
局限性:
不適合低延遲數據訪問
不適合大量小文件存儲
不支持多用戶并發寫入及任意修改文件,一次寫入多次讀取
不支持緩存,每次從硬盤重新讀取
3 HDFS ?block
????????文件寫入hdfs時會被切分為若干個數據塊,并在集群中的多個節點上進行分布式存儲。數據塊的大小是固定的,默認為128MB。數據塊是hdfs的最小存儲單元。默認情況下,每個數據塊有三個副本。
4 HDFS守護進程
- NameNode:它負責管理元數據,協調數據節點之間的數據塊復制和數據塊的位置管理。
- DataNode:它們分布在不同的節點上。DataNode負責實際存儲數據塊,并在NameNode的指導下執行數據塊的復制、刪除和傳輸操作。DataNode還負責向NameNode報告數據塊的健康狀況和存儲容量等信息。
- Secondary NameNode:輔助NameNode完成某些耗時功能,解放NameNode性能,無法替代NameNode。
5?主從架構 --2.1.10
基本的名詞:NameNode SecondaryNameNode DataNode各個節點的功能
???基本的名詞:數據劃分為Block(大小、備份數量……)、元數據、client……
NameNode:主節點(Master),管理元數據
SecondaryNameNode:輔助NameNode完成某些功能,解放Name Node性能,無法替代NameNode
DataNode:從節點(Slave),存儲文件的Block。
6 元數據、Block、DataNode、NameNode、心跳
????????元數據管理機制(教材p35) --2.1.11
元數據:存儲文件路徑、文件副本數量、文件塊所處的服務器位置等。
元數據保存在NameNode中
內存元數據:meta data,元數據查詢
硬盤元數據鏡像文件:fsimage,持久化存儲元數據
數據操作日志:edits,將更改記錄進去,可以此運算出元數據
????????元數據管理過程:
系統啟動,讀取fsimage和edis至內存,形成內存元數據meta data, client向NameNode發起數據增刪查請求,NameNode在接受請求后在內存元數據中執行操作,并返回結果給client,如果是增刪操作,則同時記錄數據操作日志edits。Secondary NameNode在合適的時間將操作日志合并到fsimage中
????????心跳機制(重要) --2.1.21
????????NameNode和DataNode的故障恢復(教材39)
????????NameNode故障恢復:
如果進行了高可用性配置,發生NameNode故障時,由zookeeper通過選舉機制選取一個備用名稱節點切換為激活狀態,保證hadoop正常運行。
如果沒有進行高可用性配置,系統把NameNode的核心文件同步復制到SecondaryNameNode(備份名稱節點)中,當發生NameNode故障時,通過SecondaryNameNode中的FsImage和EditLog文件恢復NameNode。
????????DataNode故障恢復:
每個DataNode定期(默認3秒)向NameNode發送心跳信息,報告自己的狀態。如果DataNode發生故障沒有定時向NameNode發送心跳,就會被NameNode標記為“宕機”,該節點上所有數據不可讀,NameNode不會向其發送任何I\O請求。
????????NameNode定期檢查數據塊的副本數量,小于冗余因子(即設定的副本數)時啟動冗余復制,在其他正常數據節點生成副本。
????????心跳過程:數據節點主動發送請求及要報告的信息,名稱節點被動回復需要傳達的信息或指令。NameNode沒有收到周期性send?heartbeat,則認為該數據節點失效,將失效節點中的bolock重新備份到其他數據節點。
7??HA模式 HDFS高可用性(教材p36) --2.1.18
hadoop2.x中引用HDFS名稱節點高可用框架。
配置兩個相同的NameNode,一個為active mode活躍模式,另一個為standby mode待機模式,兩個node數據保持一致,活動節點失效,則待機節點切換為活動節點,保證hadoop正常運行。
HA模式(高可用名節點)(High?Availability NameNode),不需要再配置SecondaryNameNode,CheckPoint通過Standby NameNode實現。
JournalNode是輕量化節點,用于兩個NameNode之間通信,需要配置3個以上節點。
8 DataNode容錯機制
DataNode的故障管理由NameNode負責
DataNode故障將導致:
????????節點失去響應
????????本節點的block數據失效
如果NameNode不及時發現有故障的DataNode
????????1、會將client的請求頻繁分配到故障節點中,降低系統效率,或導致client數據讀取或操作失敗
????????2、未能及時將DataNode中丟失的block重新備份,這時如果陸續有其他DataNode失效,將可能導致一部分block永久丟失
關鍵問題:NameNode如何發現故障DataNode
心跳機制
9?HDFS數據讀寫機制(重要)(教材p40) --2.1.22-25
寫入機制:
用戶客戶端請求Hadoop客戶端,執行文件上傳,上傳的文件寫入hadoop客戶端的臨時目錄,當文件寫入數據量超過block(Hadoop1.x缺省64MB,2.x缺省128MB)大小時,請求NameNode申請數據塊。NameNode返回數據塊ID及存儲數據塊的DataNode地址列表,hadoop客戶端根據地址列表向DataNode寫入數據塊。客戶端寫入一個數據塊后,在DataNode之間異步進行數據塊復制,最后一個DataNode上數據塊寫入完成后,發送一個確認信息給前一個DataNode,第一個DataNode返回確認信息給客戶端,數據寫入完畢。客戶端向NameNode發送最終確認信息。
刪除機制與此相同,刪除請求到達后,文件不會立即被執行刪除,而是移動到/trash目錄(回收站),一段時間后再執行刪除。
讀取機制:
用戶客戶端請求Hadoop客戶端,請求返回指定文件,hadoop客戶端向NameNode發送讀文件請求。NameNode查詢meta data并返回文件數據對應的數據塊ID及存儲數據塊的DataNode地址列表,該列表按照DataNode與客戶端的距離進行排序。客戶端在距離最近的數據節點上讀取數據,如果讀取失敗,則從另一個副本所在數據節點讀取數據。讀取到所有block后合并成文件。
NameNode需要通過心跳機制收集DataNode生存狀態,不會將失效的DataNode位置返回給客戶端。
????????客戶端:Client。代表用戶通過與NameNode和DataNode交互來訪問整個HDFS,整個HDFS運行在內網,與外界隔離,只有Client可以接受外界命令,確保系統安全。
10?Hadoop安裝類型 --2.2.2
單機模式:Stand-Alone Mode
運行在一個單獨的JVM中,便于開發調試
偽分布式集群模式:Pseudo-Distributed Cluster
各節點在不同的Java進程中,用于模擬集群環境
多節點集群安裝模式:Multi-Node Cluster
各節點安裝在不同的系統中,可用于生產的集群環境
11?常用的虛擬機
VMware:最大的虛擬機廠商,有自己的云(虛擬化)系統
Oracle Virtualbox:開源免費
Xen:開源免費
KVM:開源免費
Hyper-v:微軟windows自帶
Genymotion:Android系統虛擬機
12?安裝大致的流程
創建多個虛擬機?
配置SSH遠程登錄
(SSH免密配置原理:
????????通信加密類型:對稱加密(DES、3DES、AES等,加解密使用相同密鑰,速度塊,適合大量數據加密,密鑰可能泄露),非對稱加密(RSA,加密使用公鑰,解密使用私鑰。速度慢,適合小數據加密。應用:數據使用AES加密,AES密鑰使用RSA加密傳送或保存,區塊鏈、勒索病毒等使用此原理)
SSH默認密碼驗證:
配置RSA非對稱加密驗證,即免密訪問。
原理:在主節點生成公/私鑰對,將公鑰傳給其他節點)?
安裝配置JDK
安裝配置hadoop
關閉防火墻
啟動HDFS
13 常見的配置文件
????Java和hadoop環境變量配置在/etc/profile,
? ? 配置完后source /etc/profile,讓新的環境變量PATH生效
????/etc/hosts ?: IP地址 主機名 ?表示映射關系
????/etc/hostname??: 主機名 ??當前主機的主機名
14 常見Linux命令:
???cd、ls、mkdir、cat、jps等,vi編輯器的常用命令
???常見錯誤:command not found,file or directory no exists
???啟動/停止Hadoop的命令 start-all.sh/stop-all.sh??start-dfs.sh/start-yarn.sh
15?Hadoop常見配置文件
core-site.xml:NameNode的地址??hadoop數據的存儲目錄
????????????????????????文件系統相關配置??安全相關配置 ?Hadoop 配置目錄和日志目錄
hdfs-site.xml:nn web端訪問地址(HDFS 的主節點?NameNode)???
????????????????????????2nn web端訪問地址(Secondary NameNode)
NameNode 和 DataNode 配置
????????????????????????容錯和高可用性配置????塊大小和副本數配置
????????????????????????數據傳輸和網絡配置????HDFS 故障處理和恢復配置
yarn-site.xml:ResourceManager相關配置??NodeManager相關配置 ?容器資源配置
Workers:配置工作節點列表,資源,環境
NameNode運行在主節點(在core-site.xml中配置)
SecondaryNameNode可在主節點運行(在hdfs-site.xml中配置)
DataNode一般在從節點運行(在workers中配置)
?
16?HDFS守護進程、YARN守護進程
HDFS守護進程:
NameNode(主節點):負責管理文件系統的命名空間和元數據,存儲文件系統的元數據信息。
Secondary NameNode(輔助名稱節點):定期合并和檢查NameNode的編輯日志,幫助恢復損壞的文件系統元數據。
DataNode(從節點):存儲實際的數據塊,負責數據的讀取和寫入操作。
YARN守護進程:
ResourceManager(資源管理器):負責集群作業和資源的管理和分配,接收應用程序的資源請求,并進行資源的調度。
NodeManager(節點管理器):在每個節點上運行,負責管理節點上的資源,接收來自ResourceManager的任務,并監控任務的執行狀態。
ApplicationMaster(應用程序主管):每個運行在YARN上的應用程序都有一個ApplicationMaster,負責協調應用程序的執行,包括任務的分配和監控。
主節點守護進程:
NameNode(主節點)
ResourceManager(資源管理器)
從節點守護進程:
DataNode(從節點)
NodeManager(節點管理器)
17?HDFS命令
????-ls ?-mkdir ?-get(-copyToLocal) ?-put(-copyFromLocal)
18?異常分析
無DataNode的情況下,能否 -ls?
可以,原因:目錄結構存儲在namenode中的,不需要訪問datanode
????????There are 0 datanode(s) running and 0 node(s) are excluded in this operation.
(當前運行的datanode個數為0,不包含節點個數為0。)
能否-get/-put?
不能,原因,上傳下載文件需要訪問datanode
19?HDFS JavaAPI用途
????????fileSystem.copyFromLocalFile(本地路徑,hdfs路徑):從本地路徑復制文件到hdfs
????????fileSystem.copyToLocalFile(hdfs路徑,本地路徑):從hdfs復制文件到本地路徑
????????HDFS REST API
????????HDFS Java API是HDFS命令的抽象,支持遠程訪問HDFS
????????應用程序能夠以和讀寫本地數據系統相同的方式從HDFS讀取數據,或者將數據寫入到HDFS
????????其他語言訪問HDFS使用REST API
20 HDFS和YARN各守護進程的啟動順序
HDFS守護進程的啟動順序:
NameNode(主節點)
DataNode(從節點)
Secondary NameNode(輔助名稱節點)
YARN守護進程的啟動順序:
ResourceManager(資源管理器)
NodeManager(節點管理器)
ApplicationMaster(應用程序主管)
13 HDFS命令(重要)
start-all.sh/stop-all.sh
1 hadoop fs -ls <path>
????????列出指定目錄下的內容,支持pattern匹配。輸出格式如filename(full path)<r n>size.n代表備份數。
2 hadoop fs -lsr <path>
????????遞歸列出該路徑下所有子目錄信息
3 hadoop fs -du<path>
????????顯示目錄中所有文件大小,或者指定一個文件時,顯示此文件大小
4 hadoop fs -dus<path>
????????顯示文件大小 相當于 linux的du -sb s代表顯示只顯示總計,列出最后的和 b代表顯示文件大小時以byte為單位
5 hadoop fs -mv <src> <dst>
????????將目標文件移動到指定路徑下,當src為多個文件,dst必須為目錄
6 hadoop fs -cp <src> <dst>
????????拷貝文件到目標位置,src為多個文件時,dst必須是個目錄
7 hadoop fs -rm [skipTrash] <src>
????????刪除匹配pattern的指定文件
8 hadoop fs -rmr [skipTrash] <src>
????????遞歸刪除文件目錄及文件
9 hadoop fs -rmi [skipTrash] <src>
????????為了避免誤刪數據,加了一個確認
10 hadoop fs -put <> ... <dst>
????????從本地系統拷貝到dfs中
11 hadoop fs -copyFromLocal<localsrc>...<dst>
????????從本地系統拷貝到dfs中,與-put一樣
12 hadoop fs -moveFromLocal <localsrc>...<dst>
????????從本地系統拷貝文件到dfs中,拷貝完刪除源文件
13 hadoop fs -get [-ignoreCrc] ?[-crc] <src> <localdst>
?????????從dfs中拷貝文件到本地系統,文件匹配pattern,若是多個文件,dst必須是個目錄
14 hadoop fs -getmerge ?<src> <localdst>
????????從dfs中拷貝多個文件合并排序為一個文件到本地文件系統
15 hadoop fs -cat <src>
????????輸出文件內容(文件輸出到stdout)
hadoop fs -text <src>
????????輸出文件內容(文件輸出為文本格式)
16 hadoop fs -copyToLocal [-ignoreCre] [-crc] <src> <localdst>
????????與 -get一致
hadoop fs -moveToLocal
17 hadoop fs -mkdir <path>
????????在指定位置創建目錄
18 hadoop fs -setrep [-R] [-w] <rep> <path/file>
????????設置文件的備份級別,-R標志控制是否遞歸設置子目錄及文件
19 hadoop fs -chmod [-R] <MODE[,MODE]...|OCTALMODE>PATH
????????修改文件權限, -R遞歸修改 mode為a+r,g-w,+rwx ,octalmode為755
20 hadoop ?fs -chown [-R] [OWNER][:[GROUP]] PATH
????????遞歸修改文件所有者和組
21 hadoop fs -count[q] <path>
????????統計文件個數及占空間情況,輸出表格列的含義分別為:DIR_COUNT.FILE_COUNT.CONTENT_SIZE.FILE_NAME,如果加-q 的話,還會列出QUOTA,REMAINING_QUOTA,REMAINING_SPACE_QUOTA
三 YARN
1 YARN是什么
????????統一資源管理和調度系統。將集群資源劃分為多個容器(Containers),每個容器可以分配給一個應用程序進行計算。
2 YARN主從架構(守護進程)
????????主從節點Resourcemanager,NodeManager,也是其守護進程(教材74)
????????Master:ResourceManager,集群中各個節點的管理者。負責集群資源的管理和分配,接收應用程序的資源請求,并進行資源的調度。
????????Slave:NodeManager,集群中單個節點的代理。在每個節點上運行,負責管理節點上的資源,接收來自ResourceManager的任務,并監控任務的執行狀態。
3 主要的名詞Resourcemanager,NodeManager,Container,Job,ApplicationMaster
????????ResourceManager:接受Client請求,執行一級調度scheduler
????????NodeManager:執行作業任務job,執行二級調度ApplicationMaster
????????Container(容器):YARN的資源抽象,封裝多維度資源。由Container提供資源給對應的任務。Application和ApplicationMaster均需要計算資源,均運行在Container中,用戶提交的job以Application的方式執行。
????????ApplicationsManager:運行在ResourceManager中,管理YARN中所有的ApplicationMaster
????????ApplicationMaster:管理一個application,運行在NodeManager的Container中,每個Application由一個ApplicationMaster負責管理,接收Container的進度匯報,為Container請求資源,ApplicatioinMaster通過心跳向ResourceManager匯報Application進度和資源狀態。
????????Job(作業):用戶提交至YARN的一次計算任務,由Client提交至ResourceManager。MapReduce中每個作業對應一個Application,Spark中作業的每個工作流對應一個Application,效率更高,Apache Slider中多用戶共享一個長期Application,系統響應更快。
4 Yarn調度器(三種)
FIFO Scheduler (先進先出調度器)
Capacity Scheduler (容器調度器)
Fair Scheduler (公平調度器)
5 一級調度RM,二級調度AM??基于hadoop 2.0的架構(MRv2)
????????一級調度:ResourceManager接收作業,在指定NodeManager節點上啟動ApplicationMaster,在scheduler中執行調度算法為ApplicationMaster分配資源,管理各個AM。
????????二級調度:ApplicationMaster運行在NodeManager上,向ResourceManager請求資源,接受RM的資源分配后在NM上啟動Container,在Container中執行Application,并監控Application執行狀態。
6 YARN的工作流程(教材75-76) --3.13
????????Client向ResourceManager提交作業a(Job)
????????1 ResourceManager在調度器(scheduler)中創建一個AppAttempt用于管理作業a的調度。
????????NodeManager1向ResourceManager提交心跳,ResourceManager通過ApplicationsManager將作業a的ApplicationMaster分配到NodeManager1。
????????ResourceManager通過RPC調用NodeManager1中的startContainer方法,在NodeManager1中為作業a啟動Container0(作業的0號容器)
????????NodeManager1在Container0中為作業a啟動ApplicationMaster
????????ApplicationMaster向ApplicationsManager發送請求注冊并初始化自身,計算自身所需資源,并向RM發起資源請求
????????ResourceManager將ApplicationMaster的資源請求放入scheduler資源隊列中,由scheduler分配資源,獲得資源后向指定的NodeManager分配相應的Container,等下一次心跳
????????ApplicationMaster向ResourceManager發送心跳
????????ResourceManager返回ApplicationsManager分配好的Container
????????ApplicationMaster向對應的NodeManager發起RPC調用,啟動分配的Container.
????????(一個ApplicationMatser對應一個Application,根據任務情況可擁有多個Container)
????????Container啟動后,用于執行用戶的作業Application,并向ApplicationMaster匯報進度,ApplicationMaster負責整個Application中的Container的生命周期管理。
????????ApplicationMaster為Container向ResourceManager請求資源。
????????作業執行完畢,ApplicationMaster向ResourceManager申請注銷資源。
5. 主從架構和雙層調度范式,誰是一級調度,誰是二級調度(重要)主要在PPT上
ResourceManager作為一級調度,將資源分配給二級調度ApplicationMaster
ResourceManager通過Scheduler(調度器)執行一級調度
調度器—》Container的分配信息—》ApplicationMasterà執行Container的創建—》Application