Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

[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介紹。


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus