柚子快報邀請碼778899分享:【大數據】深入了解Hadoop
柚子快報邀請碼778899分享:【大數據】深入了解Hadoop
文章目錄
一、Hadoop1.1、Hadoop發(fā)展1.2、Hadoop特性1.3、Hadoop三大組件
二、Hadoop---HDFS(分布式文件存儲系統(tǒng))2.1、hdfs服務的構成2.2、HDFS的Shell操作2.3、**`HDFS讀寫流程`**2.4、三副本機制2.5、元數據介紹2.6、HDFS的歸檔2.7、HDFS垃圾桶機制2.8、HDFS安全機制
三、Hadoop---MapReduce(分布式計算引擎)3.1、MapReudce簡單使用3.2、**`MapReduce 計算流程`**3.3、MapReduce計算歷史服務
四、Hadoop---Yarn(資源調度系統(tǒng))4.1、Yarn服務的構成4.2、Yarn的資源調度流程4.3、Yarn資源調度方案
五、Hadoop集群搭建5.1、搭建步驟5.2、高可用搭建步驟
一、Hadoop
狹義上: 分布式數據管理(存儲,計算)的系統(tǒng)服務 廣義上: 大數據開發(fā)的一個生態(tài)系統(tǒng),很多大數據開發(fā)的工具都可以接入到hadoop中 如 zk可以配合Hadoop一起實現高可用
1.1、Hadoop發(fā)展
Hadoop屬于Apache基金會的開源項目,下載源碼使用 是搜索引擎公司開發(fā)的,Hadoop的實現原理參考谷歌的兩篇論文, GFS論文,開發(fā)了hdfs 負責存儲 Mapreduce論文,開發(fā)了mapreduce 負責計算
1.2、Hadoop特性
擴容能力(Scalable):Hadoop是在可用的計算機集群間分配數據并完成計算任務的,這些集群可以方便的擴展到數以千計的節(jié)點中。成本低(Economical):Hadoop通過普通廉價的機器組成服務器集群來分發(fā)以及處理數據,以至于成本很低。高效率(Efficient):通過并發(fā)數據,Hadoop可以在節(jié)點之間動態(tài)并行的移動數據,使得速度非???。可靠性(Rellable):能自動維護數據的多份復制,并且在任務失敗后能自動地重新部署(redeploy)計算任務。所以Hadoop的按位存儲和處理數據的能力值得信賴。
1.3、Hadoop三大組件
HDFS 負責數據存儲服務MapReduce 負責數據計算Yarn 負責計算資源的調度 hadoop2.0 之后的版本引入
二、Hadoop—HDFS(分布式文件存儲系統(tǒng))
負責大數據的數據儲存功能
對海量數采用文件的方式進行存儲,同一個文件的數據可能會存儲在不同的服務器實現分布式存儲
2.1、hdfs服務的構成
namenode服務 管理hdfs的主服務
所有的數據的讀寫請求都要交給namenode處理由namenode負責將數據進行分配存在不同的datanode上namenode主服務只會有一個,一旦namenode服務出現問題,整個hdfs服務都不可用,namenode是單點故障 datanode服務 負責存儲數據
和namenode保持通訊,將自身信息告知namenode數據存儲時,是按照塊(block)進行存儲,默認塊大小 128M
當數據大小不夠128M時,按照數據大小存儲數據到磁盤上 為了保證數據安全可靠,會對數據進行副本備份, 默認是3副本,每塊數據會存儲3份,三份數據會存儲在不同服務器 SecondaryNameNode 負責協(xié)助namenode完成對元數據的存儲
元數據是文件的信息(名字,大小,存儲位置),datanode信息,塊信息在hdfs運行期間,元數據是在內存上存儲的,內存存儲數據是臨時存儲,一點斷電或服務不可用宕機會造成內存數據丟失,hdfs為了避免數據丟失,會將元數據在磁盤上進行存儲SecondaryNameNode 協(xié)助namenode將元數據存在磁盤上如果namenode完成磁盤存儲數據,需要耗費大量時間,此時無法處理其他請求,所以元數據的磁盤存儲交給SecondaryNameNode 實現
2.2、HDFS的Shell操作
在hadoop的2.x版本中沒有web頁面的操作選項,只能通過shell方式操作
hdfs dfs 參數
hdfs dfs -mkdir /hdfs_data
hdfs dfs -touch /hdfs_data/a.txt
hdfs dfs -rm -r /hdfs_data
hdfs dfs -cp /hdfs_data/a.txt /data
hdfs dfs -mv /data/畫圖.pptx /hdfs_data
hdfs dfs -mv /hdfs_data/畫圖.pptx /hdfs_data/a.pptx
hdfs dfs -cat /hdfs_data/a.txt
hdfs dfs -ls /
hdfs的文件上傳下載
hdfs dfs -get hdfs上的文件路徑 本地的文件路徑(本地指操作的當前服務器)
hdfs dfs -put 本地的文件路徑(本地指操作的當前服務器) hdfs上的目錄路徑
2.3、HDFS讀寫流程
讀流程
客戶端向filesystem請求獲取文件數據, filesystem請求NN檢查文件, NN獲取元數據進行檢查并返回檢查結果給filesystem,filesystem返回給客戶端,客戶端請求調用讀取數據方法fsDataReadStream, fsDataReadStream請求NN獲取數據所在位置,NN返回數據所在位置(按照塊存儲順序返回所有塊的DN數據),然后按照packet大小讀取數據,存儲在內存上,數據讀取完成后寫入文件 當讀取某個DN不可用時,會匯報給NN
寫流程
1.客戶端通過DistributedFileSystem模塊向NN請求上傳文件,NN檢查目標文件是否已存在,父目錄是否存在并返回檢查結果 2. 客戶端向NN請求第一個Block上傳到哪幾個DN服務器上 3. NN返回3個DN節(jié)點,分別為DN1,DN2,DN3 4. 客戶端通過FSDataWriteStream模塊請求NN獲取要存儲數據的DN并向DN1上傳數據,DN1收到請求會繼續(xù)調用DN2,然后DN2調用DN3,將這個通信管道建立完成 5. DN1,DN2,DN3逐級應答客戶端 6. 客戶端開始往 DN1 上傳第一個 Block (默認128M)(先從磁盤讀取數據放到一個本地內存緩存),以 Packet(64KB) 為單位,DN1 收到一個 Packet 就會傳給 DN2,DN2傳給 DN3;DN1每傳一個 packet 會放入一個應答隊列等待應答。 7. 當一個 Block 傳輸完成之后,客戶端再次請求 NameNode 上傳第二個 Block 的服務器。(重復執(zhí)行3-7步)
2.4、三副本機制
保證每個塊在不同的服務器不同機架上
服務器數量低于副本數量,存儲數據時會報錯
1-第一個副本,由NN決定找哪個DN
2-第二個副本,有NN找第一個副本所在機架的不同服務器上
3-第三個副本,找和第一個副本不同機架的服務器上
2.5、元數據介紹
hdfs的元數據兩個部分
內存上的元數據
在服務運行期間,所有的元數據會先存儲在內存上文件信息,datanode信息,塊信息 元數據文件
為了避免內存上的元數據丟失,會將內存的上的元數據保存在磁盤上secondarynamenode完成元數據文件的保存存儲位置在hadoop的指定數據
/export/data/hadoop-3.3.0/dfs/name/current edits_xxxxx 編輯日志文件,記錄所有的文件操作信息 hdfs oev -i edits_0000000000000010086-0000000000000010100 -o edits.xml
fsimage_xxxxx 鏡像文件,保存了元數據內容 文件和塊內容
datanode會匯報自身狀態(tài)給NameNode,默認是3秒
hdfs oiv -i fsimage_0000000000000010119 -p XML -o fsimage.xml
元數據備份流程
客戶端發(fā)送文件操作請求給NN,NN將新的元數據同步到內存中并同時操作信息記錄在edits文件中,如果edits存儲1M會產生新的文件 SNN向NN發(fā)送checkpoint請求,時間間隔是一小時,當發(fā)生checkpoint時會創(chuàng)建新的edits文件,checkpoint后的請求操作信息會被記錄在新的edits中,SNN執(zhí)行edits文件中的操作,操作后的數據加載內存中,將元數據保存在fsimage中,將fsimage文件傳遞給NN并修改文件名
元數據保存文件的條件
1-時間間隔達到1小時 2-文件操作次數達到100萬次 兩個條件只要滿足一個就是執(zhí)行checkpoint進行元數據文件保存
# Checkpoint操作受兩個參數控制,可以通過hdfs-site.xml進行配置:
# 兩次連續(xù)的checkpoint之間的時間間隔。默認1小時
# 最大的沒有執(zhí)行checkpoint事務的數量,滿足將強制執(zhí)行緊急checkpoint,即使尚未達到檢查點周期。默認設置為100萬。
2.6、HDFS的歸檔
主要解決內存元數據數據量過大 文件數據量非常多時,內存上或存儲大量的文件元數據,此時內存占用資源比較大,可以對文件進行歸檔,類似對文件進行打包合成一個打包文件 一般歸檔是針對大量小文件
文件歸檔
hadoop archive -archiveName data.har -p /data /hdfs_data
歸檔的查看
hdfs dfs -ls har:///hdfs_data/data.har
歸檔解壓
hdfs dfs -cp har:///hdfs_data/data.har/a.txt /hdfs_data
歸檔注意點 歸檔后并不會刪除原有數據 原有數據依然會占用內存空間 要節(jié)省內存空就需要刪除原有文件
2.7、HDFS垃圾桶機制
刪除hdfs文件時,可以將文件臨時存在垃圾桶中,存儲時間可以進行設置 可以core-site.xml中設置 時間單位是分鐘
[root@node1 hadoop] hdfs dfs -rm /hdfs_data/a.txt
2023-06-18 18:01:34,332 INFO fs.TrashPolicyDefault: Moved: 'hdfs://node1:8020/hdfs_data/a.txt' to trash at: hdfs://node1:8020/user/root/.Trash/Current/hdfs_data/a.txt
[root@node1 hadoop] hdfs dfs -rm -skipTrash /hdfs_data/a.pptx
Deleted /hdfs_data/a.pptx
2.8、HDFS安全機制
保證文件操作的安全性 在hdfs啟動時,會進行安全機制檢查,檢查塊信息和datanode信息 檢查通過了,可以進行文件的增刪改查操作 檢查未通過 只能讀取文件,不能進行文件的寫入修改刪除操作
安全機制檢查的內容
1-保證每個塊至少有一個副本,沒有出現塊的丟失 2-保證數據塊占整個塊的比例不能低于0.999f,不能低于99.999% 3-保證至少有0個datanode運行 4-滿足以上3個條件之后等待30秒退出安全模式
shell操作
查看 hdfs dfsadmin -safemode get
啟動 hdfs dfsadmin -safemode enter
關閉 hdfs dfsadmin -safemode leave
hdfs dfsadmin -safemode forceExit
三、Hadoop—MapReduce(分布式計算引擎)
MapReduce 是hadoop負責計算的服務功能,采用的計算方式是分布式計算,就算思想’分而治之’
傳統(tǒng)計算方式是移動數據計算 分布式計算,移動計算到數據所在位置進行計算
3.1、MapReudce簡單使用
hadoop提供測試代碼 /export/server/hadoop/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 5 100
詞頻統(tǒng)計
hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount /input /output
3.2、MapReduce 計算流程
Map過程:(Map數量由塊決定) a. 通過split切割讀取文件中的每行數據 b. 將每行需要計算的數據轉為kv結構 c. 將kv數據寫入環(huán)形緩沖區(qū),默認大小100M,當達到80%開始spill溢出寫入文件進行shuffle操作shuffle過程: a. 分區(qū):partition ⅰ. 將Map處理后的數據分成多份:
采用hash取余的方式進行分區(qū)采用hash(key)%分區(qū)數(reduce個數) --余數相同的數據放同一分區(qū)分區(qū)數由reduce個數決定 b. 排序:sort ⅰ. 會對相同分區(qū)后的數據進行排序–排序的分區(qū)數據會寫入文件 c. 合并:merge ⅰ. 將相同分區(qū)的小文件數據合并成大文件(合并后的數據會排序,最終保證數據有序) Reduce過程:(Reduce數量由開發(fā)人員決定) a. 先通過fetch拉取合并后的文件數據,將數據加載到內存,然后將拉取后的數據進行排序 b. 堆排序后的數據聚合計算 c. 不同分區(qū)的數據會有對應的reduce進行拉取
3.3、MapReduce計算歷史服務
需要對歷史日志服務進行配置 啟動歷史日志服務
mapred --daemon start historyserver
hadoop服務運行錯誤查看的日志文件
四、Hadoop—Yarn(資源調度系統(tǒng))
Yarn是hadoop中負責資源調度的服務功能,mapreduce計算時使用的資源都需要找yarn申請,申請成功后才能進行計算。
yarn是hadoop2.x版本之后引入的服務,在之前計算實時都是使用各自服務器上的資源,有了yarn可以協(xié)調分配多臺服務器的資源。
4.1、Yarn服務的構成
ResourceManager 簡寫RM
管理整個yarn服務處理所有的計算任務資源申請請求單點故障,出現問題后整個yarn都不可用計算時會指定創(chuàng)建applicationmaster服務不參與具體計算的資源分配 NodeManager 簡寫NM
監(jiān)控每臺服務器的資源情況,匯報給RM創(chuàng)建container資源空間給計算任務使用 ApplicationMaster
只有在進行計算時會由RM創(chuàng)建負責整個計算任務的管理(具體資源的分配),也就是管Map和Reduce計算Map和Reduce在計算時的信息會匯報給ApplicationMaster計算完成,會由RM釋放
4.2、Yarn的資源調度流程
1.客戶端提交計算任務給RM 2. RM找到NM創(chuàng)建ApplicantionMaster 3. ApplicationMater和RM保持通訊并申請計算資源 4.申請成功,RM返回資源充足的NM信息,App通知對應的NM創(chuàng)建container資源空間 5.在對應的資源空間上運行MapTask,讀取block數據轉為kv(mr計算時有一個combine機制在map端進行聚合計算) 6.map通過shuffle將數據傳遞給reduce計算 7.計算完成后釋放所有計算資源
4.3、Yarn資源調度方案
當有多個計算任務提交時,資源分配給哪個計算任務使用? 此時需要指定資源調度策略 1-先進先出(FIFO) 誰先申請先給誰分配 2-容量調度(Capacity) 將資源劃分多份,交給多個任務分開使用 默認采用 3-公平調度 (Fair) 計算任務部分完成后,釋放資源給其他任務使用 map計算完成后就可以釋放資源不必等所有計算完成再釋放 在yarn-site.xml文件下可以設置調度側率
# 容量調度 默認
yarn.resourcemanager.scheduler.class= org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
# 公平調度
yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.reservation.FairSchedulerPlanFollower
當采用容量調度時需要單獨對分配的容量進行指定 在hadoop的配置文件目錄下指定capacity-scheduler.xml文件
在使用時可以在代碼中指定采用哪個資源,指定資源名稱 root.dev.mapreduce
五、Hadoop集群搭建
Hadoop部署方式分三種: Standalone mode(獨立模式)、 Pseudo-Distributed mode(偽分布式模式)、 Cluster mode(集群模式) 其中前兩種都是在單機部署。 獨立模式又稱為單機模式,僅1個機器運行1個java進程,主要用于調試。 偽分布模式也是在1個機器上運行HDFS的NameNode和DataNode、YARN的 ResourceManger和NodeManager,但分別啟動單獨的java進程,主要用于調試。 集群模式主要用于生產環(huán)境部署。會使用N臺主機組成一個Hadoop集群。這種部署模式下,主節(jié)點和從節(jié)點會分開部署在不同的機器上。
5.1、搭建步驟
1.上傳hadoop壓縮包(hadoop-3.3.0-Centos7-64-with-snappy.tar.gz)解壓,注意:上傳文件位置為 /export/server目錄
cd /export/server
tar zxvf /export/server/hadoop-3.3.0-Centos7-64-with-snappy.tar.gz
2.配置環(huán)境變量
echo 'export HADOOP_HOME=/export/server/hadoop-3.3.0' >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/profile
source /etc/profile
3.手動修改配置文件(3和4二選一)
進入/export/server/hadoop-3.3.0/etc/hadoop目錄下進行修改
① hadoop-env.sh文件
export JAVA_HOME=/export/server/jdk
#文件最后添加
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
② core-site.xml文件
③ hdfs-site.xml文件
④ mapred-site.xml文件
⑤ yarn-site.xml文件
⑥ workers文件
node1
node2
node3
4.使用配置文件替換(3和4二選一)
上傳配置文件壓縮包(hadoop-config.tar)解壓,注意:上傳文件位置為 /export/server目錄
tar xvf /export/server/hadoop-config.tar
mv -f /export/server/hadoop-config/* /export/server/hadoop-3.3.0/etc/hadoop/
rm /export/server/hadoop-config* -rf
5.集群搭建說明
需要將node1中的Hadoop文件復制到node2和node3的對應位置
scp可以進行主機的文件復制拷貝
scp -r /export/server/hadoop-3.3.0 root@node2:/export/server/
6.hadoop集群啟動 ① 數據初始化
注意: 初始化操作必須在node1中執(zhí)行
hdfs namenode -format
② 腳本啟動和關閉
start-all.sh
stop-all.sh
http://192.168.88.100:9870 問題: 無法在HDFS上傳文件,原因是本地windows下沒有進行IP地址的域名解析 解決:windows下進入C:\Windows\System32\drivers\etc 192.168.88.100 node1.jinking.cn node1 192.168.88.101 node2.jinking.cn node2 192.168.88.102 node3.jinking.cn node3
5.2、高可用搭建步驟
主要解決服務的單點故障問題,提高服務的使用效率 使用zk實現多服務狀態(tài)管理,選舉產生主備
安裝軟件
三臺服務器都要安裝
yum install psmisc -y # 實現多個服務的通訊 zkfc和nn及zk的通訊
rpm -ivh psmisc-22.20-17.el7.x86_64.rpm
備份hadoop安裝信息
tar cvf hadoop.tar /export/server/hadoop-3.3.0
刪除原有數據文件 三臺服務器都操作
rm -rf /export/data/hadoop-3.3.0
修改配置文件 以下配置現在node1上執(zhí)行
修改hadoop-env.sh
# 在文件最后添加下面兩行
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
修改core-site.xml
修改hdfs-site.xml
修改yarn-site.xml
注意: 將hadoop配置信息拷貝到node2和node3 注意: 將hadoop配置信息拷貝到node2和node3 注意: 將hadoop配置信息拷貝到node2和node3
5.啟動
啟動zk
zkServer.sh start 啟動journalnode 三臺服務器都啟動
hadoop-daemon.sh start journalnode 初始化namenode 注意:node1上執(zhí)行
hdfs namenode -format將數據文件拷貝到node2相同目錄
scp -r ha-hadoop/ node2:/export/data/ 初始化zkfc 注意在node1上執(zhí)行
hdfs zkfc -formatZK 啟動服務
start-all.sh
注意
搭建高可用后,之前的SNN會被QJM取代
柚子快報邀請碼778899分享:【大數據】深入了解Hadoop
參考鏈接
本文內容根據網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯系刪除。