windows下配置hadoop
- hadoop 安裝包解壓,路徑不要有特殊字元
- lib和bin直接解壓出來的不可用,需要自己重新編譯
- 配置環境變量:HADOOP_HOME,path中添加:bin目錄
namenode
- 整個檔案系統的管理節點。它維護着整個檔案系統的檔案目錄樹,檔案/目錄的元資訊和每個檔案對應的資料塊清單。接收使用者的操作請求。
響應用戶端的請求,上傳檔案:
- client申請上傳檔案,namenode檢視中繼資料資訊,檢視用戶端申請的路徑是否已存在
- namenode傳回可用的datanode
- client直接通路第一個datanode,上傳第一個block,datanode向namenode報告block資訊,第一個block建立一個pipeline,向其他datanode拷貝block副本,鍊式向下傳遞副本,達到配置的副本數。
namenode寫中繼資料
- 記憶體中:meta.data
- 磁盤:fsimage、edits log
- 先修改edits
-
同步到meta.data
fsimage結構:
- 檔案名,副本數,blockid,block存儲的機器
- NameNode(FileName, replicas, block-ids,id2host…)
-
/test/a.log, 3 ,{blk_1,blk_2},
[{blk_1:[h0,h1,h3]},{blk_2:[h0,h2,h4]}]
secondary namenode 同步修改fsimage
- 通知namendoe切換edits,不再使用之前的edits檔案
- secondary namenode從namenode下載下傳edits和fsimage檔案
- secondary namenode将他們加載到記憶體,進行合并,産生新的fsimage.chkpoint
- 将新的fsimage檔案回傳到namenode
- namenode用新的fsimage替換舊的fsimage
checkpoint
- fs.checkpoint.period 指定兩次checkpoint的最大時間間隔,預設3600秒。
-
fs.checkpoint.size
規定edits檔案的最大值,一旦超過這個值則強制checkpoint,不管是否到達最大時間間隔。預設大小是64M。
節點間通信:
- 遠端方法調用rpc
- 大資料量的傳輸
FileSystem擷取過程
- FileSystem.get(new URI(HDFS_PATH), new Configuration());//擷取檔案對象
- CACHE.get(uri, conf)//從緩存Map中擷取
- fs = createFileSystem(uri, conf);//建立新的fs
- clazz = getFileSystemClass(uri.getScheme(), conf);//擷取fs類
- ReflectionUtils.newInstance(clazz, conf)//執行個體化fs
- fs.initialize(uri, conf);//初始化fs參數
- dfs = new DFSClient(uri, conf, statistics)//擷取dfs用戶端
-
proxyInfo =
NameNodeProxies.createProxyWithLossyRetryHandler(conf,nameNodeUri,
ClientProtocol.class, numResponseToDrop)//通過RPC擷取和NN通信的用戶端代理對象
- this.namenode = proxyInfo.getProxy()//獲得namenode代理對象
fs持有DistributedFileSystem dfs,dfs中持有DFSClinet dfsc對象,dfsc中持有namenode代理對象