十八款Hadoop工具幫你馴服大數據

Hadoop已經經過自身的蓬勃發展證實,它不只僅是一套用於將工做內容傳播到計算機羣組當中的小型堆棧--不,這與它的潛能相比簡直微不足道。這 套核心的價值已經被普遍證明,目前大量項目如雨後春筍般圍繞它創建起來。有些項目負責數據管理、有些負責流程監控、還有一些則提供先進的數據存儲機制。git

Hadoop業界正在迅速發展,從業企業拿出的解決方案也多種多樣,其中包括提供技術支持、在託管集羣中提供按時租用服務、爲這套開源核心開發先進的功能強化或者將自有工具添加到方案組合當中。程序員

在今天的文章中,咱們將一同瞭解當下Hadoop生態系統當中那些最爲突出的傑做。整體而言,這是一套由衆多工具及代碼構成的堅實基礎、共同彙集在"Hadoop"這面象徵着但願的大旗之下。github

  

Hadoop

雖然不少人會把映射與規約工具廣義化稱爲Hadoop,但從客觀角度講、其實只有一小部分核心代碼算是真正的Hadoop。多個工做節點負責對保存 在本地的數據進行功能執行,而基於Java的代碼則對其加以同步。這些工做節點獲得的結果隨後通過彙總並整理爲報告。第一個步驟被稱爲"映射(即 map)",而第二步驟則被稱爲"規約(reduce)"。算法

Hadoop爲本地數據存儲與同步系統提供一套簡化抽象機制,從而保證程序員可以將注意力集中在編寫代碼以實現數據分析工做上,其它工做交給 Hadoop處理便可。Hadoop會將任務加以拆分並設計執行規程。錯誤或者故障在乎料之中,Hadoop的設計初衷就在於適應由單獨設備所引起的錯 誤。數據庫

項目代碼遵循Apache許可機制。apache

官方網站:hadoop.apache.org緩存

 

Ambari


Hadoop集羣的創建須要涉及大量重複性工做。Ambari提供一套基於Web的圖形用戶界面並配備引導腳本,可以利用大部分標準化組件實現集羣 設置。在你們採納Ambari並將其付諸運行以後,它將幫助各位完成配置、管理以及監管等重要的Hadoop集羣相關任務。上圖顯示的就是集羣啓動後 Ambari所顯示的信息屏幕。數據結構

Ambari屬於Apache旗下的衍生項目,並由Hortonworks公司負責提供支持。框架

下載地址:http://incubator.apache.org/ambari/分佈式

  

HDFS (即Hadoop分佈式文件系統)

Hadoop分佈式文件系統提供一套基礎框架,專門用於拆分收集自不一樣節點之間的數據,並利用複製手段在節點故障時實現數據恢復。大型文件會被拆分 成數據塊,而多個節點可以保留來自同一個文件的全部數據塊。上圖來自Apache公佈的說明文檔,旨在展現數據塊如何分佈至各個節點當中。

這套文件系統的設計目的在於同時實現高容錯性與高數據吞吐能力的結合。加載數據塊可以保持穩定的信息流通,而低頻率緩存處理則將延遲降至最小。默認模式假設的是須要處理大量本地存儲數據的長時間做業,這也吻合該項目所提出的"計算能力遷移比數據遷移成本更低"的座右銘。

HDFS一樣遵循Apache許可。

官方網站:hadoop.apache.org

 

HBase


當數據被彙總成一套規模龐大的列表時,HBase將負責對其進行保存、搜索並自動在不一樣節點之間共享該列表,從而保證MapReduce做業可以以本地方式運行。即便列表中容納的數據行數量高達數十億,該做業的本地版本仍然可以對其進行查詢。

該代碼並不能提供其它全功能數據庫所遵循的ACID保證,但它仍然爲咱們帶來一部分關於本地變動的承諾。全部衍生版本的命運也都維繫在一塊兒--要麼共同成功、要麼一塊兒失敗。

這套系統一般被與谷歌的BigTable相提並論,上圖所示爲來自HareDB(一套專爲HBase打造的圖形用戶界面客戶端)的截圖。

官方網站:hbase.apache.org

Hive

將數據導入集羣還只是大數據分析的第一步。接下來咱們須要提取HBase中來自文件的全部數據內容,而Hive的設計初衷在於規範這一提取流程。它 提供一套SQL類語言,用於深刻發掘文件內容並提取出代碼所須要的數據片斷。這樣一來,全部結果數據就將具有標準化格式,而Hive則將其轉化爲可直接用 於查詢的存儲內容。

上圖所示爲Hive代碼,這部分代碼的做用在於建立一套列表、向其中添加數據並選擇信息。

Hive由Apache項目負責發行。

官方網站:hive.apache.org

Sqoop

要將蘊藏在SQL數據庫中的數據寶庫發掘出來並交給Hadoop打理須要進行一系列調整與操做。Sqoop負責將飽含信息的大型列表從傳統數據庫中移動到Hive或者HBase等工具的控制之下。

Sqoop是一款命令行工具,可以控制列表與數據存儲層之間的映射關係,並將列表轉化爲可爲HDFS、HBase或者Hive所接納的可配置組合。上圖所示爲Apache文檔材料中的內容,能夠看到Sqoop位於傳統庫與節點上的Hadoop結構之間。

Sqoop的最新穩定版本爲1.4.4,但目前其2.0版本一樣進展順利。兩個版本目前均可供下載,且遵循Apache許可。

官方網站:sqoop.apache.org

Pig

一旦數據以Hadoop可以識別的方式被保存在節點當中,有趣的分析工做將由此展開。Apache的Pig會用本身的小"豬拱"梳理數據,運行利用 自有語言(名爲Pig Latin)所編寫的代碼,並添加處理數據所須要的各類抽象機制。這樣的結構會一步步指引用戶走向那些易於以並行方式運行在整個集羣當中的算法。

Pig還擁有一系列針對常見任務的標準化功能,可以輕鬆處理諸如數據平均值計算、日期處理或者字符串差別比較等工做。若是這些還不夠用--實際上一 般都不夠用--你們還能夠動手編寫屬於本身的功能。上圖所示爲Apache說明文檔中的一項實例,解釋了用戶如何將本身的代碼與Pig代碼結合起來、從而 實現數據發掘。

目前Pig的最新版本爲0.12.0。

官方網站:pig.apache.org

ZooKeeper

一旦Hadoop須要在大量設備之上,集羣運做的順序就顯得很是重要,特別是在其中某些設備開始簽出的狀況下。

ZooKeeper在集羣中強制執行一套文件系統式的層級結構,併爲設備保存全部元數據,這樣咱們就能夠在不一樣設備之間進行做業同步。(上圖所示爲 一套簡單的二層式集羣。)說明文檔展現瞭如何在數據處理流程中實施多種標準化技術,例如生產方-消費方隊列,從而保證數據可以以正確的順序進行拆分、清 理、篩選以及分類。當上述過程結束後,使用ZooKeeper的節點會彼此通訊、並以最終生成的數據爲起點開始分析工做。

若是你們但願瞭解更多信息、說明文檔以及最新版本,請訪問ZooKeeper的官方網站。

官方網站:zookeeper.apache.org

 

NoSQL

並非全部Hadoop集羣都會使用HBase或者HDFS。某些集成了NoSQL的數據存儲體系會採起本身的獨特機制實現跨集羣各節點的數據存儲 任務。在這種狀況下,此類體系可以利用NoSQL數據庫的所有功能對數據進行存儲與檢索,然後利用Hadoop規劃同一集羣當中的數據分析做業。

此類方案中最爲常見的當數Cassandra、Riak或者MongoDB,而用戶則在積極探索將這兩種技術加以結合的最佳方式。做爲 MongoDB的主要支持廠商之一,10Gen公司建議用戶利用Hadoop進行離線分析,而MongoDB同時仍然可以以實時方式統計來自Web的數 據。上圖所示爲鏈接器如何實現兩套體系之間的數據遷移。

Mahout

目前可以幫助咱們進行數據分析、分類以及篩選的算法多種多樣,而Mahout項目的設計目的正是爲了將這些算法引入Hadoop集羣當中。大多數標 準化算法,例如K-Means、Dirichelet、並行模式以及貝葉斯分類等,都可以讓咱們的數據同Hadoop類型的映射與規約機制進行協做。

上圖所示爲一套篷聚類集羣化算法,它選擇點與半徑來構成圓圈、從而覆蓋整個點集合中的對應部分。這只是衆多Hadoop內置數據分析工具之一。

Mahout從屬於Apache項目並遵循Apache許可。

官方網站:mahout.apache.org

Lucene/Solr

這是目前唯一的一款用於檢索非結構化文本大型塊的工具,它同時也是Hadoop的天生合做夥伴。因爲利用Java編寫,Lucene可以輕鬆與 Hadoop展開協做,共同建立出一套用於分佈式文本管理的大型工具。Lucene負責處理檢查任務、Hadoop則負責將查詢分佈到整個集羣當中。

新的Lucene-Hadoop功能正迅速發展成爲全新項目。以Katta爲例,做爲Lucene的衍生版本,它能自動對整個集羣進行解析。 Solr則提供集成度更高的動態集羣化解決方案,可以解析XML等標準化文件格式。上圖所示爲Luke,一款用於Lucene瀏覽的圖形用戶界面。它如今 還提供插件、用於對Hadoop集羣進行瀏覽檢索。

Lucene及其多個衍生版本都屬於Apache項目的組成部分。

官方網站:www.apache.org

Avro

當Hadoop做業須要進行數據共享時,咱們徹底可使用任何一種數據庫加以實現。但Avro是一套序列化系統,可以利用必定模式將數據整理起來並 加以理解。每個數據包都附帶一種JSON數據結構,用於解釋數據的具體解析方式。這種數據頭會指定數據結構,從而避免咱們在數據中編寫額外的標籤來對字 段進行標記。如此一來,當共享數據較爲規律時,其體積將比傳統格式(例如XML或者JSON)更爲緊湊。

上圖所示爲針對某個文件的Avro處理模式,其中分爲三種不一樣字段:姓名、最喜歡的數字與最喜歡的顏色。

Avro一樣屬於Apache項目的組成部分,其代碼擁有Java、C++以及Python等多個語言版本。

官方網站:avro.apache.org

Oozie

將一項做業拆分紅多個步驟可以讓工做變得更爲簡單。若是你們將本身的項目拆分紅數個Hadoop做業,那麼Oozie可以以正確的順序將其組合起來 並加以執行。你們不須要插手堆棧調整,等待一個堆棧執行結束後再啓動另外一個。Oozie可以按照DAG(即有向無環圖)的規範對工做流加以管理。(環圖相 當於無限循環,對於計算機來講就像一種陷阱。)只需將DAG交給Oozie,咱們就能夠放心出去吃飯了。

上圖所示爲來自Oozie說明文檔的一幅流程圖。Oozie代碼受到Apache許可的保護。

官方網站:oozie.apache.org

GIS工具

我們生活的世界至關廣闊,所以讓運行Hadoop的集羣與地理地圖協做也是項難度很高的任務。針對Hadoop項目的GIS(即地理信息系統)工具 採用多種基於Java的最佳工具,可以透徹理解地理信息並使其與Hadoop共同運行。咱們的數據庫將經過座標而非字符串來處理地理查詢,咱們的代碼則通 過部署GIS工具來計算三維空間。有了GIS工具的幫助,你們面臨的最大難題只剩下正確解讀"map"這個詞--它到底表明的是象徵整個世界的平面圖形, 仍是Hadoop做業當中的第一步、也就是"映射"?

上圖所示爲說明文檔中關於這些工具的不一樣層級。目前這些工具可在GitHub上進行下載。

下載地址:http://esri.github.io/gis-tools-for-hadoop/

Flume

數據收集這項任務絕對不比數據存儲或者數據分析更輕鬆。做爲又一個Apache項目,Flume可以經過分派"代理"以收集信息並將結果保存在 HDFS當中。每個代理能夠收集日誌文件、調用Twitter API或者提取網站數據。這些代理由事件觸發,並且能夠被連接在一塊兒。由此得到的數據隨後便可供分析使用。

Flume項目的代碼受Apache許可保護。

官方網站:flume.apache.org

Hadoop上的SQL


若是你們但願在本身的大型集羣當中對所有數據來一次快速的臨時性查詢,正常來講須要編寫一個新的Hadoop做業,這天然要花上一些時間。過去程序 員們屢次掉進過這同一個坑裏,因而你們開始懷念老式SQL數據庫--利用相對簡單的SQL語言,咱們就能爲問題找到答案。從這一思路出發,衆多公司開發出 一系列新興工具,這些方案所有指向更爲快捷的應答途徑。

其中最引人注目的方案包括:HAWQ、Impalla、Drill、Stinger以及Tajo。此類方案數量衆多,足夠另開一個全新專題。

雲計算

不少雲平臺都在努力吸引Hadoop做業,這是由於其按分鐘計算租金的靈活業務模式很是適合Hadoop的實際需求。企業能夠在短期內動用數千臺 設備進行大數據處理,而沒必要再像過去那樣永久性購入機架、再花上幾天或者幾周時間執行一樣的計算任務。某些企業,例如Amazon,正在經過將JAR文件 引入軟件規程添加新的抽象層。一切其它設置與調度工做均可由雲平臺自行完成。

上圖所示爲Martin Abegglen在Flickr上發表的幾臺刀片計算機。

Spark

將來已然到來。對於某些算法,Hadoop的處理速度可能慢得使人抓狂--這是由於它一般依賴於存儲在磁盤上的數據。對於日誌文件這種只需讀取一次 的處理任務來講,速度慢些彷佛還能夠忍受;但一旦把範圍擴大到全部負載,那些須要一次又一次訪問數據的人工智能類程序可能由於速度過慢而根本不具有實用價 值。

Spark表明着下一代解決思路。它與Hadoop的工做原理類似,但面向的倒是保存在內存緩存中的數據。上圖來自Apache說明文檔,其中演示的是Spark在理想狀態下與Hadoop之間的處理速度對比。

Spark項目正處於Apache開發當中。

官方網站:spark.incubator.apache.org

相關文章
相關標籤/搜索