在大資料技術中,Apache Hadoop和MapReduce是最受使用者關注的。 但管理Hadoop分散式檔案系統,或用JAVA編寫執行MapReduce任務則不是簡單的事。 那麼Apache Hive也許能説明您解決這一難題。
Hive資料倉儲工具也是Apache Foundation的一個專案,同時是Hadoop生態系統的關鍵元件之一,它提供了基於語境的查詢語句,即Hive查詢語句。 這套語句可以將SQL類查詢自動翻譯成MapReduce工作指令。
在BI領域,包括IBM DB2、Oracle和SQL Server在內的關聯式資料庫一直處於統治地位。 這使得SQL成為商業智慧的首選語言,大部分資料分析專家都掌握了較強較全面的SQL技能。 同樣道理,做資料分析的專家對Excel,Pivot表格和圖表等工具更熟悉。
先讓我們來看一個端到端的BI專案在Windows Azure系統中是如何運行的。 在Excel圖表中顯示美國航空公司的航班正點到達的資料,資料量很大,整個過程不需要編寫任何程式碼。
Windows Azure CTP上的Apache Hadoop
去年年底,微軟SQL Server研發團隊宣佈了Windows Azure平臺上的Apache Hadoop功能,即HadoopOnAzure。 微軟方面稱這將簡化Hadoop的使用和設置,利用Hive來從Hadoop集群中提取非結構化的資料,並在Excel工具中進行分析,同時增強了Windows Azure的彈性。
HadoopOnAzure的社區預覽版還處於未公開狀態,使用者需要在Microsoft Connect上填寫一個簡單的問卷調查來獲得邀請碼,並通過Windows Live ID登陸。 輸入唯一的DNS使用者名,選擇初始Hadoop集群大小,提供一個集群登錄名和密碼,點擊Request Cluster按鈕。 (見圖1)
圖1 使用者只需簡單的操作即可修改一個集群設置(點擊放大)
開通並設置集群需要15到30分鐘時間。 HadoopOnAzure社區預覽版的資源是免費的,但開通集群24小時之內,你需要在最後6小時的時候更新一下訂閱。 此後的使用過程中,證書需要每天都更新一次。
使用者如要使用Windows Azure的blob持久性資料存儲,那麼就需要一個Windows Azure的訂閱和一個存儲帳戶。 否則當集群超時,所有存儲在HDFS上的資料都將丟失。 如果沒有訂閱,使用者還可以申請註冊免費試用三個月的 Windows Azure帳號,這個帳號贈送每位使用者20GB存儲空間、上百萬次存儲傳輸以及20GB的外網頻寬。
向SQL Azure blob中填充大資料
這個Apache Hive專案從美國聯邦航空管理局(FAA)提取資料,收集了2011年後5個月到2012年1月共6個月以來航班正點到達的資訊及延誤資訊。 6頁文本資料子集包涵FAA檔欄,欄下有50萬行資料每頁25 MB。
使用者需要將資料上傳到一個blob container的資料夾中,這樣Hive可搜索到這些資料。 關於如何創建Azure blob來源資料的詳細步驟,可以參考我之前的一篇文章。 文章還提到了資料檔案以及如何用Windows Live SkyDrive帳號下載資料,最後怎樣將資料上傳到Windows Azure blob的具體步驟。
集群配置完成後,將彈出Elastic MapReduce門戶登錄頁面和集群、帳戶管理對話方塊。 (見圖2)
圖2:HadoopOnAzure的MapReduce控制板頁面特性和功能。 (點擊放大)
複製Windows Azure監管中心的Primary Access Key保存到剪切板,點擊Manage Cluster,打開頁面然後點擊Set Up ASV(Azure存儲庫),將Windows存儲帳戶作為Hive表的資料來源。 此外,使用者還可以使用Amazon S3或Windows Azure Dataplace DataMarket中的資料作為Hive表的資料來源。
輸入你的存儲帳號,在Passkey框中粘貼Primary Access Key,點擊保Save Settings,Hive即可成功登錄資料庫訪問blob。 如果證書獲得認證,使用者將收到短信通知Azure帳號設置成功。
與HDFS不同,即便是最簡單的KV(Key-Value)資料,Hive表都需要有schema。 要從非HDFS或外部定位字元號資料中生成一個 Hive表,給其列命名並定義資料類型的話,使用者就需要運行 CREATE EXTERNAL TABLE語句,如下面的HiveQL所示:
CREATE EXTERNAL TABLE flightdata_asv (
year INT,
month INT,
day INT,
carrier STRING,
origin STRING,
dest STRING,
depdelay INT,
arrdelay INT
)
COMMENT 'FAA on-time data'
ROW FORMAT DELIMITED FIELDS TERMINATED by '9'
STORED AS TEXTFILE
LOCATION 'asv://aircarrier/flightdata';
Apache Hive的資料類型相對較少,並且不支援日期或時間欄位,好在來源資料*.csv對應的整數位段如年,月和日數值正好有利於資料的維護。 出發(depdelay)和到達(arrdelay)的延誤時間值將以分鐘的形式呈現。
執行動態HiveQL語句,可以點擊Elastic MapReduce的Interactive Console,然後點擊Hive按鈕打開動態Hive頁面,頁面頂部出現唯讀文字方塊,點擊下方文字方塊為說明。 (見圖3)
圖3:Hive圖表選項清單包括新圖表標題,列儲存格顯示某個選定圖表欄位名。 點擊﹥﹥鍵在儲存格中插入選定的條目。 (點擊放大)
下載並安裝Apache Hive ODBC驅動及Excel外掛程式
返回Elastic MapReduce主頁面,點擊Downloads面板。 找到與使用者Excel版本對應的安裝連結,然後點擊Run,打開警告對話方塊。 點擊More Options,出現Run Anyway選項,點擊開始安裝,打開ODBC驅動啟動Hive設置對話。 在I Accept框中打鉤。
點擊Install開始安裝驅動,完成後點擊Finish退出安裝。 下一步,打開Excel,點擊Data標籤,確認Hive Pane圖示存在,點擊圖示,工作表右面出現Hive Query儀錶盤。 安裝外掛程式會放置一個Hive Pane圖示到目錄的Hive Data部分。
返回EMR控制主頁面,點擊Open Ports打開Configure Ports頁面,點擊ODBC Server,往右拖動,打開TCP port 10000。
執行互動式Apache Hive查詢
返回Excel,點擊Hive Pane圖示,打開Hive Query任務框,點擊Enter Cluster Details來打開ODBC Hive Setup對話方塊,輸入一個描述及DNS主機名稱稱,接受TCP埠。 下一步,選擇Username/Password authentication,輸入你的Elastic MapReduce門戶實例的使用者名及密碼。 (見圖4)
圖4:每個連結,機場,TCP埠和集群使用者名密碼都有其對應的具體名稱。 (點擊放大)
若ODBC Hive對話方塊中設置的Hive選項正確,那麼當使用者打開Select or Enter Hive Connection時,輸入的名稱會作為描述欄位彈出。 打開Select the Hive Object to Query清單,選擇flightdata_asv生成Columns清單。
如要執行一個彙總查詢來顯示延誤的平均時間,可以勾選carrier和arrdelay欄,打開arrdelay欄位的函數清單,然後按兩下清單中的avg,將其添加到HiveQL語句當中(見圖5)。
圖5:選擇avg HiveQL進行彙總查詢並按兩下,HiveQL功能比大多數的SQL更豐富一些
下一步,劃去Limit Results勾選框,打開Aggregate Grouping清單,選擇carrier列。
在avg()中輸入arrdelay,如avg(arrdelay),這可以消除查詢語句設計流程的缺陷,點擊Execute Query得出查詢結果。 (見圖6)
圖6:這是HiveQL查詢執行後的結果,B6好F9是FAA專用的兩個位元組代碼,B6指代Jet Blue,F9指代Frontier Airlines。
刪除錯誤的Carrier條目,這可能是由於每列的首標發生錯誤,導致資訊被留在了文檔中,結果出現在查詢結果裡。 保留一位小數,關掉任務框,將資訊添加到工作表,添加標題,X軸標題和資料標籤。 (見圖7)
圖7:Excel表單從圖6的資料中生成得來
文章給出的例子闡述了運行HadoopOnAzure CTP的簡單流程。 微軟代碼為「Cloud Numerics」 的專案也有相似的功能,但是它需要我們在Visual Studio 10以上版本的環境中進行操作。 HadoopOnAzure能夠將表格資料直接傳送到Excel當中,以便做進一步的分析。 此外,互動式Hive、 Hive ODBC資料來源以及對應的Excel外掛程式,都使得HadoopOnAzure成為大資料處理的理想平臺。
原文連結:HTTP://www.searchbi.com.cn/showcontent_62711.htm