Hadoop入門四(3.2.2版本)

一.hdfs命令

hdfs dfs -linux命令,操作是一樣的

su - hadoop001

①which hadoop? ? ?②which hdfs

? ? hadoop 回車? ? ? ? ? ?hdfs 回車

hadoop與hdfs對比

對比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.

【說明】如果壓縮是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)閉 : 讀寫正常

【問題】安全模式打開時(shí),能進(jìn)行讀寫操作嗎?

答:只能讀不能寫

驗(yàn)證:

hdfs dfsadmin -safemode enter #進(jìn)入安全模式

hdfs dfs -put 1.log /tmp

hdfs dfs -cat /tmp/1.log

安全模式打開與關(guān)閉對比

由此可以看出,安全模式打開的情況下,只能讀不能寫。

生產(chǎn)上,如果通過log 查看到 safemode: on,必然集群是有問題的,這個(gè)時(shí)候可以手動(dòng)從安全模式離開,然后就能正常對外提供服務(wù),具體命令如下:

hdfs dfsadmin -safemode leave? ?#離開安全模式

做集群維護(hù)的時(shí)候,目標(biāo)是不要有數(shù)據(jù)寫入,那進(jìn)入安全模式。另外在生產(chǎn)上如果block塊丟失過多,會(huì)自動(dòng)進(jìn)入安全模式。

2.檢查

hdfs fsck? #對dfs做系統(tǒng)檢查

hdfs fsck相關(guān)命令

比如顯示:Target Replicas is 3 but found 1-2 live replica(s)? 說明丟失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)磁盤使用率減去平均磁盤使用率最后的結(jié)果小于10%

假如

DN1 磁盤占用了 90%; -76% = 14%? 多了4%

DN2?磁盤占用了80%; -76% = 4%? ? 滿足

DN3?磁盤占用了?60%?

平均磁盤使用率為:76% ,對于:

DN1 90% -76% = 14%? 多了4%

DN2? 80% -76% = 4%? ? 滿足

DN3? 60% -76% = -16%? 少了 -16%

其中DN1多了4%;DN2滿足小于10%的條件;DN3少了16%,然后會(huì)根據(jù)它自己的算法去均衡磁盤,均衡到閾值10%以下。一般這里面有一個(gè)shell腳本,【建議】生產(chǎn)上,每天晚上業(yè)務(wù)低谷時(shí)期,定時(shí)執(zhí)行該腳本去均衡磁盤。

3.2 DN1內(nèi)部 /data01(1T)? /data02(2T)-單個(gè)節(jié)點(diǎn)多盤的平衡

【注意】2.x版本沒有這個(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.回收站

【問題】Linux 有回收站?

答:沒有,但是非要做,怎么辦?

參考網(wǎng)站:Linux刪除文件實(shí)現(xiàn)回收站功能 - 方面盤 - 博客園 (cnblogs.com)

hdfs是有回收站的

驗(yàn)證:

cd ~/data/input

hdfs dfs -put 1.log /

hdfs dfs -rm /1.log

沒有配置,直接刪除

配置回收站:

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)入到安全模式,可以通過log日志查看

ll ~/app/hadoop/logs

tail -200f xxx.log

顯示:The report.....

原因:塊丟失

hdfs fsck /? #查看塊丟失詳情

hdfs dfsadmin -safemode leave? ?#離開安全模式

?驗(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的資源組合。

【問題】container容器是有幾組參數(shù)進(jìn)行CPU和內(nèi)存配置。

2.主從架構(gòu)

resourcemanager? rm

nodemanager? ? ? nm

【經(jīng)典面試題】生產(chǎn)上的reduce task任務(wù)可能等到所有的map task跑完,才開始計(jì)算;

也有可能map task才跑60%,就開始計(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容器,來運(yùn)行applicationmaster。

③application master就向applications manager注冊,就可以在web界面查看作業(yè)的運(yùn)行狀態(tài)。

④application master采取輪詢的方式通過【RPC】協(xié)議向resource scheduler去申請和領(lǐng)取資源

(哪臺(tái)DN機(jī)器,領(lǐng)取多少內(nèi)存 CPU)

⑤一旦application master拿到資源列表,就和對應(yīng)的DN機(jī)器進(jìn)行通信,要求啟動(dòng)container來運(yùn)行task任務(wù)。

⑥nm為task任務(wù)設(shè)置好運(yùn)行的環(huán)境(container容器),將任務(wù)啟動(dòng)命令寫在腳本里,通過腳本啟動(dòng)task。

⑦然后各個(gè)task任務(wù),通過【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申請注銷和關(guān)閉作業(yè)。

這個(gè)時(shí)候在web可以看任務(wù)是否完成,成功還是失敗。

總結(jié):

啟動(dòng)主程序,領(lǐng)取資源;①-④

運(yùn)行任務(wù),直到完成;? ⑤-⑧

已同步至:Hadoop入門四(3.2.2版本)_comer_liu的博客-CSDN博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容