2017年12月30日 星期六

[Data Science 到底是什麼從一個完全外行角度來看][11]Hadoop總結(上篇)–Ecosystem介紹

image
圖片來源: 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的部分,再來介紹Hadoop Ecosystem,和3個比較常見的package介紹。

溫故知新

先來快速回顧一下到目前為止看了什麼:

  1. 從Big Data開始介紹,了解到Big Data裡面的3個V - 由於別的技術的可行性提高,Big Data成長也越來越快:鏈接
  2. 再來介紹了Hadoop的誕生 - 為了因應Big Data而誕生的程式:鏈接
  3. 在來手動用VM建立了一個pseudo-distributed mode的hadoop:上篇鏈接下篇鏈接
  4. 有了一個可運作的hadoop之後,了解了Hadoop的核心:YARN和MapReduce:鏈接
  5. 接下來把Hadoop的VM複製出來用來建立一個worker - 打造了fully-distributed mode:鏈接
  6. 最後介紹了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 Ecosystem

還記得之前提到Hadoop版本的時候介紹了2.0之後其中一個大改變就是加入了YARN。

YARN的加入讓在Hadoop上面開發變得更加的簡單,因此很多Application蓋在了Hadoop的上面,達到利用Hadoop的Cluster運算和HDFS。

下圖是一個Hadoop Ecosystem的幾個重要package,這邊會針對裡面的:

  • HIVE - 用類似sql語法執行MapReduce的方式
  • HBase - 在HDFS上面的NoSql儲存
  • Spark - 另外一種執行工作的模式
多做一些簡單介紹
imageHadoop Ecosystem,來源:http://www.dotnettricks.com/learn/hadoop/apache-hadoop-ecosystem-and-components

HIVE

image
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

image
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

image
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。

本來這篇要把整個總結寫完,但是發現篇幅有點長,因此在下一篇在介紹Hadoop Distribution和相關的工作頭銜,Data Engineer介紹。


沒有留言 :

張貼留言