原創|行業資訊|編輯:陳俊吉|2016-09-29 10:20:22.000|閱讀 856 次
概述:本文針對 IBM 最新開發的數據分析平臺進行概要介紹并對其應用進行指導說明。隨著信息技術應用范圍的不斷擴展,對數據進行挖掘分析的需求日益增加,但是信息量的不斷增大及其應用構建的復雜性日益卻成為了傳統數據分析的一個瓶頸。IBM 構建的數據分析平臺針對上述問題,基于 Hadoop 技術,對數據查詢語言,數據分析軟件,數據庫,作業調度模塊進行了有效整合,實現了對數據的有效、高效處理,保證了高度的擴展性和兼容性。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
本文針對 IBM 最新開發的平臺進行概要介紹并對其應用進行指導說明。隨著信息技術應用范圍的不斷擴展,對數據進行挖掘分析的需求日益增加,但是信息量的不斷增大及其應用構建的復雜性日益卻成為了傳統的一個瓶頸。IBM 構建的數據分析平臺針對上述問題,基于 Hadoop 技術,對數據查詢語言,數據分析軟件,數據庫,作業調度模塊進行了有效整合,實現了對數據的有效、高效處理,保證了高度的擴展性和兼容性。
在當今信息爆炸的時代,企業需要對越來越多的數據進行訪問和處理。除了傳統的在線交易處理系統和管理信息系統外,半結構化和無結構化的數據呈現出了更快速的增長趨勢,例如企業內部的 email 歸檔,call center 對話記錄,客戶反饋記錄,企業內部網絡應用,合作管理系統以及,企業的外部門戶網站點擊記錄,基于 Feed 的市場信息等等。
如何更加有效的低成本的處理這些大量的數據(數據量從幾個 Tera 字節到 Peta 字節)從而和商業智能相結合以挖掘出對企業有益的信息并幫助用戶作出更準確的決策是一個急需解決的問題。
目前傳統的平臺(ETI 引擎,數據倉庫和集市等技術)主要是針對結構化的數據進行在線數據分析應用,這種數據處理模式面臨著對大量數據和半結構化的數據處理能力不足和不能承受服務器擴展的的復雜性的問題,為此,Google 實現了一個能夠有效利用大量成本低廉的 PC 機和服務器的 Mapred 編程模型和框架并于 2004 年發表了相應的論文,此框架提供自動容錯和恢復功能并且能夠保證整個系統的高度可擴展性,而 Hadoop 作為 Mapred 的 Open source 的實現已經被越來越多的企業特別是 Internet 公司采用作為基本的分析和查詢的基礎架構,比如百度,Facebook, Yahoo !等。
IBM 對于 Hadoop 的研究開始于 2-3 年前,截止到目前,研究成果涉及到作業調度,查詢語言等多個方面。在這些研究的基礎上,IBM 啟動了 BigInsights 項目并于 2011 年 5 月發布了 Basic Edition 和 Enterprise Edition 并且還將集成更多 IBM 的產品與組件,其系統結構圖如圖 1 所示。
從上面的 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 的集成 ) 進行闡述。
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 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 }}));','', '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. 1930,1997,1998
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 進行網頁信息抓取實例圖
圖 4. BigSheets 進行信息篩選實例圖
IBM 構建了 BigInsights 平臺來為用戶提供從大量的信息中提取有用信息進行分析決策的解決方案,它被用來解決在當前信息分析中亟待解決的幾大問題:極大數據量的處理,數據來源的多樣性,數據分析的敏捷性,數據分析的持久性。隨著 BigInsights 的不斷發展,我們將支持更多的基于 Hadoop 的開源項目,根據用戶的特定需求提供更多更好的解決方案。
詳情請咨詢!
客服熱線:023-66090381
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn