一.hdfs命令
hdfs dfs -linux命令造虏,操作是一樣的
su - hadoop001
①which hadoop? ? ?②which hdfs
? ? hadoop 回車(chē)? ? ? ? ? ?hdfs 回車(chē)
hadoop與hdfs對(duì)比
對(duì)比hadoop命令和hdfs命令柱徙,發(fā)現(xiàn)有些不一樣。
hadoop fs 等價(jià)于 hdfs dfs命令
(一).hadoop命令
1. 查看當(dāng)前版本 壓縮情況
hadoop checknative? #查看當(dāng)前版本壓縮情況
當(dāng)前版本壓縮情況
2021-12-13 22:48:33,578 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
2021-12-13 22:48:33,583 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
2021-12-13 22:48:33,590 WARN zstd.ZStandardCompressor: Error loading zstandard native libraries: java.lang.InternalError: Cannot load libzstd.so.1 (libzstd.so.1: cannot open shared object file: No such file or directory)!
2021-12-13 22:48:33,598 WARN erasurecode.ErasureCodeNative: ISA-L support is not available in your platform... using builtin-java codec where applicable
2021-12-13 22:48:33,796 INFO nativeio.NativeIO: The native code was built without PMDK support.
Native library checking:
hadoop:? true /home/hadoop001/app/hadoop-3.2.2/lib/native/libhadoop.so.1.0.0
zlib:? ? true /lib64/libz.so.1
zstd? :? false
snappy:? true /lib64/libsnappy.so.1
lz4:? ? true revision:10301
bzip2:? true /lib64/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L:? false libhadoop was built without ISA-L support
PMDK:? ? false The native code was built without PMDK support.
【說(shuō)明】如果壓縮是false应闯,一般需要自己編譯,支持壓縮挂捻;如果使用CDH系列的碉纺,不用擔(dān)心。
【注意】壓縮的版本:snappy
2. hadoop classpath
hadoop classpath? #打印當(dāng)前類的路徑
當(dāng)前類的路徑
/home/hadoop001/app/hadoop/etc/hadoop:/home/hadoop001/app/hadoop/share/hadoop/common/lib/*:/home/hadoop001/app/hadoop/share/hadoop/common/*:/home/hadoop001/app/hadoop/share/hadoop/hdfs:/home/hadoop001/app/hadoop/share/hadoop/hdfs/lib/*:/home/hadoop001/app/hadoop/share/hadoop/hdfs/*:/home/hadoop001/app/hadoop/share/hadoop/mapreduce/lib/*:/home/hadoop001/app/hadoop/share/hadoop/mapreduce/*:/home/hadoop001/app/hadoop/share/hadoop/yarn:/home/hadoop001/app/hadoop/share/hadoop/yarn/lib/*:/home/hadoop001/app/hadoop/share/hadoop/yarn/*
(二).hdfs命令
1.hdfs dfsadmin
hdfs dfsadmin??#(管理員的命令)
hdfs dfsadmin相關(guān)命令
比如:hdfs dfsadmin -report? #報(bào)告當(dāng)前集群的情況
當(dāng)前集群的情況
2. 安全模式
hdfs dfsadmin? [-safemode <enter | leave | get | wait>]?
安全模式關(guān)閉 : 讀寫(xiě)正常
【問(wèn)題】安全模式打開(kāi)時(shí)刻撒,能進(jìn)行讀寫(xiě)操作嗎骨田?
答:只能讀不能寫(xiě)
驗(yàn)證:
hdfs dfsadmin -safemode enter #進(jìn)入安全模式
hdfs dfs -put 1.log /tmp
hdfs dfs -cat /tmp/1.log
安全模式打開(kāi)與關(guān)閉對(duì)比
由此可以看出,安全模式打開(kāi)的情況下声怔,只能讀不能寫(xiě)态贤。
生產(chǎn)上,如果通過(guò)log 查看到 safemode: on醋火,必然集群是有問(wèn)題的悠汽,這個(gè)時(shí)候可以手動(dòng)從安全模式離開(kāi),然后就能正常對(duì)外提供服務(wù)芥驳,具體命令如下:
hdfs dfsadmin -safemode leave? ?#離開(kāi)安全模式
做集群維護(hù)的時(shí)候介粘,目標(biāo)是不要有數(shù)據(jù)寫(xiě)入,那進(jìn)入安全模式晚树。另外在生產(chǎn)上如果block塊丟失過(guò)多姻采,會(huì)自動(dòng)進(jìn)入安全模式。
2.檢查
hdfs fsck? #對(duì)dfs做系統(tǒng)檢查
hdfs fsck相關(guān)命令
比如顯示:Target Replicas is 3 but found 1-2 live replica(s)? 說(shuō)明丟失1-2副本。
3.集群平衡
3.1 DN1 DN2-節(jié)點(diǎn)與節(jié)點(diǎn)之間的平衡
用cat start-balancer.sh 和cat stop-balancer.sh查看腳本
balancer? ? ? ? ? ? run a cluster balancing utility
hdfs balancer -policy datanode -threshold 10
threshold = 10.0
這里的10代表每個(gè)節(jié)點(diǎn)磁盤(pán)使用率減去平均磁盤(pán)使用率最后的結(jié)果小于10%
假如
DN1 磁盤(pán)占用了 90%慨亲; -76% = 14%? 多了4%
DN2?磁盤(pán)占用了80%婚瓜; -76% = 4%? ? 滿足
DN3?磁盤(pán)占用了?60%?
平均磁盤(pán)使用率為:76% ,對(duì)于:
DN1 90% -76% = 14%? 多了4%
DN2? 80% -76% = 4%? ? 滿足
DN3? 60% -76% = -16%? 少了 -16%
其中DN1多了4%刑棵;DN2滿足小于10%的條件巴刻;DN3少了16%,然后會(huì)根據(jù)它自己的算法去均衡磁盤(pán)蛉签,均衡到閾值10%以下胡陪。一般這里面有一個(gè)shell腳本,【建議】生產(chǎn)上碍舍,每天晚上業(yè)務(wù)低谷時(shí)期柠座,定時(shí)執(zhí)行該腳本去均衡磁盤(pán)。
3.2 DN1內(nèi)部 /data01(1T)? /data02(2T)-單個(gè)節(jié)點(diǎn)多盤(pán)的平衡
【注意】2.x版本沒(méi)有這個(gè)功能
diskbalancer? ? ? ? Distributes data evenly among disks on a given node
默認(rèn)參數(shù)設(shè)置:dfs.disk.balancer.enabled? : true? 【注意】2.x版本這里的默認(rèn)參數(shù)是false
hdfs diskbalancer --help? #命令幫助片橡,事半功倍!!!
hdfs diskbalancer相關(guān)命令(query查詢)
多看看官方文檔:Hadoop – Apache Hadoop 3.3.1
執(zhí)行命令: 先生成計(jì)劃? 再執(zhí)行
hdfs diskbalancer -plan ruozedata001? #生成計(jì)劃
hdfs diskbalancer -execute ruozedata001.plan.json? #執(zhí)行計(jì)劃
4.回收站
【問(wèn)題】Linux 有回收站妈经?
答:沒(méi)有,但是非要做捧书,怎么辦吹泡?
參考網(wǎng)站:Linux刪除文件實(shí)現(xiàn)回收站功能 - 方面盤(pán) - 博客園 (cnblogs.com)
hdfs是有回收站的
驗(yàn)證:
cd ~/data/input
hdfs dfs -put 1.log /
hdfs dfs -rm /1.log
沒(méi)有配置,直接刪除
配置回收站:
cd ~/app/hadoop/etc/hadoop
vi core-site.xml? 進(jìn)入之后经瓷,新增配置:
? <property>
? ? ? ? ? ?<name>fs.trash.interval</name>
? ? ? ? ? ?<value>10080</value>? ?#保留塊的時(shí)間爆哑,單位:min
? </property>
配置回收站
配置結(jié)束后,重新啟動(dòng):
cd ~/app/hadoop
sbin/stop-dfs.sh
sbin/start-dfs.sh
【注意】重啟之后可能又會(huì)自動(dòng)進(jìn)入到安全模式舆吮,可以通過(guò)log日志查看
ll ~/app/hadoop/logs
tail -200f xxx.log
顯示:The report.....
原因:塊丟失
hdfs fsck /? #查看塊丟失詳情
hdfs dfsadmin -safemode leave? ?#離開(kāi)安全模式
?驗(yàn)證:
hdfs dfs -put 1.log /
hdfs dfs -rm /1.log
此時(shí)刪除把文件Moved到了回收站
hdfs dfs -ls hdfs://comerdata001:9000/user/hadoop001/.Trash/Current/1.log
hdfs dfs -cat? hdfs://comerdata001:9000/user/hadoop001/.Trash/Current/1.log
查看回收站內(nèi)容
生產(chǎn)上一定要配置回收站喲!!!
二.mapreduce?計(jì)算框架
map? ? 映射: 是指一組數(shù)據(jù)按照一定的規(guī)則映射成一組
select id+10 as id ,name from t;
reduce? 規(guī)約:? 匯總
select name,sum(id) from
(select id+10 as id,name from t
) group by name;
例SQL:
id 1 2 3 4
name? a b c d
【huffle 洗牌】: 數(shù)據(jù)按照key(group by后面的數(shù)據(jù))進(jìn)行網(wǎng)絡(luò)傳輸規(guī)整到一起泪漂,按照計(jì)算規(guī)則計(jì)算。
三.mapreduce on yarn架構(gòu)設(shè)計(jì)【面試題】
1. container 容器 虛擬化概念
container 容器 虛擬化概念是一定的內(nèi)存和CPU的資源組合歪泳。
【問(wèn)題】container容器是有幾組參數(shù)進(jìn)行CPU和內(nèi)存配置。
2.主從架構(gòu)
resourcemanager? rm
nodemanager? ? ? nm
【經(jīng)典面試題】生產(chǎn)上的reduce task任務(wù)可能等到所有的map task跑完露筒,才開(kāi)始計(jì)算呐伞;
也有可能map task才跑60%,就開(kāi)始計(jì)算慎式。 主要看計(jì)算邏輯的嵌套伶氢。
3.mapreduce on yarn架構(gòu)圖(一主兩從)
mapreduce on yarn架構(gòu)圖(一主兩從)
【面試題】mapreduce on yarn架構(gòu)流程:
①client向rm提交應(yīng)用程序(作業(yè)),其中包含application master和啟動(dòng)命令等瘪吏。
②applications manager會(huì)給這個(gè)作業(yè)癣防,分配第一個(gè)container容器,來(lái)運(yùn)行applicationmaster掌眠。
③application master就向applications manager注冊(cè)蕾盯,就可以在web界面查看作業(yè)的運(yùn)行狀態(tài)。
④application master采取輪詢的方式通過(guò)【RPC】協(xié)議向resource scheduler去申請(qǐng)和領(lǐng)取資源
(哪臺(tái)DN機(jī)器蓝丙,領(lǐng)取多少內(nèi)存 CPU)
⑤一旦application master拿到資源列表级遭,就和對(duì)應(yīng)的DN機(jī)器進(jìn)行通信望拖,要求啟動(dòng)container來(lái)運(yùn)行task任務(wù)。
⑥nm為task任務(wù)設(shè)置好運(yùn)行的環(huán)境(container容器)挫鸽,將任務(wù)啟動(dòng)命令寫(xiě)在腳本里说敏,通過(guò)腳本啟動(dòng)task。
⑦然后各個(gè)task任務(wù)丢郊,通過(guò)【rpc】協(xié)議向application master主程序匯報(bào)進(jìn)度和狀態(tài)盔沫,以此可以隨時(shí)掌握task的運(yùn)行狀態(tài)。
當(dāng)task任務(wù)運(yùn)行失敗枫匾,也會(huì)重啟container任務(wù)架诞。
⑧當(dāng)所有的任務(wù)完成,application master向applications manager申請(qǐng)注銷(xiāo)和關(guān)閉作業(yè)婿牍。
這個(gè)時(shí)候在web可以看任務(wù)是否完成侈贷,成功還是失敗。
總結(jié):
啟動(dòng)主程序等脂,領(lǐng)取資源俏蛮;①-④
運(yùn)行任務(wù),直到完成上遥;? ⑤-⑧