利剑无意之面试题(二)
- 絕對路徑用什么符號表示?當前目錄、上層目錄用什么表示?主目錄用什么表示?切換目錄用什么命令?
?
絕對路徑: 如/etc/init.d
當前目錄和上層目錄: ./ ../
主目錄: ~/
切換目錄: cd
- 查看文件內容有哪些命令可以使用?
?
vi 文件名 #編輯方式查看,可修改
cat 文件名 #顯示全部文件內容
more 文件名 #分頁顯示文件內容
less 文件名 #與 more 相似,更好的是可以往前翻頁
tail 文件名 #僅查看尾部,還可以指定行數
head 文件名 #僅查看頭部,還可以指定行數
- HDFS為什么不太適合小文件的存儲?
?
不能高效的對大量的小數據進行存儲(大量的小文件會很快沾滿nameNode的內存空間)大量的小文件,也會影響NameNode的尋址時間。
1. 小文件過多,會過多占用namenode的內存,并浪費block。
文件的元數據(包括文件被分成了哪些blocks,每個block存儲在哪些服務器的哪個block塊上),都是存儲在namenode上的。
HDFS的每個文件、目錄、數據塊占用150B,因此300M內存情況下,只能存儲不超過300M/150=2M個文件/目錄/數據塊的元數據。
2. 文件過小,尋道時間大于數據讀寫時間,這不符合HDFS的設計。
HDFS天生就是為存儲大文件而生的,一個塊的元數據大小大概在150byte左右,存儲一個小文件就要占用150byte的內存,如果存儲大量的小文件
很快就將內存耗盡,而整個集群存儲的數據量很小,失去了HDFS的意義。
解決方案:
可以將數據合并上傳,或者將文件append形式追加在HDFS文件末尾。
- crontab文件的用處,有多少個參數,各是什么含義。
?
使用crontab你可以在指定的時間執行一個shell腳本或者一系列Linux命令。
六個。
第一個“*” 一小時當中的第幾分鐘 0-59
第二個“*” 一天當中的第幾小時 0-23
第三個“*” 一個月當中的第幾天 1-31
第四個“*” 一年當中的第幾月 1-12
第五個“*” 一周當中的星期幾 0-7(0和7都代表星期日)
【補充】
crontab -e 設置定時任務
-r 刪除任務
-l 列出該用戶的定時任務
-u 指定定時器的用戶名稱
- Linux系統是一種典型的多用戶系統 ,不同的用戶處于不同的地位,擁有不同的權限。為了保護系統的安全性,Linux系統對不同的用戶訪問同一-文件(包括目錄文件)的權限做了不同的規定。那么文件屬性一共有多少個字符,各是什么含義?
?
10個。
(1)0首位表示類型
在Linux中第一個字符代表這個文件是目錄、文件或鏈接文件等等
- 代表文件
?d 代表目錄
?c 字符流,裝置文件里面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置)
?s socket
?p 管道
?l 鏈接文檔(link file);
?b 設備文件,裝置文件里面的可供儲存的接口設備(可隨機存取裝置)
(2)第1-3位確定屬主(該文件的所有者)擁有該文件的權限。---User
(3)第4-6位確定屬組(所有者的同組用戶)擁有該文件的權限,---Group
(4)第7-9位確定其他用戶擁有該文件的權限 ---Other
- 軟鏈接和硬鏈接的區別
?
軟鏈接文件的大小和創建時間和源文件不同。軟鏈接文件只是維持了從軟鏈接到源文件的指向關系,不是源文件的內容。
硬鏈接文件和源文件的大小和創建時間一樣。硬鏈接文件的內容和源文件的內容一模一樣,相當于copy了一份。
- HDFS的存儲機制(讀寫流程)。
?
HDFS存儲機制,包括HDFS的寫入過程和讀取過程兩個部分
?
1)客戶端向namenode請求上傳文件,namenode檢查目標文件是否已存在,父目錄是否存在。
2)namenode返回是否可以上傳。
3)客戶端請求第一個 block上傳到哪幾個datanode服務器上。
4)namenode返回3個datanode節點,分別為dn1、dn2、dn3。
5)客戶端請求dn1上傳數據,dn1收到請求會繼續調用dn2,然后dn2調用dn3,將這個通信管道建立完成。
6)dn1、dn2、dn3逐級應答客戶端
7)客戶端開始往dn1上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存),以packet為單位,dn1收到一個packet就會傳給dn2,dn2傳給dn3;dn1每傳一個packet會放入一個應答隊列等待應答
8)當一個block傳輸完成之后,客戶端再次請求namenode上傳第二個block的服務器。(重復執行3-7步)
?
1)客戶端向namenode請求下載文件,namenode通過查詢元數據,找到文件塊所在的datanode地址。
2)挑選一臺datanode(就近原則,然后隨機)服務器,請求讀取數據。
3)datanode開始傳輸數據給客戶端(從磁盤里面讀取數據放入流,以packet為單位來做校驗)。
4)客戶端以packet為單位接收,先在本地緩存,然后寫入目標文件
- SecondaryNameNode工作機制。
?
1)第一階段:namenode啟動
(1)第一次啟動namenode格式化后,創建fsimage和edits文件。如果不是第一次啟動,直接加載編輯日志和鏡像文件到內存。
(2)客戶端對元數據進行增刪改的請求
(3)namenode記錄操作日志,更新滾動日志。
(4)namenode在內存中對數據進行增刪改查
2)第二階段:Secondary NameNode工作
(1)Secondary NameNode詢問namenode是否需要checkpoint。直接帶回namenode是否檢查結果。
(2)Secondary NameNode請求執行checkpoint。
(3)namenode滾動正在寫的edits日志
(4)將滾動前的編輯日志和鏡像文件拷貝到Secondary NameNode
(5)Secondary NameNode加載編輯日志和鏡像文件到內存,并合并。
(6)生成新的鏡像文件fsimage.chkpoint
(7)拷貝fsimage.chkpoint到namenode
(8)namenode將fsimage.chkpoint重新命名成fsimage
總結
以上是生活随笔為你收集整理的利剑无意之面试题(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利剑无意之面试题(一)
- 下一篇: 利剑无意之面试题(三)