圖片來源: https://pixabay.com/en/books-spine-colors-pastel-1099067/ 和 https://pixabay.com/en/math-blackboard-education-classroom-1547018/
在上一篇([10]用.Net Core跑Hadoop MapReduce - Streaming介紹)透過Hadoop Streaming的幫助,改成用.Net Core 2.0的程式作為MapReduce的邏輯,基本上這個系列裡面的Hadoop介紹也要告一個段落。
這一篇,將會快速回顧到目前為止所了解到關於Hadoop的部分,再來介紹dHadoop Ecosystem,和3個比較常見的package介紹。
同步發表於我的部落格:http://blog.alantsai.net/2017/12/data-science-series-11-hadoop-conclustion-ecosystem-intro.html (部落格的格式會漂亮一些,ithome不支援html好不方便)
先來快速回顧一下到目前為止看了什麼:
從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給我的感覺就像程式開發裡面的Assembly,速度快,但是不好寫,因此會使用High Level Language像C#。
因此,接下來看看一些在Hadoop上面的Ecosystem和所謂的Hadoop Distribution。
還記得之前提到Hadoop版本的時候介紹了2.0之後其中一個大改變就是加入了YARN。
YARN的加入讓在Hadoop上面開發變得更加的簡單,因此很多Application蓋在了Hadoop的上面,達到利用Hadoop的Cluster運算和HDFS。
下圖是一個Hadoop Ecosystem的幾個重要package,這邊會針對裡面的:
HIVE - 用類似sql語法執行MapReduce的方式
HBase - 在HDFS上面的NoSql儲存
Spark - 另外一種執行工作的模式
多做一些簡單介紹
Hadoop Ecosystem,來源:http://www.dotnettricks.com/learn/hadoop/apache-hadoop-ecosystem-and-components
Hive Logo
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 logo
聽到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可以不架在YARN上面,只需要HDFS即可。
更多資料請參考:HBase
spark logo
基本上Spark是整個ecosystem最夯的部分,因為他解決了Hadoop的一個很致命的問題,過慢問題,官網說在最快的情況可以比Hadoop快100倍。
Spark的基本概念很簡單,以Hadoop來說,每一個階段的執行,都會把結果儲存在HDFS,換句話說很多IO操作。
Spark用了另外一個方式,前面一段output會是後面一段的input - 這個的儲存都是在Memory,換句話說減少了IO量,提升了速度。
或許會說,不是都cluster了嗎,怎麼還會慢?這邊的慢指的是相對來說。要記得,這邊處理都是ZB等級的資料,真的跑下去還是很花時間。
更多資料請參考:官網
從Ecosystem的圖可以看到其實還有很多重要的package,而看到這個也會發現Hadoop真的變成了一個很底層的核心。
看到了這麼多package了之後,有個問題會浮現出來,這麼多不同package要自己安裝不是很麻煩嗎?更別說package之間可能還有相容性問題,難道沒有一個一整包包好的服務嗎?還有cluster management怎麼辦?雖然有package做整件事情,但是怎麼整合呢?
這也是所謂的Hadoop Distribution
這篇介紹了整個Hadoop的Ecosystem,並且挑出了3個最夯的:Hive、HBase和Spark。
工商服務
今年的團隊機制不知不覺就集合了10位隊(坑)友 - 大家幫忙多多關注別不小心我們就gg了 XD
** 一群技術愛好者與一名物理治療師的故事 提醒著我們 千萬不要放棄治療 **
沉浸於.Net世界的後端工程師,樂於分享,現任台中Study4成員之一。除了程式以外,就愛看小說。
歡迎有任何問題或者建議都可以告訴我,可以再以下找到我:
部落格:Alan Tsai的學習筆記
我的Linkedin
我的粉絲頁
我的github
我的Slideshare
我的Twitter