1. 程式人生 > >Hadoop以及元件介紹

Hadoop以及元件介紹

一、背景介紹

在接觸過大資料相關專案的時候常常都會聽到Hadoop這個東西,簡單來說,他是一個用分散式計算來處理大資料的開源軟體,下面包含了許多的元件和子專案,這篇文章將會介紹Hadoop的原理以及一些元件的應用。

 

二、準備工作

1、確認儲存規模

有很多的大資料專案其實資料量跟本沒這麼大,跟本不需要到使用Hadoop這類的大資料軟體,所以,第一步應該是先確認資料量有多大,真的MySQL跑的太久再去使用Hadoop就好。

2、確認資料型別

除了結構化資料以外,現在有些大資料專案需要處理的是一些非結構化資料,例如文字、音訊、影象、視訊之類的,針對這些非結構化的資料,需要事先做處理,再用相對應的軟體進行儲存。

3、確認資料來源

資料來源非常重要,首先要先確認資料是否可獲取、可用,例如微信聊天記錄這種的根本就獲取不了,而且會觸犯到隱私。有些資料需要先做持久化再匯入到資料庫內儲存,如何獲取想要的資料有時候不是直接從資料庫裡抓這麼簡單,在獲取資料來源的時候,也需要考慮資料的質量,否則會提高未來使用的難度。

 

三、Hadoop介紹

Hadoop的核心為HDFS(分散式檔案系統)和MapReduce(離線計算框架)。簡單來說,HDFS就是將要儲存的檔案分散在不同的硬碟上,並記錄他們的位置,而MapReduce就是將計算任務分配給多個計算單元,下面針對這兩個核心再做進一步的說明。

HDFS

HDFS已經成為現在大資料的儲存標準,他適合儲存一次寫入,多次讀取的資料,並且他有自動檢錯、快速回複數據的功能,能夠避免資料因為硬碟損壞而丟失的危險。

HDFS是由DataNode和NameNode組成的,DataNode負責儲存資料,而NameNode負責管理資料,一個NameNode對應多個DataNode,NameNode記錄著每個DataNode儲存的資料內容,並曝露給上層系統呼叫,也會根據上層的指令對DataNode進行增、刪、複製。

MapReduce

MapReduce是將計算任務分配給資料就近的處理節點,進行完運算後再合併匯入結果,能很好的去進行大量資料的調取,但是延時較高,不適合處理實時流資料。

MapReduce可以分為Map和Reduce兩個處理步驟。首先Map將使用者輸入的指令解析出一個個的Key/Value,然後再將轉化成一組新的KV值,將原本的任務拆解成小的而且是臨近資料的,並且確保這些運算任務彼此不會影響。而Reduce則是將這些運算的結果彙總起來,將結果寫入。

 

另外YARN和Zookeepr都是用來管理的,YARN是面對計算資源的管理,而Zookeeper是面對伺服器叢集的管理。

YARN:資源管理框架,用來管理和排程CPU、記憶體的資源,避免所有的計算資源被某些任務大量佔用,有點像是雲管理平臺可以創造不同的容器和虛擬機器,並將這些硬體資源按使用者的意願分配給計算任務。

Zookeeper:集用來做群管理,跟微服務裡的功能相似,可以在叢集裡面選出一個leader,並保證叢集裡面伺服器的一致性、可靠性和實時性。

 

四、Hadoop常用元件介紹

1、Hive

Hive是將Hadoop包裝成使用簡單的軟體,使用者可以用比較熟悉的SQL語言來調取資料,也就是說,Hive其實就是將Hadoop包裝成MySQL。Hive適合使用在對實時性要求不高的結構化資料處理。像是每天、每週使用者的登入次數、登入時間統計;每週使用者增長比例之類的BI應用。

2、HBase

HBase是用來儲存和查詢非結構化和半結構化資料的工具,利用row key的方式來訪問資料。HBase適合處理大量的非結構化資料,例如圖片、音訊、視訊等,在訓練機器學習時,可以快速的透過標籤將相對應的資料全部調出。

3、Storm

前面兩個都是用來處理非實時的資料,對於某些講求高實時性(毫秒級)的應用,就需要使用Storm。Storm也是具有容錯和分散式計算的特性,架構為master-slave,可橫向擴充多節點進行處理,每個節點每秒可以處理上百萬條記錄。可用在金融領域的風控上。

4、Impala

Impala和Hive的相似度很高,最大的不同是Impala使用了基於MPP的SQL查詢,實時性比MapReduce好很多,但是無法像Hive一樣可以處理大量的資料。Impala提供了快速輕量查詢的功能,方便開發人員快速的查詢新產生的資料。