hadoop(HDFS)常見面試題


1. 談談什么是Hadoop?
  Hadoop是一個開源軟件框架,用於存儲大量數據,並發計算/查詢節點的集群上的數據。
  Hadoop包括以下內容:
    HDFS(Hadoop Distributed File System):Hadoop分布式文件存儲系統。
    MapReduce:分布式計算框架。它以分布式和並行的方式處理大量的數據。
    YARN(資源定位器):用於管理和調度集群資源的框架。

 

2. 談談 hadoop1 和 hadoop2 的區別?
  hadoop1.x:由Common(公共模塊輔助工具)、HDFS(分布式數據存儲)、MapReduce(分布式計算+資源調度)組成
  hadoop1.x:由Common(公共模塊輔助工具)、HDFS(分布式數據存儲)、MapReduce(分布式計算)、YARN(統一資源調度)組成

 

3、什么是HDFS文件系統?
  HDFS是大數據開源框架hadoop的組件之一,全稱(Hadoop Distributed File System),它是一個分布式文件系統,由多台服務器聯合起來實現文件存儲功能,通過目錄樹來定位文件,集群中的服務器都有有各自的角色。

 

4、HDFS文件系統有什么特點?
  1.數據通過副本存儲,提高容錯性
  2.能夠處理PB級及以上數據,可處理百萬級文件數量
  3.節約成本,可分布在“廉價”機器上
  4.不適合低延時數據訪問
  5.不適合對大量文件的存儲和訪問
  6.單線程操作文件不能多用戶執行寫操作,並且不支持文件隨機修改


5、HDFS默認數據塊得大小是多少?為什么?
  HDFS目前默認塊大小在Hadoop2.x版本中是128M,老版本中是64M,
  因為目前磁盤的傳輸率約為100M/s,而HDFS讀取文件時最佳的尋址
  時間為10ms,尋址時間為傳輸時間的百分之1時最佳,所以定義塊
  大小為128M,1秒左右可以快速讀取完畢;本質上HDFS的塊大小取決於
  磁盤的傳輸速率。


6、為什么HDFS不支持存儲小文件?
  1)存儲大量小文件會占用NameNode大量的內存和磁盤來存儲文件目錄和塊信息。是不可取的,因為NameNode的內存是有限的;
    2)讀取小文件時尋址時間會超過讀取時間,不合理,違反了HDFS的設計目標.

 

7、 簡單描述hdfs文件的讀取流程?

  說說hdfs的文件上傳的流程
    1.首先客戶端通過Distributed FileSystem模塊向NameNode請求上傳文件,NameNode檢查目標文件是否已存在,父目錄是否存在。
    2.NameNode返回是否可以上傳。
    3.如果文件大於128M則分塊存儲,客戶端請求第一個 Block上傳到哪幾個DataNode服務器上。
    4.NameNode根據副本儲存策略返回3個DataNode節點,假如為dn1、dn2、dn3。
    5.客戶端通過FSDataOutputStream模塊請求dn1上傳數據,dn1收到請求調用dn2,dn2調用dn3,建立通信管道完成,dn1、dn2、dn3逐級應答客戶端。
    6.客戶端以Packet為單位往dn1上傳第一個Block數據,dn1收到Packet就會傳給dn2,dn2傳給dn3;dn1,dn2,dn3每接收packet會放入一個待寫隊列等待寫入數據,落盤。
    7.當一個Block傳輸完成之后,客戶端再次請求NameNode上傳第二個Block的服務器,重復執行3-6步。

  說說文件的下載流程
    1.客戶端通過Distributed FileSystem向NameNode請求下載文件,NameNode通過查詢元數據,找到文件塊所在的DataNode地址。
    2.挑選一台DataNode(就近原則,然后隨機)服務器,請求讀取數據。
    3.DataNode開始傳輸數據給客戶端(從磁盤里面讀取數據輸入流,以Packet為單位來做校驗)。
    4.客戶端以Packet為單位接收,先在本地緩存,然后寫入目標文件。

 


8.我們在上傳文件的時候namenode如何選取的datanode存儲副本?有什么優勢?
  HDFS的放置策略是將一個副本放置在本地機架中的一個節點上,將另一個副本放置在本地機架中的另一個節點上,最后一個副本放置在不同機架中的另一個節點上(一個副本在Client所處的節點上。如果客戶端在集群外,隨機選一個,第二個副本和第一個副本位於相同機架,隨機節點,第三個副本位於不同機架,隨機節點)。

  優點:該策略減少了機架間的寫流量,通常可以提高寫性能。機架故障的機會遠小於節點故障的機會。此策略不會影響數據的可靠性和可用性保證


9.描述一下Namenode和secondarynamenode的工作機制
  1. NameNode啟動和工作內容
    1.1第一次啟動NameNode格式化后,創建Fsimage和Edits文件。如果不是第一次啟動,會加載編輯日志和鏡像文件到內存。
    1.2客戶端對元數據進行增刪改的請求。
    1.3NameNode記錄操作日志,更新滾動日志。
    1.4NameNode在內存中對元數據進行增刪改。
   2. Secondary NameNode工作內容
    2.1 2NN詢問NN是否需要CheckPoint(合並鏡像和編輯日志),並帶回NameNode是否執行結果。
    2.2 2NN請求執行CheckPoint
    2.3 NN滾動正在寫的Edits編輯日志。
    2.4 將滾動前的編輯日志和鏡像文件拷貝到2NN。
    2.5 2NN加載編輯日志和鏡像文件到內存,並執行合並,生成新的鏡像文件fsimage.chkpoint。
    2.6 2NN拷貝fsimage.chkpoint到NN。
    2.7 NN將fsimage.chkpoint重新命名成fsimage,替換之間舊的fsimage

10.fsimage和edits文件分別指的是什么?存的是什么?
fsimage:HDFS文件系統元數據的鏡像文件,其中包含HDFS文件系統的所有目錄和文件inode及相關屬性的序列化信息。
edits:用戶操作的編輯日志文件,存放HDFS文件系統的所有更新操作的動作,文件所有寫操作會被記錄到Edits文件中。

11.默認情況下進行ckeckpoint(合並鏡像及編輯日志)的觸發條件是什么?
默認情況下,2NN每隔一小時執行一次checkpoint
默認情況下,一分鍾檢查一次Edits文件的操作次數,當操作次數達到1百萬時,2NN執行一次checkpoint。

12.工作中假如你的namenode發生故障,導致namenode中的元數據丟失,如何恢復數據?
方法一:將2NN所在服務器元數據存儲目錄namesecondary中數據拷貝到NameNode存儲元數據的name目錄下,重新開啟服務即可。
方法二:使用-importCheckpoint選項啟動NameNode守護進程,將2NN所在服務器元數據存儲目錄namesecondary拷貝到NameNode所在服務器的同級目錄下,導入檢查點數據,重新開啟服務即可。
  1.修改hdfs-site.xml中的
    <property>
      <name>dfs.namenode.checkpoint.period</name>
      <value>120</value>
    </property>

    <property>
      <name>dfs.namenode.name.dir</name>
      <value>/opt/module/hadoop-2.7.2/data/tmp/dfs/name</value>
    </property>
  導入檢查點數據:hdfs namenode -importCheckpoint

   注意:恢復后會丟失最后一次Edits文件記錄的用戶操作

13.什么情況下集群會進入安全模式?安全模式下集群有有什么限制?如何查看、進入、退出、等待安全模式
1.NameNode啟動時,會將鏡像文件(Fsimage)和編輯日志(Edits)加載到內存。一旦在內存中成功建立文件系統元數據的映像,則創建一個新的Fsimage文件和一個空的編輯日志。此時,NameNode開始監聽DataNode請求。這個過程期間,NameNode處於安全模式。當數據塊的副本數不滿足(dfs.replication.min=1)最小副本數時,不會主動退出安全模式;
2.安全模式下:NameNode的文件系統對於客戶端來說是只讀的。
3.(1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式狀態)
   (2)bin/hdfs dfsadmin -safemode enter (功能描述:進入安全模式狀態)
   (3)bin/hdfs dfsadmin -safemode leave (功能描述:離開安全模式狀態)
   (4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式狀態)
注意:集群正常啟動完成后,自動退出安全模式,如果無法正常退出可使用hdfs dfsadmin -safemode leave退出安全模式;對於全新創建的HDFS集群,NameNode啟動后不會進入安全模式,因為沒有Block信息。

14.啟動集群時,我們要對namenode進行格式化操作?為什么只能格式化一次
因為格式化NameNode,就會產生新的集群id,導致NameNode和DataNode的集群id不一致,集群找不到已往數據(現象datanode無法正常啟動);所以,重新格式化NameNode時,一定要先刪除data數據和log日志,然后再格式化NameNode,后再啟動集群


15.公司現在有4台服務器hadoop1、hadoop2、hadoop3、hadoop4 4台服務器,hadoop2和hadoop4配置相對較好,根據現有配置設計一個集群,並簡單說說基本的配置流程?
  hadoop1      hadoop2      hadoop3     hadoop4
    datanode       datanode     datanode       datanode
    nodemanager     nodemanager   nodemanager    nodemanager
          namenode              resourcemanager


16.啟動集群的相關命令有哪些?
  1 啟動集群之前一定要格式化(/opt/module/hadoop-2.7.2)
    bin/hdfs namenode -format ( has been successfully formatted

   2 啟動HDFS服務
    2.1 啟動namenode
      sbin/hadoop-daemon.sh start|stop namenode
    2.2 啟動datanode
      sbin/hadoop-daemon.sh start|stop datanode

    檢查namenode的web頁面是否可以訪問
    http://192.168.232.201:50070


   3 啟動YARN服務
    3.1 啟動resourcemanager
      sbin/yarn-daemon.sh start|stop resourcemanager

    3.2 啟動nodemanager
      sbin/yarn-daemon.sh start|stop nodemanager
    檢查yarn的web頁面:http://192.168.232.201:8088

  4 開啟歷史服務
    sbin/mr-jobhistory-daemon.sh start|stop historyserver

  5、實現了集群的群停和群起
    5.1、 群起群停HDFS服務進程(再namenode所在的服務器上)
      5.11 配置etc/hadoop/slaves (相對於hadoop-2.7.2)
      5.12 群起的命令:start-dfs.sh
      5.13 群停的命令:stop-dfs.sh

    5.2 群起群停YARN服務進程(再resourcemanager所在的服務器上)
      5.21 配置etc/hadoop/slaves (相對於hadoop-2.7.2)
      5.22 群起的命令:start-yarn.sh
      5.23 群停的命令:stop-yarn.sh

    5.3  stop-all.sh | start-all.sh


17.HDFS文件操作的命令有哪些?
  hadoop fs | hdfs dfs 命令分類
  本地文件 -> HDFS
      -put 將本地數據上傳至hdfs
      -copyFromLocal 將本地文件數據拷貝到hdfs
      -moveFromLocal 將本地文件數據移動到hdfs,成功后本地數據會刪除
      -appendToFile 追加一個文件到已經存在的文件末尾
  HDFS與HDFS之間
      -ls 查看hdfs文件目錄
      -mkdir 在HDFS上創建目錄
      -rm 刪除文件或者文件夾
      -rmr | -rm -r 遞歸刪除
      -cp 從一個目錄拷貝文件至另一目錄
      -mv 在HDFS目錄中移動文件
      -chown 修改文件所屬用戶權限
      -chmod 修改文件所屬讀寫權限
      -du -h 文件夾暫用的空間大小
      -df -h 查看系統分區情況
      -cat 查看文件
  HFDS -> 本地
      -get 從hdfs下載文件至本地
      -getmerge 合並hdfs目錄下的文件至本地
      -copyToLocal 從hdfs拷貝文件至本地
  其他
      -setrep 設置文件副本數(注意:具體的副本數得看DataNode的數量)
      -help 幫助命令

18.配置集群過程中如果發現各台服務器的datanode啟動后,過一段時間自動消失了,
查看原因發現datanode的集群clusterID=CID-9a578a40-2089-492b-9599-54dadbcd9849
而namenode的clusterID=CID-0b798a40-2089-492b-9599-54dadbcd9849,這時如果需要讓集群正常工作,如何處理?
  原因:這是因為多次格式化namenode后造成,datanode和namenode的集群id不一致,導致的,
    方案一:如何集群沒有任何數據,可以刪除個服務器的data logs目錄重新格式化,重新啟動集群
    方案二:如果集群中已經存在大量數據,則找到無法啟動datanode的服務器進入到data/tmp/dfs/data 目錄下找到VERSION文件刪除后,重新開啟datanode服務

19. 請列出正常工作的Hadoop 集群中Hadoop 都分別需要啟動哪些進程,它們的作用分別是什么? 請盡量列的詳細一些
  namenode:
    負責接受客戶端讀寫數據請求
    負責數據塊副本的存儲策略
    負責管理快數據的映射關系
    儲存元數據信息

  datanode:
    存儲實際的數據塊
    真實處理數據塊的讀/寫操作

  Secondary NameNode:
    輔助后台程序,與NameNode進行通信,定期合並FSimage和Edits編輯日志,合並為最新的鏡像文件。
    保存HDFS元數據的快照。

  resourcemanager:統一資源調度和管理器
    處理客戶端請求
    監控NodeManager
    啟動或監控ApplicationMaster
    資源的分配與調度

  nodemanager:提供計算資源
    管理單個節點上的資源
    處理來自ResourceManager的命令
    處理來自ApplicationMaster的命令


20. 現在為了滿足公司業務需求,在原有hadoop集群的基礎之上要求擴展兩個節點(也可以說擴展兩台服務器),該如何操作?
  1.從現有集群的任意服務器克隆兩台服務器,修改主機名和ip地址
  2.刪除集群hadoop-2.7.2目錄下的data logs目錄
  3.修改/etc/hosts文件,添加本機的主機、ip映射關系
  4.將/etc/hosts分發到其他服務器
  5.配置免密登錄
  6.啟動datanode和nodemanager

21. 公司現有100台服務器組成的集群,由於疫情期間業務驟減,現需要減少10台服務器,如何退役這些節點?有哪幾種方式退役節點?
  本業務場景適合使用黑名單退役節點:
  步驟:
    1.可以在hadoop-2.7.2/etc/hadoop目錄下創建黑名單dfs.hosts.exclude文件
    2.在dfs.hosts.exclude文件中添加要退役的服務器名稱
    3.在hdfs-site.xml文件中添加黑名單那的配置項
      <property>
        <name>dfs.hosts.exclude</name>
        <value>黑名單文件絕對路徑</value>
      </property>
    4.刷新NameNode、刷新ResourceManager
      hdfs dfsadmin -refreshNodes
      yarn rmadmin -refreshNodes

  退役的方式:
    黑名單:在黑名單上面的主機都會被強制退出。
    白名單:添加到白名單的主機節點,都允許訪問NameNode,不在白名單的主機節點,都會被強制退出。
    注意:黑名單和白名單最好不要同時出現,如果同時出現不允許白名單和黑名單中同時出現同一個主機名稱。


22. 刷新namenode的命令是什么? 刷新resourcemanager的命令是什么?
  刷新NameNode、刷新ResourceManager
    hdfs dfsadmin -refreshNodes
    yarn rmadmin -refreshNodes

22. namenode是怎么確定datanode能夠正常工作的?他們之間是怎么保持聯系的?
  1.datanode會先向namdnode注冊,namdnode返回注冊成功;后每一小時datanode向namenode上傳塊信息,每3秒datanode向namenode發送一次心跳包,並攜帶namenode給datanode的命令,默認情況下如果超過10分30秒namenode沒有收到datanode的心跳,則任務datanode掉線

  2.dn和nn是通過心跳包來保持聯系的


23. 簡要描述如何安裝配置apache 的一個開源Hadoop,只描述即可,無需列出具體步驟,列出具體步驟更好?
  1、准備服務器修改ip和主機名(虛擬機需要)、創建用戶和軟件安裝目錄
  2、安裝JDK並配置環境變量(/etc/profile);
  3、關閉防火牆;
  4、配置hosts文件,方便hadoop通過主機名訪問(/etc/hosts);
  5、設置ssh免密碼登錄;
  6、解壓縮hadoop安裝包,並配置環境變量;
  7、修改配置文件hadoop-env.sh、yarn-env.sh、mapred-env.sh、 core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml;
  8、格式化hdfs文件系統(hadoop namenode -format);
  9、啟動hadoop:start-def.sh、start-yarn.sh
  10、使用jps查看進程。

24. 簡述Hadoop 的幾個默認端口及其含義?
  dfs.namenode.http-address:50070
  SecondaryNameNode輔助名稱節點端口號:50090
  fs.defaultFS:9000
  yarn.resourcemanager.webapp.address:8088
  historyserver:19888

25 hadoop集群可以運行的3個模式是什么?
  本地運行模式、偽分布式運行模式、完全分布式運行模式

26  搭建完全分布式集群有哪些注意點?
  完全分布式集群通常被用於生產環境,這里我們使用N台主機組成一個Hadoop集群,
  Hadoop守護進程運行在每台主機之上。這里會存在Namenode運行的主機,Datanode
  運行的主機,以及task tracker運行的主機。在完全分布式環境下,主節點和從節點會分開。

27 通常情況下我們搭建集群時,需要自定義一些參數,需要修改哪些配置文件,列出文件名即可?
  修改配置文件hadoop-env.sh、yarn-env.sh、mapred-env.sh、 core-site.xml hdfs-site.xml mapred-site.xml

28 jps命令的作用?
  jps這個命令是是jdk提供的一個查看當前java進程的小工具,在hadoop中可以用來查看集群相關
服務進程是否正常開啟例如:namenode、datanode、secondarynamenode、resourcemanager、nodemanager等

29 datanode可以設置多目錄存儲數據嗎?怎么實現?
  DataNode也可以配置成多個目錄,並且每個目錄存儲的數據不一樣。
  編輯hdfs-site.xml文件,添加如下配置項,這里塊數據會分布存儲在data1和data2目錄中
    <property>
      <name>dfs.datanode.data.dir</name>
      <value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
    </property>

30 是否可以在Windows上運行Hadoop?
  你最好不要這么做,Red Hat Linux或者是Ubuntu才是Hadoop的最佳操作系統。在Hadoop安裝中,Windows通常不會被使用,
  因為會出現各種各樣的問題。因此,Windows絕對不是Hadoop的推薦系統。

31 hadoop有哪些發行版?
  hadoop三大發行版本:Apache、Cloudera、Hortonworks。
  Apache版本最原始(最基礎)的版本。
  Cloudera在大型互聯網企業中用的較多。
  Hortonworks文檔較好。

32 是否可以在不同集群之間復制文件? 如果是的話,怎么能做到這一點? (新特性)
  采用distcp命令實現兩個Hadoop集群之間的遞歸數據復制
    例如:將集群hadoop102上的文件賦值到hadoop103上
      hadoop distcp  hdfs://haoop102:9000/user/jinghang/hello.txt hdfs://hadoop103:9000/user/jinghang/hello.txt

33 你們公司用的hadoop的哪個版本?運行Hadoop需要什么平台和哪個Java版本?
  hadoop 2.x比較多,因為企業開發追求的是穩定性,也有歷史兼容問題,比如hadoop 3.x需要jdk8以上,但是如果整個方案都是之前的java版本,那么比較保守的辦法就是用原來的。
企業開發的原則就是如果沒有問題,就不用新版的。但是以后的趨勢肯定是3.0會流行,只是一個時間的問題。
如果你是從0開始,沒有包袱,那么用3.0好了,越舊的軟件,維護的成本越大。

  需要Linux操作平台,jdk8及以上版本

34 當兩個用戶嘗試訪問HDFS中的同一文件並修改時會發生什么?
  HDFS上的文件只支持單用戶操做,因此只有第一個用戶能夠操作文件,第二個用戶會被拒絕

35、關於ssh協議中的免登錄,下列理解錯誤的是( D )

 

A. 可以用命令 ssh-keygen -t rsa 生成公鑰、私鑰對

 

B. ssh協議是一種采用的是非對稱加密往往采用rsa加密算法

 

C. 可以用 ssh-copy-id 命令來發送公鑰到別的服務器,實現免密登錄

 

D. ssh的私鑰不是必須保留在服務器上,可以進行分發,可以保證數據的安全性。

36、下列描述錯誤的是( A )

A. Hadoop在完全參照GSF項目的基礎上演變而來

B. Hadoop充分吸收google三大論文的思想

C. Hadoop解決了大數據中海量數據的存儲和海量數據的計算問題

D. Hadoop現目前屬於apache 基金組織,屬於top項目之一

 

37、下面描述正確的是( A )

 

A. NameNode是一個中心服務器(master端),負責管理文件元數據的存儲、以及客戶端對文件的訪問等

 

B. DataNode負責元數據操作,文件內容相關的數據流經過會DataNode.

 

C. 副本存放在哪些DataNode上由NameNode和DataNode協商任意分配

 

D. DataNode全權自主管理數塊的存儲,接受心跳信號和塊狀態報告

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM