1. 程式人生 > >若澤資料-早課(2018/6/4)

若澤資料-早課(2018/6/4)

1、hdfs架構是什麼架構?

    hdfs架構為主/從架構,管理者Namenode和工作者Datanode。

2、hdfs哪些程序?

    總共有三個程序:Namenode、Datanode和Secondarynamenode

3、hdfs dfs等價與什麼命令?

    hdsf dfs等價於hadoop fs

4、hdfs的NN節點是做什麼的?

    管理檔案系統的名稱空間。維護著檔案系統書以及整棵樹內所有的檔案和目錄

5、DN是做什麼的?

    負責資料塊和資料塊校驗和

6、SNN是做什麼的?

    定期合併fsimage+editlog檔案為新的fsimage,推送給namenode,俗稱檢查點動作,checkpoint

7、副本放置策略是什麼?

    第一副本放置在上傳檔案的Datanode節點上,第二副本放在不同機架上,第三副本放在第二副本相同機架但不同的節點處。如果還有更多副本,則隨機放在其他節點上

8、hdfs讀和寫的流程是什麼?誰是output,誰是input?

    hdfs讀是input,寫是output

    檔案讀流程:

  1. Client通過FileSystem.open(filepath)方法,去與Namenode進行通訊,返回該檔案的部分或全部block列表(也包含該列表各block的分佈在Datanode地址的列表),也就是返回FSDataInputStream物件;
  2. Client呼叫FSDataInputStream物件的read()方法:a.去與第一個塊最近的Datanode進行read(),讀取完成後,會check,加入則successful,會關閉與當前Datanode通訊;(假如check fail,會記錄失敗的塊和Datanode資訊,下次就不會讀取;那麼回去該塊的第二個Datanode地址讀取) b.然後去第二個塊的最近的Datanode上進行讀取,check後,關閉此Datanode的通訊;c.假如block列表讀取完了,檔案還未結束,那麼FileSystem會從Namenode獲取下一批的block的列表。(讀操作對於Client端是透明的,感覺就是連續的資料流)
  3. Client呼叫FSDataInputStream.close()方法,關閉輸入流。

    檔案寫流程:

  1. Client呼叫FileSystem.create(filepath)方法,去與Namenode進行rpc通訊,check該路徑的檔案是否存在以及有沒有許可權建立該檔案,假如可以,就建立一個空的新檔案,但是並不關聯任何block,返回一個FSDataOutputStream物件;(假如不可以建立,就返回錯誤資訊,一般程式碼要帶有try-catch去捕捉異常)
  2. Client呼叫FSDataOutputStream物件的writer()方法,會將第一個快寫入第一個Datanode,第一個Datanode寫完傳給第二個節點,第二個寫完傳給第三個節點,當第三個節點寫完返回一個ack packet給第二個節點,第二個返回一個ack packet給第一個節點,第一個節點返回ack packet給FSDataOutputStream物件,表示第一個塊寫完,副本數為3;
  3. 剩餘的塊依次寫;
  4. 當檔案寫入資料完成後,Client呼叫FSDataOutputStream.close()方法,關閉輸入流,flush快取區的資料包;
  5. 在呼叫FileSystem.complete()方法,告訴Namenode節點寫入成功。

9、來談談jps的理解?

    jps用來顯示jvm程序,一般hadoop的元件程序都是java程序。jps顯示的內容是讀取/tmp資料夾下hsperfdata開頭的資料夾,裡面有程序和程序對應的pid資訊。

10、來談談pid的理解?

    pid的檔案也是儲存在/tmp目錄下,linux檔案的/tmp目錄是預設一個月刪除一次的,所以如果做長期測試,那麼要麼修改Linux系統要麼修改軟體預設pid快取地址,一般選擇後者。對於hadoop叢集來說,刪除了pid檔案,雖然說對現有的執行沒有影響,但是當停止的時候,可能會出現程序殘留等情況,下次啟動時可能啟動不了,不利於叢集維護。