初識hadoop
之前在學校的時候一直就想學習大資料方面的技術,包括hadoop和機器學習啊什麼的,但是歸根結底就是因為自己太懶了,導致沒有堅持多長時間,加上一直為offer做準備,所以當時重心放在c++上面了(雖然c++也沒怎麼學),計畫在大四下有空餘時間再來慢慢學習。現在實習了,需要這方面的知識,這對於我來說,除去校招時候投遞c++職位有少許影響之外,無疑是有很多的好處。
所以,接下來的很長日子,我學習c++之外的很多時間都必須要花在大資料上面了。
那麼首先呢,先來認識一下這處理大資料的hadoop工具了。
大資料(big data
),是指無法在可承受的時間範圍內用常規軟體工具進行捕捉、管理和處理的資料集合。
大資料的4v
特點:volume
(大量)、
velocity
(高速)、
variety
(多樣)、
value
(價值)。
大資料的價值體現在以下幾個方面:1)
對大量消費者提供產品或服務的企業可以利用大資料進行精準營銷
;2)
做小而美模式的中長尾企業可以利用大資料做服務轉型
;3)
面臨網際網路壓力之下必須轉型的傳統企業需要與時俱進充分利用大資料的價值。
hadoop是乙個由apache
**會所開發的分布式系統基礎架構。使用者可以在不了解分布式底層細節的情況下,開發分布式程式,充分利用集群的威力進行高速運算和儲存。
hadoop的框架最核心的設計就是:
hdfs
和mapreduce
。hdfs
為海量的資料提供了儲存,則
mapreduce
為海量的資料提供了處理和計算。
hadoop 由許多元素構成。其最底部是
hadoop distributed file system
(hdfs
),它儲存
hadoop
集群中所有儲存節點上的檔案。
hdfs
的上一層是mapreduce 引擎,該引擎由
jobtrackers
和 tasktrackers
組成。通過對
hadoop
分布式計算平台最核心的分布式檔案系統
hdfs
、mapreduce
處理過程,以及資料倉儲工具
hive
和分布式資料庫
hbase
的介紹,基本涵蓋了
hadoop
分布式平台的所有技術核心。
hdfs
對外部客戶機而言,hdfs就像乙個傳統的分級檔案系統。它的主要目的是支援以流的形式訪問寫入的大型檔案(pb級別)。可以建立、刪除、移動或重新命名檔案,等等。儲存在 hdfs
中的檔案被分成塊,塊的大小(通常為
64mb
)和複製的塊數量在建立檔案時由客戶機決定。但是 hdfs
的架構是基於一組特定的節點構建的,這是由它自身的特點決定的。這些節點包括namenode(僅乙個)和datanode。
namenode在 hdfs
內部提供元資料服務,它負責管理檔案系統命名空間和控制外部客戶機的訪問。namenode
決定是否將檔案對映到
datanode
上的複製塊上。namenode 在乙個稱為
fsimage
的檔案中儲存所有關於檔案系統命名空間的資訊。這個檔案和乙個包含所有事務的記錄檔案(這裡是 editlog
)將儲存在
namenode
的本地檔案系統上。
fsimage
和 editlog
檔案也需要複製副本,以防檔案損壞或
namenode
系統丟失。
datanode為
hdfs
提供儲存塊, 通常以機架的形式組織,機架通過乙個交換機將所有系統連線起來。datanode 響應來自
hdfs
客戶機的讀寫請求。它們還響應來自
namenode
的建立、刪除和複製塊的命令。
namenode
依賴來自每個
datanode
的定期心跳(
heartbeat
)訊息。每條訊息都包含乙個塊報告,
namenode
可以根據這個報告驗證塊對映和其他檔案系統元資料。如果
datanode
不能傳送心跳訊息,
namenode
將採取修復措施,重新複製在該節點上丟失的塊。
mapreduce
最簡單的 mapreduce應用程式至少包含 3
個部分:乙個
map 函式、乙個 reduce
函式和乙個
main
函式。main
函式將作業控制和檔案輸入/
輸出結合起來。在這點上,
hadoop
提供了大量的介面和抽象類,從而為 hadoop應用程式開發人員提供許多任務具,可用於除錯和效能度量等。
mapreduce 本身就是用於並行處理大資料集的軟體框架。mapreduce
的根源是函式型程式設計中的 map
和 reduce
函式。它由兩個可能包含有許多例項(許多
map
和 reduce
)的操作組成。
map
函式接受一組資料並將其轉換為乙個鍵
/值對(key-value)列表,輸入域中的每個元素對應乙個鍵/
值對。reduce
函式接受
map
函式生成的列表,然後根據它們的鍵縮小鍵
/值對列表(即鍵相同的鍵/值對合併在一起形成乙個列表形式)。
乙個代表客戶機在單個主系統上啟動的 mapreduce應用程式稱為 jobtracker
。類似於
namenode
,它是
hadoop
集群中惟一負責控制
mapreduce應用程式的系統。在應用程式提交之後,將提供包含在 hdfs
中的輸入和輸出目錄。
jobtracker
使用檔案塊資訊(物理量和位置)確定如何建立其他
tasktracker
從屬任務。
mapreduce應用程式被複製到每個出現輸入檔案塊的節點。將為特定節點上的每個檔案塊建立乙個惟一的從屬任務。每個 tasktracker
將狀態和完成資訊報告給
jobtracker
。hadoop是乙個能夠對大量資料進行分布式處理的軟體框架。 hadoop
以一種可靠、高效、可伸縮的方式進行資料處理。
hadoop 是可靠的,因為它假設計算元素和儲存會失敗,因此它維護多個工作資料副本,確保能夠針對失敗的節點重新分布處理。
hadoop 是高效的,因為它以並行的方式工作,通過並行處理加快處理速度。
hadoop 還是可伸縮的,能夠處理 pb 級資料。
總結如下:
高可靠性。hadoop
按位儲存和處理資料的能力值得人們信賴。
高擴充套件性。hadoop
是在可用的計算機集簇間分配資料並完成計算任務的,這些集簇可以方便地擴充套件到數以千計的節點中。
高效性。hadoop
能夠在節點之間動態地移動資料,並保證各個節點的動態平衡,因此處理速度非常快。
高容錯性。hadoop
能夠自動儲存資料的多個副本,並且能夠自動將失敗的任務重新分配。
低成本。與一體機、商用資料倉儲以及qlikview
、yonghong z-suite
等資料集市相比,
hadoop
是開源的,專案的軟體成本因此會大大降低。
細細品味C Socket程式設計專題
什麼是socket?所謂socket通常也稱作 套接字 應用程式通常通過 套接字 向網路發出請求或者應答網路請求。socket用於在兩個基於tcp ip協議的應用程式之間相互通訊。最早出現在unix系統中,是unix系統主要的資訊傳遞方式。在windows系統中,socket稱為winsock。兩個...
細細品味PHP程式的演算法
在一般的應用中,php的程式設計師會比較少的注意到php程式的細微演算法對效能影響的問題,但在處理一些比較占用資源的東西的時候,適當調整演算法,會讓程式的效能整倍的提高。這幾天,我在研究分詞的演算法,如果不預先載入詞典的話,那種運算速度簡直慘不忍睹,因此我考慮了預先載入詞典在乙個陣列中的做法,我手上...
細細品味PHP程式的演算法
2008 06 08 18 23 在一般的應用中,php的程式設計師會比較少的注意到php程式的細微演算法對效能影響的問題,但在處理一些比較占用資源的東西的時候,適當調整演算法,會讓程式的效能整倍的提高。這幾天,我在研究分詞的演算法,如果不預先載入詞典的話,那種運算速度簡直慘不忍睹,因此我考慮了預先...