柚子快報(bào)邀請(qǐng)碼778899分享:大數(shù)據(jù)基礎(chǔ)篇
柚子快報(bào)邀請(qǐng)碼778899分享:大數(shù)據(jù)基礎(chǔ)篇
說(shuō)明
該篇文章用于大數(shù)據(jù)的初學(xué)人群進(jìn)行交流學(xué)習(xí)
本章內(nèi)容主要是對(duì)大數(shù)據(jù)概念,常用技術(shù)棧及常用架構(gòu)Hadoop的介紹。以及hdfs相關(guān)的機(jī)制的介紹
大數(shù)據(jù)概述
什么是大數(shù)據(jù):從狹義上來(lái)講是處理海量數(shù)據(jù)的軟件技術(shù)體系,從廣義上來(lái)講是數(shù)字化,信息化時(shí)代的支撐,以數(shù)據(jù)為生活賦能
大數(shù)據(jù)能夠解決的問(wèn)題:海量數(shù)據(jù)的存儲(chǔ),計(jì)算 ,傳輸問(wèn)題。
大數(shù)據(jù)特征: 數(shù)據(jù)體量大,發(fā)展速度快,種類多,準(zhǔn)確性未知,價(jià)值密度
大數(shù)據(jù)技術(shù)棧
存儲(chǔ):HDFS(Hadoop disturbited file system),Hbase等
計(jì)算: Mapreduce Hive Spark Flink等
傳輸: sqoop flume kafka Pulsar等
Hadoop簡(jiǎn)介
廣義:整個(gè)Hadoop的生態(tài)圈,包括數(shù)據(jù)采集,存儲(chǔ),計(jì)算,傳輸,調(diào)度等組件
狹義:Hadoop框架本身,包括HDFS、Mapreduce、YARN
Hadoop基于linux的相關(guān)配置指令
(1)啟動(dòng)hadoop集群
#切換至linux的hadoop的文件目錄下
cd /export/server/hadoop/
#同時(shí)啟動(dòng)
start-all.sh
hdfs start-dfs.sh
單獨(dú)啟動(dòng)
yarn start -yarn.sh
同時(shí)關(guān)閉關(guān)閉
stop-all.sh
這樣就算執(zhí)行成功了
(2)啟動(dòng)歷史服務(wù)
mapred --daemon start historyserver 啟動(dòng)歷史日志
jps 查看正在進(jìn)行的jar進(jìn)程
(3)頁(yè)面訪問(wèn)hadoop
1.訪問(wèn)HDFS 虛擬機(jī)地址:9870
如果看到以下頁(yè)面說(shuō)明你成功了
2.訪問(wèn)YARN 虛擬機(jī)地址:8088
如果看到以下頁(yè)面說(shuō)明你成功了
3.訪問(wèn)歷史日志 虛擬機(jī)地址:19888
如果看到以下頁(yè)面說(shuō)明你成功了
Haddop集群案列(相當(dāng)于各種語(yǔ)言的helloworld)
評(píng)估圓周率
第一步:切入Hadoop mapreduce文件下 具體命令為:cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce 第二步:找到example路徑:hadoop-mapreduce-examples-3.3.0.jar 第三步:評(píng)估圓周率命令為:hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 10 10
如果看到以下頁(yè)面說(shuō)明你成功了
HDFS的架構(gòu)
1.概念
hdfs是一種分布式的文件存儲(chǔ)系統(tǒng)
為什么要進(jìn)行分布式存儲(chǔ)?
避免文件太大,單臺(tái)服務(wù)器無(wú)法承擔(dān),靠多臺(tái)服務(wù)器分區(qū)存儲(chǔ)。同時(shí)可以獲得成倍的傳輸、寫(xiě)入
讀取效率。
2.基礎(chǔ)架構(gòu)
HDFS集群有兩個(gè)重要角色:Namenode Datanode
四個(gè)重要組件:HDFS Client、namenode、datanode 和Secondary Namenode
如圖所示為hdfs的基礎(chǔ)架構(gòu)圖及各個(gè)組件的主要功能
3.HDFS 切塊
概念:hdfs存取文件時(shí)并不是直接存取的,而是將文件切成數(shù)個(gè)128M的block塊
為什么要切塊?
因?yàn)槲募髸?huì)影響傳輸效率和讀取效率
4.NameNode 如何管理BLOCK塊
需要了解倆個(gè)文件:
edits:用于記錄hdfs的每一個(gè)操作,以及本次操作所影響的block
fsimage:edits 文件合并的結(jié)果
namenode元數(shù)據(jù)管理維護(hù):每次對(duì)hdfs的操作都會(huì)記錄在edits中,每個(gè)edits達(dá)到上限以后開(kāi)啟新的edits,多個(gè)edits會(huì)定期合并成fsimage。
SecondaryNameNode元數(shù)據(jù)合并:SecondaryNameNode會(huì)通過(guò)http從NameNode拉取數(shù)據(jù)(edits和fsimage)然后合并完成后提供給NameNode使用。
注:
對(duì)于元數(shù)據(jù)的合并,是一個(gè)定時(shí)過(guò)程,基于: dfs.namenode.checkpoint.period,默認(rèn)3600(秒)即1小時(shí) dfs.namenode.checkpoint.txns,默認(rèn)1000000,即100W次事務(wù))
5.HDFS的面向存儲(chǔ)的三大機(jī)制
副本機(jī)制:為了保證數(shù)據(jù)安全和效率,block塊信息存儲(chǔ)多個(gè)副本
負(fù)載均衡機(jī)制:namenode為了保證不同的datanode中block塊信息大體一樣,分配存儲(chǔ)任務(wù)的時(shí)候會(huì)優(yōu)先保存在余量比較大datanode上
心跳機(jī)制:datanode每隔3秒鐘向namenode匯報(bào)自己的狀態(tài)信息,如果某個(gè)時(shí)刻,datanode連續(xù)10次不匯報(bào)了,namenode會(huì)認(rèn)為datanode有可能宕機(jī)了,namenode就會(huì)每5分鐘(300000毫秒)發(fā)送一次確認(rèn)消息,連續(xù)2次沒(méi)有收到回復(fù),就認(rèn)定datanode此時(shí)一定宕機(jī)了
6.HDFS數(shù)據(jù)的寫(xiě)入
第一步 客戶端發(fā)送寫(xiě)入請(qǐng)求給namenode
第二步 namenode 接受到請(qǐng)求校驗(yàn)權(quán)限,文件,存儲(chǔ)路徑,無(wú)誤后通知客戶端文件可以寫(xiě)入
第三步 客戶端收到確認(rèn)將文件切成許多個(gè)默認(rèn)大小為128m的block,再把block切成64kb的包
第四步 客戶端將處理好的塊信息再次返回給namenode,獲取能夠儲(chǔ)存block的datanode列表
第五步 namenode查看位置較近且不忙的datanode,放入列表中返回給客戶端
第六步 客戶端連接namenode,并發(fā)送packet數(shù)據(jù)包,第一個(gè)datanode接受完以后給客戶端ack應(yīng)答,同時(shí)datanode開(kāi)始復(fù)制剛才收到的數(shù)據(jù)包給node2.node2復(fù)制給node3(流式傳輸)
第七步 其他packet重復(fù)第五步的步驟
第八步 其他block重復(fù)4-7步
第九步 客戶端和namenode互相確認(rèn)文件數(shù)據(jù)已經(jīng)保存完成
7.HDFS數(shù)據(jù)的讀取
1.客戶端發(fā)送讀取文件請(qǐng)求給namenode
2.namdnode接收到請(qǐng)求,然后進(jìn)行一系列校驗(yàn)(路徑是否存在,文件是否存在,是否有權(quán)限等),如果沒(méi)有問(wèn)題,就告知可以讀取
3.客戶端需要再次和namenode確認(rèn)當(dāng)前文件在哪些datanode中存儲(chǔ)
4.namenode查看當(dāng)前距離下載位置較近且不忙的datanode,放入列表中返回給客戶端
5.客戶端找到最近的datanode開(kāi)始讀取文件對(duì)應(yīng)的block塊信息(每次傳輸是以64kb的packet數(shù)據(jù)包),放到內(nèi)存緩沖區(qū)中
6.接著讀取其他block塊信息,循環(huán)上述3-5步,直到所有block塊讀取完畢(根據(jù)塊編號(hào)拼接成完整數(shù)據(jù))
7.最后從內(nèi)存緩沖區(qū)把數(shù)據(jù)通過(guò)流寫(xiě)入到目標(biāo)文件中
8.hdfs的其他機(jī)制 (僅做了解)?
安全機(jī)制
歸檔機(jī)制
垃圾桶機(jī)制
9.hdfs元數(shù)據(jù)管理流程
1.namenode第一次啟動(dòng)的時(shí)候先把最新的fsimage文件中內(nèi)容加載到內(nèi)存中,同時(shí)把edits文件中內(nèi)容也加載到內(nèi)存中
2.客戶端發(fā)起指令(增刪改查等操作),namenode接收到客戶端指令把每次產(chǎn)生的新的指令操作先放到內(nèi)存中
3.然后把剛才內(nèi)存中新的指令操作寫(xiě)入到edits_inprogress文件中
4.edits_inprogress文件中數(shù)據(jù)到了一定閾值的時(shí)候,把文件中歷史操作記錄寫(xiě)入到序列化的edits備份文件中
5.namenode就在上述2-4步中循環(huán)操作...
6.當(dāng)secondarynamenode檢測(cè)到自己距離上一次檢查點(diǎn)(checkpoint)已經(jīng)1小時(shí)或者事務(wù)數(shù)達(dá)到100w,就觸發(fā)secondarynamenode詢問(wèn)namenode是否對(duì)edits文件和fsimage文件進(jìn)行合并操作 7.namenode告知可以則進(jìn)行合并
8.secondarynamenode將namenode上積累的所有edits和一個(gè)最新的fsimage下載到本地,并加載到內(nèi)存進(jìn)行合并(這個(gè)過(guò)程稱checkpoint)
9.secondarynamenode把剛才合并后的fsimage.checkpoint文件拷貝給namenode
10.namenode把拷貝過(guò)來(lái)的最新的fsimage.checkpoint文件,重命名為fsimage,覆蓋原來(lái)的文件
HDFS基于linux的shell命令
hadoop fs - #既可以操作hdfs也可以操作本地文件
hdfs #只能操作hdfs系統(tǒng)
ls 顯示文件列表
-mkdir -p創(chuàng)建目錄
put 從本地文件系統(tǒng) 上傳到目標(biāo)文件系統(tǒng)
get 將hdfs文件拷貝到本地文件系統(tǒng)
mv 將文件從原路徑移動(dòng)到目標(biāo)路徑
cp 將文件拷貝到目標(biāo)路徑中
cat 查看文件內(nèi)容
appdendToFile 將本地linux文件追加到Hdfs文件中
柚子快報(bào)邀請(qǐng)碼778899分享:大數(shù)據(jù)基礎(chǔ)篇
精彩鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。