接著Hadoop周邊生態軟體和簡要工作原理(一)

Sqoop:

sqoop在hadoop生態系統中也是應用率比較高的軟體,主要是用來做ETL工具,由yadoo研發並提交給Apache。Hadoop整個生態圈裡面,大部分的應用都是Yadoo研發的,貢獻非常大。Yahoo裡面出來兩撥人,分別組建了Cloudera和Hortonworks。

所謂ETL,就是資料的抽取(extract)載入(load)轉換(transform)。將一種格式或表現形式的資料,通過程式碼,改變形態,變成另一種格式或表現形式的資料。哪怕是把矩陣裡的排列順序改變,也算是ETL。

Sqoop最主要的特點是可以在很多資料庫和資料格式之間轉換,通過設定引數,可以把oracle,mysql裡面的結構化資料,變成非結構化的儲存到HDFS裡面,也可以把HDFS裡面的資料提取出來儲存到資料庫或者是純文字,很靈活。中間的轉換過程用Hive還是自己的mapreduce,還是用pig,mahout,都不重要。他提供的是到各種系統之間的介面,以命令列引數方式執行。

其實sqoop的實現並不複雜,自己花不了多少時間也可以把sqoop重新實現一下,只要瞭解了他的工作原理,無非就是做好各種資料庫和Hadoop之間的介面即可。我們目前沒有用sqoop,而是自己用python實現了一套類似的東西。

Oozie:

很棒的東西,著名的工作流系統。可以把各種資料流串起來,想象一下街邊的烤串。就像烤板筋,一塊板筋就是一個資料任務,一塊肥肉也是一個資料任務,板筋和肥肉要交錯進行,才能得到最終的可口食物,那麼oozie擔負的就是竹籤子的任務。把資料任務串好,經過一段時間的等待,烤板筋就可以吃了。中間可能還會有各種依賴,比如撒撒鹽,撒撒辣椒,也是在整個工作流裡面去完成的。

一個真正的BI決策很有可能要經過極其複雜的資料流,資料之間的相互依賴也很高。A任務跑完,才可以開始B,C任務,而B,C任務又依賴D任務的資料,然後E任務依賴B,C的資料,得出的結果F又要跟A任務進行比對分析,才最終得到結果G。這就是一個簡單的資料流了,中間如何控制整個資料的流程和產出,就需要oozie來完成。

Mahout:

Mahout可以說是大資料演算法智慧的結晶,他裡面包含了很多機器學習和人工智慧的演算法。有基於map/reduce計算的,也有不基於map/reduce計算的。其演算法數量之多,幾乎可以涵蓋各個主要領域。

不過mahout的演算法庫過於通用,無法適應所有需求,在我們的實際使用過程中,我們很少直接用mahout去做計算,更多的時候是拿mahout作為演算法參考的程式碼庫,然後根據自己的需求做二次重構。比如在網際網路裡使用頻率最高的推薦和分類聚類演算法,都需要自己去重新根據不同的需求去實現,但無論怎樣,即使作為演算法參考,mahout仍然是非常牛逼的東西。只是最近更新的很慢,從2012年釋出了0.7,就沒再更新過了。

Pig:

pig的工作原理類似Hive,早於hive出現,也是由yahoo進行開發的。在hive出現以前,pig在hadoop生態圈裡一直是獨領風騷。後來Hive出現以後就逐漸勢微了。畢竟是一個全新的語言,比起用sql的hive來說,業務幾乎可以無成本遷移。而pig畢竟還是需要一定的學習成本的,但是pig在資料處理上比hive更加靈活,應該來說算是編譯map/reduce應用的先驅者。

不過我還是一直不太會寫pig-latin。最近有一個開源專案,把pig做成了視覺化的東西,非常不錯,叫lipstick,值得一試。

Bookkeeper:

是從zookeeper裡面分離出來的子專案,比較新,還沒怎麼看過。但是看介紹,應該是跟NN的HA有很大的關係。Hadoop的單點一直是比較令人頭疼的地方,各種分散式檔案系統大約都存在這種問題。MooseFS什麼的,也都需要靠heartbeat,DRBD等去階段master的單點問題。HDFS也不例外,於是早先就有人提出用zookeeper來解決NN的溫備,熱備。但是非常複雜,既要防止腦裂,也無法做到近乎實時的熱切換。因為如果把zk的檢查時間設定很短,就會導致壓力增高,而zk的時間設定長了,就無法做到實時熱備。我記得好像要設定在10-20秒左右才可以。bookkeeper應該就是為了解決過於複雜的解決方案而分離出來的子專案。

bigtop:

之前的文章裡介紹過了。