IBM BigInsights -- 基於 Hadoop 的數據分析平臺

 

數據分析背景及其傳統數據分析平臺的問題起源

在當今信息爆炸的時代,企業需要對越來越多的數據進行訪問和處理。除了傳統的在線交易處理系統和管理信息系統外,半結構化和無結構化的數據呈現出了更快速的增長趨勢,例如企業內部的 email 歸檔,call center 對話記錄,客戶反饋記錄,企業內部網絡應用,合作管理系統以及,企業的外部門戶網站點擊記錄,基於 Feed 的市場信息等等。如何更加有效的低成本的處理這些大量的數據(數據量從幾個 Tera 字節到 Peta 字節)從而和商業智能相結合以挖掘出對企業有益的信息並幫助用戶作出更準確的決策是一個急需解決的問題。 目前傳統的數據分析平臺(ETI 引擎,數據倉庫和集市等技術)主要是針對結構化的數據進行在線數據分析應用,這種數據處理模式面臨着對大量數據和半結構化的數據處理能力不足和不能承受服務器擴展的的複雜性的問題,爲此,Google 實現了一個能夠有效利用大量成本低廉的 PC 機和服務器的 Mapred 編程模型和框架並於 2004 年發表了相應的論文,此框架提供自動容錯和恢復功能並且能夠保證整個系統的高度可擴展性,而 Hadoop 作爲 Mapred 的 Open source 的實現已經被越來越多的企業特別是 Internet 公司採用作爲基本的分析和查詢的基礎架構,比如百度,Facebook, Yahoo !等。

IBM 對於 Hadoop 的研究開始於 2008年,截止到目前,研究成果涉及到作業調度,查詢語言等多個方面。在這些研究的基礎上,IBM 啓動了 BigInsights 項目並於 2011 年 5 月發佈了 Basic Edition 和 Enterprise Edition 並且還將集成更多 IBM 的產品與組件(可通過以下鏈接瞭解 BigInsights 的產品 http://www-01.ibm.com/software/data/infosphere/biginsights/

 

IBM BigInsights 簡介

IBM InfoSphere BigInsights 是用於分析和可視化管理海量數據的處理平臺,它基於分佈式開源技術 Apache Hadoop,在集成與擴展 Hadoop 主要組件的同時,還提供了 IBM 特有的數據處理與分析模塊。利用 BigInsights,IT 專業人員能夠快速地構建大數據分析處理平臺,對企業內的海量數據進行定製化分析,並能夠與企業現有的數據庫、數據倉庫和商業智能分析框架相結合,從而幫助企業獲得巨大的商業價值。

BigInsights 主要提供了以下功能特性:

  • Apache Hadoop 組件的輕鬆部署

通過簡單的圖形界面,BigInsights 能夠輕鬆實現 Hadoop 組件包括 Hadoop 核心包,Avro,Flume,Hbase,Hive,Lucene,Oozie,Orchestrator,Pig,Zookeeper 等組件的安裝與部署。

  • Apacche Hadoop 組件、作業的管理與維護

BigInsights 提供了命令行和 Web 界面兩種方式對 Hadoop 組件進行管理,配置方式非常簡單。

  • 提供了更全面的安全驗證策略,比如文件驗證、LDAP 驗證,這是 Hadoop 本身所不具備的

  • 更多高級功能

 

其系統結構圖如圖 1 所示。

圖 1. BigInsight 整體框架圖

BigInsight 整體框架圖  

從上面的 BigInsights 產品戰略示意圖中可以看到,平臺的最低層依賴於由多臺普通 PC 或者服務器組成的集羣 , 也就是說用戶並不需要通過不斷的購買或者升級目前的大型服務器的性能來實現更大數據量的處理,而只需要利用一些閒置的普通機器對目前的集羣進行擴展 (scale-up 方式 )。另外,此平臺除了支持 Hadoop 應用程序主要基於的 HDFS 存儲系統外,還將對 IBM 最新推出的 GPFS SNC (Shared Nothing Cluster) 平臺進行支持以更好的利用其強大的災難恢復,高可靠性,高擴展性的優勢,其實現依賴於 Hadoop 本身提供的抽象 API 接口。爲了對這些存儲系統的數據能夠進行有效地分析,BigInsights 平臺集成了 IBM 最新推出的大數據量處理分析系統 BigSheets, 用來方便的抓取轉瞬即逝的信息並進行保存分析,除此之外,爲了使用戶自己能夠方便的定製自己的查詢功能,BigInsights 還提供了能夠直接對存儲系統的數據進行讀取及其他操作的查詢語言 Jaql, 這些也是 Biginsight 發佈的重點特性,也是本文進行介紹的重點。在 BigSheets,Jaql 和底層的存儲系統之間,BigInsights 使用了任務調度器來調度多個作業的同時運行。此外,從上圖中可以看到 ,BigInsights 不但考慮到了單獨對數據進行處理的能力,還考慮到了和傳統數據庫軟件、傳統數據分析軟件集成的能力,另外也提供了對系統進行管理監控等功能。下面的章節將集中在 BigInsights 的應用模塊 (Jaql,biggSheets, Jaql 和 DB2 的集成 ) 進行闡述。

 

BigInsights 平臺的查詢語言和對傳統數據庫的支持

1. Jaql--BigInsights 平臺提供的查詢語言

作爲一個優秀的並行計算平臺,Hadoop 雖然已經被廣泛驗證,但是在 Hadoop 上開發 MapReduce 程序需要較長的開發週期,開發人員需要充分理解 MapReduce 計算框架和 HDFS 文件系統的原理和實現才能編寫出性能較好的 MapReduce 程序。作爲下一代數據分析平臺的重要基礎,人們也一直在探討是否可以提供一種類 SQL 的描述性語言來屏蔽 MapReduce 的實現細節,從而讓開發人員可以能夠更加關注業務邏輯本身而不是計算機程序的實現,目前應用的比較廣泛的有 Pig 和 Hive。Pig 提供了一種基於 PigLatin 的描述性語言,Hive 則提供了一種類 SQL 的描述性語言,而 IBM BigInsights 則集成了另外一種描述性語言,JAQL(Json Analysis Query Language)。JAQL 以 Json 數據類型爲基礎,採用一種在 Linux 系統中廣泛應用的 Pipeline 模式來定義數據流的走向,如下例所示:

 read(hdfs('foo'))->transform $.id ->write(hdfs('ids'));

上例中,我們先從 HDFS 文件 foo 中讀出所有的數據,然後取得每個記錄的 id 屬性,把它們組成一個數組寫到 HDFS 文件 ids 中。因爲讀操作的對象是一個 HDFS 文件 ( 可能會非常大,由很多個 HDFS 的 block 單元組成 ),JAQL 會根據 HDFS 支持併發讀取的特點,將該操作重構爲一個 MapReduce 過程,transform 方法被實現爲一個 map 任務,分佈到整個集羣中來執行。每個 map 任務分別讀取 foo 的一個 block 單元,然後生成一個 ids 的 block 單元。最後從用戶的角度來看,生成的 ids 不是一個文件,而是一個目錄,裏面包含了分散在各個 datanode 上的 block 單元。根據 HDFS 的定義,該文件夾可以被當成一個整體來操作。JAQL 提供了一系列類似的方法,允許用戶讀寫 HDFS,HBase,數據庫,本地文件系統等各種各樣的數據格式,提供了諸如 Transform, Group, Join 等各種常用的方法,允許用戶來完成基本的數據操作。除了這些內建的操作外,用戶也可以通過自己編寫 Java UDF 來擴展 JAQL 的功能。對於一套比較完整的操作集合,也可以定義模塊來實現代碼的重用。採用 JAQL,包括 Pig 和 Hive,作爲與 Hadoop 的交互語言大大降低了 MapReduce 開發人員的技術門檻,這種語言的另外一個潛在優勢在於,隨着這些語言的不斷成熟和算法的不斷優化,可能不需要編程人員瞭解具體的實現細節而獲得優異的性能,就像人們在傳統數據庫中爲優化 SQL 所做的一樣。

2. Jaql 與 DB2 的集成 --BigInsights 平臺對數據庫的支持

作爲企業級的應用平臺,IBM BigInsights 不僅推出了這種全新的數據分析框架,也提供了與傳統數據庫,數據倉庫集成的機制,從而允許用戶能夠無縫的處理新舊平臺中的數據。這種集成體現在以下兩個方面,JAQL 本身提供了一種訪問數據庫的機制,允許用戶在 JAQL Query 中編寫 SQL 語句,通過 JDBC 訪問數據庫中的數據,另一方面,IBM BigInsights 也提供了一個模塊,允許用戶在 SQL 語句中編寫 JAQL 語句。第一種方向的集成相對簡單,是對 JAQL Io 層的一個簡單擴展,後一種集成方向的實現則相對複雜,圖 2 描述了這種集成的一個邏輯示意圖。

圖 2. Jaql 和 DB2 的集成示意圖

Jaql 和 DB2 的集成示意圖

整個解決方案的主體由兩部分組成:JAQL Server 是對 JAQL 的一個擴展,它提供了一組 RESTful 的操作,允許用戶通過 HTTP 的方式提交,查詢或者終止一個 JAQL 查詢。JaqlSubmit 是 DB2 的一個 scalar UDF,它允許用戶在 DB2 的 SQL 語言中提交一個 JAQL 查詢,HdfsRead 是 DB2 的一個 table UDF, 它允許用戶通過 DB2 訪問存儲在 HDFS 中的數據。這種設計框架的一個主要優點是在保證互聯互通的同時,可以最大限度的使得各個模塊的之間保持鬆散耦合。結合 DB2 的 partition 技術,該方案還可以實現文件的併發讀取,最大限度的獲得 Hadoop 計算集羣的性能優勢。

下面是使用 jaql-db2 集成的功能的一個例子,這個例子中我們選取出版年份爲 1930,1997,1998 年的數據的信息。清單 1 中是所有書籍的信息,以 json 格式存儲在文件中。 要使用 Jaql 和 DB2 集成的功能,我們必須執行一下步驟:

  1. 註冊兩個 jar 包,並且爲 DB2 創建兩個 UDF, 這些步驟在 BigInsights 安裝後都在 jaql-db2/scripts 目錄下,我們可以通過清單 2 中描述的腳本來運行。

  2. 啓動 JaqlServer,此服務使 Jaql 能夠接受以 HTTP 消息傳遞過來的 Jaql 指令。

  3. 使用 UDF 對數據進行分析查詢,本例中的查詢語句和結果如清單 3 所示。

清單 1. 使用 DB2 來查詢 HDFS 上的數據
  $ cat books.json 
  [ 
    {publisher: 'Scholastic', 
     author: 'J. K. Rowling', 
     title: 'Deathly Hallows', 
     year: 2007}, 

    {publisher: 'Scholastic', 
     author: 'J. K. Rowling', 
     title: 'Chamber of Secrets', 
     year: 1999, 
     reviews: [ 
       {rating: 10, user: 'joe', review: 'The best ...'}, 
       {rating: 6, user: 'mary', review: 'Average ...'}]}, 

    {publisher: 'Scholastic', 
     author: 'J. K. Rowling', 
     title: 'Sorcerers Stone', 
     year: 1998}, 

    {publisher: 'Scholastic', 
     author: 'R. L. Stine', 
     title: 'Monster Blood IV', 
     year: 1997, 
     reviews: [ 
       {rating: 8, user: 'rob', review: 'High on my list...'}, 
       {rating: 2, user: 'mike', review: 'Not worth the paper ...', 
        discussion: 
          [{user: 'ben', text: 'This is too harsh...'}, 
           {user: 'jill', text: 'I agree ...'}]}]}, 

    {publisher: 'Grosset', 
     author: 'Carolyn Keene', 
     title: 'The Secret of Kane', 
     year: 1930} 
  ]
清單 2. 註冊 UDF 及其 Jar 包
  sh install.sh 
  db2 -tvf createJaqlSubmitFunc.clp 
  db2 -tvf createModuleFunc.clp
清單 3. 使用 DB2 來查詢 HDFS 上的數據
  $ db2 -tvf simpleTest1.clp 
  select a.* from table(hdfs_read(jaql_submit('read(file(''/opt/ibm/biginsights/jaql-db2 
  /test/books.json''))->filter $.year in $yearlist_TMP-> transform { 
  $.publisher, $.author 
  , $.title, $.year }-> write(del($out_location$,{ schema: schema 
  { publisher:string, 
  author:string, title:string, year:long }}));','<parameters>
<parameter name="yearlist" 
type="number-array">1930,1997,1998</parameter></parameters>',
'localhost','8200','600000'
  ))) as a 

  C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 
  ---------------------------------------------------------------- -------------------- 
  ---------------------- ------------- ------ ----- --- ---- -------- ------ ------ 
  "Scholastic" "J. K. Rowling" "Sorcerers Stone""Scholastic" "J. K. Rowling" "Sorcerers 
  Stone" 1998 - - - - - - - - "Scholastic" "R. L. Stine" "Monster Blood IV" "Scholastic"
  "R. L. Stine" "Monster Blood IV" 1997 - - - - - - - - "Grosset" "Carolyn Keene" "The 
  Secret of Kane" 1930 - - - - - - - - 

  3 record(s) selected.
 

BigSheets--BigInsights 平臺提供的強大數據分析功能

BigInsights 不僅提供了數據查詢的語言,與數據庫系統的集成,另外還提供了一個重要的產品模塊— Big Sheets。它允許用戶利用瀏覽器抓取自己感興趣的網頁信息,這對於獲得那些並不是一直存在的網頁信息來講尤其具有重要的意義。除此以外,它還可以支持不同格式的文件信息的導入,並且可以用來對這些信息進行註解和具體分析。BigSheets 應用到了幾種開源項目如 Hadoop、Nutch、Pig 來實現公衆可閱覽的私用雲計算,目前該技術已經應用到大英圖書館中。

BigSheets 的整個應用可以分爲以下幾個步驟:

  1. 抓取信息或導入信息,用戶可以制定需要抓取信息的 web 地址,可以選擇多種格式的文件如本地或遠程的 Json, CSV, RSS 格式文件,也可以利用 bigsheets 提供的 API 來書寫自己的文件閱讀模塊。

  2. 對信息進行處理,BigSheets 提供了類似 Excel 表的很多對數據進行處理的功能,比如對數據列進行排序,利用關鍵字進行篩選等功能。

  3. 導出經過分析後的數據存儲到特定位置。

此外,BigSheets 的所有操作,比如 import, filter, macro 都是以插件的方式進行實現,也就是說用戶完全可以使用 BigSheets 爲不同功能提供的不同接口來實現功能的自定義,然後安裝自己編寫好的插件即可。 下面給出了利用 BigSheets 進行數據分析的實例圖,其中圖 3 展示了使用 BigSheets 來對本機的網頁進行抓取,在此圖中可以看到用戶可以對 BigSheets 進行相應的抓取設置,比如抓取網頁地址,抓取粒度,是否需抓取固定鏈接的數據等。圖 4 給出了 BigSheets 中對數據進行篩選操作的示例,此例中是對已存在數據的第一列進行時間上面的篩選。

圖 3. BigSheets 進行網頁信息抓取實例圖

BigSheets 進行網頁信息抓取實例圖

圖 4. BigSheets 進行信息篩選實例圖

BigSheets 進行信息篩選實例圖

總結

IBM 構建了 BigInsights 平臺來爲用戶提供從大量的信息中提取有用信息進行分析決策的解決方案,它被用來解決在當前信息分析中亟待解決的幾大問題:極大數據量的處理,數據來源的多樣性,數據分析的敏捷性,數據分析的持久性。隨着 BigInsights 的不斷髮展,我們將支持更多的基於 Hadoop 的開源項目,根據用戶的特定需求提供更多更好的解決方案。

原文鏈接--http://www.ibm.com/developerworks/cn/data/library/techarticle/dm-1108lisd/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章