在上一篇([10]用.Net Core跑Hadoop MapReduce - Streaming介紹)透過Hadoop Streaming的幫助,改成用.Net Core 2.0的程式作為MapReduce的邏輯,基本上這個系列裡面的Hadoop介紹也要告一個段落。
這一篇,將會快速回顧到目前為止所了解到關於Hadoop的部分,再來介紹Hadoop Ecosystem,和3個比較常見的package介紹。
溫故知新
先來快速回顧一下到目前為止看了什麼:
- 從Big Data開始介紹,了解到Big Data裡面的3個V - 由於別的技術的可行性提高,Big Data成長也越來越快:鏈接
- 再來介紹了Hadoop的誕生 - 為了因應Big Data而誕生的程式:鏈接
- 在來手動用VM建立了一個pseudo-distributed mode的hadoop:上篇鏈接、下篇鏈接
- 有了一個可運作的hadoop之後,了解了Hadoop的核心:YARN和MapReduce:鏈接
- 接下來把Hadoop的VM複製出來用來建立一個worker - 打造了fully-distributed mode:鏈接
- 最後介紹了MapReduce的程式,先介紹原理,後來介紹如何用.Net Core寫一個:MapReduce原理、Hadoop Streaming執行.Net Core
從目前了解的來看,對於整個Hadoop的核心已經有了基本的概念,馬上浮現的問題是,這樣建立和管理Hadoop不會太麻煩嗎?透過MapReduce寫不同的邏輯太難寫了吧。
相信看完之後會有種感覺,Hadoop感覺很"底層",從應用程度來說太不Friendly(友善),並且要怎麼管理這些Hadoop Cluster?
因此,接下來看看一些在Hadoop上面的Ecosystem和所謂的Hadoop Distribution。
Hadoop Ecosystem
還記得之前提到Hadoop版本的時候介紹了2.0之後其中一個大改變就是加入了YARN。
YARN的加入讓在Hadoop上面開發變得更加的簡單,因此很多Application蓋在了Hadoop的上面,達到利用Hadoop的Cluster運算和HDFS。
下圖是一個Hadoop Ecosystem的幾個重要package,這邊會針對裡面的:
- HIVE - 用類似sql語法執行MapReduce的方式
- HBase - 在HDFS上面的NoSql儲存
- Spark - 另外一種執行工作的模式
HIVE
HIVE一開始是由Facebook開發,後來捐出來變成一個Open Source專案。主要目的是讓懂SQL的人能夠快速上手能從HDFS取資料。
還記得之前提到要寫MapReduce感覺有點麻煩,HIVE其實就是一個使用類似SQL語法的語言,HiveQL來和MapReduce溝通的中間層。
換句話說,用HiveQL語法,HIVE會自動轉成MapReduce從HDFS裡面把資料取出來。
因此,懂SQL就能夠快速上手從HDFS裡面撈出資料。
下面是從Wikipedia截取的WordCount範例,可以看到,基本上會sql基本上看的懂在做什麼,把這個和Java和.Net Core版本做比較,對於會sql的人來說這個簡單多了
DROP TABLE IF EXISTS docs;
CREATE TABLE docs (line STRING);
LOAD DATA INPATH 'input_file' OVERWRITE INTO TABLE docs;
CREATE TABLE word_counts AS
SELECT word, count(1) AS count FROM
(SELECT explode(split(line, '\s')) AS word FROM docs) temp
GROUP BY word
ORDER BY word;
更多資訊,請參考:官網
HBase
聽到Big Data最長聽到的就是No Sql database,也就是不像sql先定義好每個table有什麼欄位的另外一種Database。
HBase就是一個使用HDFS的No Sql Database。
HBase還提供吧資料儲存在Memory達到快速讀取HDFS資料的一個界面,更好的能夠和其他package結合,例如可以用HIVE去撈HBase的資料。
因為HBase速度的關係,有些會把cold data(封存用的資料少存取)放到HDFS裡面,而hot data(長存取的資料)放到HBase裡面。
更多資料請參考:HBase
Spark
基本上Spark是整個ecosystem最夯的部分,因為他解決了Hadoop的一個很致命的問題,過慢問題,官網說在最快的情況可以比Hadoop快100倍。
Spark的基本概念很簡單,以Hadoop來說,每一個階段的執行,都會把結果儲存在HDFS,換句話說很多IO操作。
Spark用了另外一個方式,前面一段output會是後面一段的input - 這個的儲存都是在Memory,換句話說減少了IO量,提升了速度。
更多資料請參考:官網
從Ecosystem的圖可以看到其實還有很多重要的package,而看到這個也會發現Hadoop真的變成了一個很底層的核心。
看到了這麼多package了之後,有個問題會浮現出來,這麼多不同package要自己安裝不是很麻煩嗎?更別說package之間可能還有相容性問題,難道沒有一個一整包包好的服務嗎?還有cluster management怎麼辦?雖然有package做整件事情,但是怎麼整合呢?
這也是所謂的Hadoop Distribution
結語
這篇介紹了整個Hadoop的Ecosystem,並且挑出了3個最夯的:Hive、HBase和Spark。
本來這篇要把整個總結寫完,但是發現篇幅有點長,因此在下一篇在介紹Hadoop Distribution和相關的工作頭銜,Data Engineer介紹。