1. 程式人生 > >hadoop學習筆記-持續更新

hadoop學習筆記-持續更新

hadoop學習    
25
cyg_server 使用者名稱
net start Sshd 開啟ssh服務
ssh localhost 連線本機

快速切換到bin目錄:cd /cygdrive/d/軟體和資料/hadoop/hadoop-0.18.2/bin
開啟hadoop服務:./start-all.sh
Hadoop是一個開源的框架,利用叢集的威力高速運算和儲存,可編寫和執行分散式應用處理大規模資料,是專為離線和大規模資料分析而設計的。
hadoop中的四大框架:hdfs、mapreduce、hive、hbase
Hadoop=HDFS(分散式資料儲存)+Mapreduce(分散式資料計算),Hadoop的資料來源可以是任何形式,在處理半結構化和非結構化資料上與關係型資料庫相比有更好的效能,具有更靈活的處理能力,不管任何資料形式最終會轉化為key/value,key/value是基本資料單元。用函式式變成Mapreduce代替SQL,SQL是查詢語句,而Mapreduce則是使用指令碼和程式碼,而對於適用於關係型資料庫,習慣SQL的Hadoop有開源工具hive代替。
hive能進行日誌分析

一個HDFS叢集由一個Namenode和一定數目的Datanodes組成。
Namenode:是一箇中心伺服器,負責檔案系統的名稱空間和客戶端對檔案的訪問,能執行檔案或目錄的開啟,關閉,重新命名,也負責確定資料快到具體的Datanodes節點的對映。

Secondnamenode:用來儲存對HDFS資訊的備份,並減少namenode重啟的時間。

Datanode:叢集中一般是一個節點一個,負責他所在節點的儲存。
Jobtracker:是MapReduce框架中的只要類,所有的job都需要它來排程,負責排程job的子任務task運行於slaver上面且監控如果發現失敗的task則重新執行,slaver 則負責直接執行每一個task,而且hadoop中只配置一個Jobtracker應用。

Tasktracher:都需要執行在DataNode上,而JobTracker則不需要,一般情況應該把Jobtracker部署在單獨的機器上。

master:提供Namenode,Secondnamenode,Jobtracker服務。
slaver:提供Datanode,Tasktracher服務。

通常是一個master服務Jobtracker和多個slaver服務Tasktracher提供服務排程。
叢集裡的一臺機器被指定為NameNode,另一臺不同的機器被指定為JobTracker。這些機器是masters。餘下的機器即作為DataNode也作為TaskTracker。這些機器是slaves
hadoop的優點:
1.擴容能力強:能儲存和處理千兆位元組資料
2.成本低:可以通過普通機器組成的伺服器群來分發以及處理資料,這些服務叢集總計可達到數千個節點。
3.高效率:通過分發資料,hadoop可以再資料所在的節點上並行的處理他們,處理非常快速。
4.可靠性:hadoop能自動的維護資料的多份複製,並且在任務失敗後能自動的重新部署計算任務。

經驗總結:
1>master和slave上的幾個conf配置檔案不需要全部同步,如果確定都是通過master去啟動和關閉,那麼slave機器上的配置不需要去維護,但是如果希望在任意一臺機器上都可以啟動和關閉hadoop,那麼就需要全部保持一致了

2>master和slave機器上的/etc/hosts中必須把叢集中機器都配置上去,就算在各個配置檔案中使用的是ip,原來以為如果配成ip就不需要去配置host,結果發現在執行reduce的時候總是卡住,在拷貝的時候就無法繼續下去,不斷充實,另外如果叢集中如果有兩臺機器的機器名如果重複也會出現問題

3>如果在新增了節點或者刪除節點的時候出現了問題,首先就去刪除slave的hadoop.tmp.dir,然後重新啟動試試看,如果還是不行那就乾脆把master的hadoop.tmp.dir刪除,意味著dfs上的資料也會丟失,如果刪除了master的hadoop.tmp.dir,那麼就需要重新namenode -format

4>map任務個數以及reduce任務個數配置,前面分散式系統設計提到一個檔案放入到分散式檔案系統中,會被分割成多個blick放置到每一個datanode上,預設dfs.block.size應該是64M,也就是說如果你放置到HDFS上的資料小於64,那麼將只有一個block,此時會被放置到某一個datanode中,這個可以通過使用命令:hadoop dfsadmin -report 就可以看到各個節點儲存的情況,也可以直接去某一個datanode檢視目錄:hadoop.tmp.dir/dfs/data/current 就可以看到哪些block了,block的數量將直接影響到map的個數,當然可以通過配置設定map和reduce的任務個數,map的個數通常預設和HDFS需要處理的blocks相同,也可以通過配置map的數量或者配置minimum split size來設定,實際的個數為:max(min(block_size,data/#maps),min_split_size).