mclee 寫:
謝謝jazz
我試了hadoop fs -setrep指令,但我想這應該不是我要的。
目前還在努力找尋相關的程式碼中。
謝謝
mclee
從 HDFS 的角色來看,要強迫寫入特定位置,應該從 NameNode 下手。
情境有二:
(1) hadoop fs -put 時,強迫寫入特定 DataNode,DFSClient 必須跟 NameNode 說想寫入哪台,NameNode 必須多一個 method 讓 DFSClient 呼叫。所以要改 DFSClient 跟 NameNode 才行。
(2) hadoop fs -setrep ,副本數由小變大時:順序類似上述情境,進入點不同罷了。
就我研究過 FsShell.java (hadoop fs) 呼叫 -put 時,而且是用 HDFS 的設定,會呼叫 org.apache.hadoop.hdfs.DistributedFileSystem 的 copyFromLocalFile 函數。
參考:
http://trac.3du.me/cloud/wiki/III140412/Lab10也許可以重新定義(overwrite)一個新的 copyFromLocalFile 函數,吃第五個參數是 DataNode 的 IP。
我不確定您做實驗的情境為何,不過如果將副本數由 1 提升到 2,由 2 提升到 3,在相同的節點數情形下,
同一個排程器挑到 Data Locality 的機率應該會變高才對。
- Jazz