Hadoop在線分析處理(OLAP)


數據處理與聯機分析處理 ( OLAP )

        聯機分析處理是那些為了支持商業智能,報表和數據挖掘與探索等業務而開展的工作。這類工作的樣例有零售商按地區和季度兩個維度計算門店銷售額,銀行按語言和月份兩個維度計算手機銀行裝機量,設備制造商定位有哪些零部件的故障率比期望值高。以及醫院研究有哪些事件會引起高危嬰兒緊張等。

       假設原始數據來源於 OLTP 系統。典型的做法是將這些數據復制到 OLAP 數據庫中,再進行這類“離線”分析任務的處理,這么做有非常多原因。但考慮最多的還是性能因素。

       如果一下,如果一個實體店使用他們的事務處理系統來承擔數據分析工作,這樣的情況下分析師提交的粗暴查詢就可能會實實在在地影響並拉低門店對於那些已經記錄在冊等待結算的訂單結算率。另外用於事務中的查詢類型從根本上就不同於數據分析類查詢。

       事務系統典型的查詢是基於某個獨立的實體,比方某一個客戶或某一個用戶。比如當一個在線零售站點創建一個交易訂單狀態頁時。數據的查詢是針對某一個客戶已經提交的特定訂單。然而在數據分析的用例中。分析師最感興趣的卻是那些依據時間維度划分查詢本身已跨越了訂單或用戶數據的匯總信息。就如前面提到的那樣。依據區域和季度兩個維度統計的門店銷售額會查詢給定時間段內全部訂單數據。

      行動之前還有最后一個注意要點。本篇中的數據庫並不提供傳統關系型數據庫用戶所期望的那類增刪改操作。

與事務系統不同的是。分析類型的查詢主要是那些涉及到數百萬甚至數億行數據的 SELECT 查詢。分析型數據庫的優化也主要環繞着這類負載進行。而這些優化措施卻會導致針對小批量數據的增刪改操作運行起來代價昂貴。

      即便這類數據庫在接口和語義方面都與關系型數據庫不同。但他們也確實提供了添加行 ( INSERT ),更新行( UPDATE )和刪除行( DELETE )操作的功能支持。有些讀者也許正在問 Hive 系統里近期新添加的 “ ACID ” 相關的問題,容后詳稟。

     在 Hive 系統的 “ACID” 功能之外。處理更新操作有兩種方式可選,一種是使用數據所在的 HBase 系統本身提供的更新功能。雖然 HBase 常常主要用於 OLTP 業務。但有些 OLAP 系統會使用 HBase 來存儲一些小表,典型的稱為維度表。這類表須要周期性地更新。另外一種處理更新操作的方式是運行一次合並操作。

    從一個 ETL 開發人員角度出發,一個合並過程會引入額外工作量。因此有個問題一定會被問到,那就是既然 HBase 系統已經提供了更新功能,那這類合並工作就不是必須的。那為什么不直接都用 HBase 呢?原因是掃描查詢的處理性能,假設要在基於尾部追加模式的 HDFS 文件系統提供隨機更新的功能,HBase 就得在它讀取每一行時都做少量的合並操作,這個架構決定了能提供較高的寫和隨機讀性能,但與 HDFS 相比,僅僅能提供較差的掃描查詢和順序讀操作性能。

這樣一來 HBase 就僅僅能用於存儲那些須要頻繁更新的小表場合。

這個領域包括幾個子文件夾:

  • Apache Hive
  • Dremel clones
  • Spark SQL

Apache Hive

       本項目最初由臉譜公司創建。Hive 是第一個基於 Hadoop 之上的 SQL 引擎。且至今仍是最成熟的。

Hive 原先是構建在MapReduce之上的,也以前被改造過以便執行在 Apache Tez 上,如今正在進行的是為適應 Apache Spark 而進行的改造,基於 Spark 的Hive 改造被稱為是最后的工作。但不能與 Spark 項目上的其它 SQL 支持項目相互混淆。關於 Spark 上的其它 SQL 支持項目我會再找個合適時機進行討論。

      到眼下為止。Hive 擁有最完整的 SQL 功能支持,而且也是擁有最多貢獻者的項目,差點兒全部的 Hadoop 用戶都會部署Hive,同一時候差點兒 Hadoop 上其它 SQL 引擎使用者也都會部署 Hive ,其實大多數 SQL 引擎都以這樣的或那種方式依賴於Hive 。

     大多數 Hadoop 贊助商,包含 Cloudera 和 Hortonworks,都一致認同 Hive 是唯一有能力處理大批量任務和集成多種非標准數據格式的組件。

Hortonworks 與 Cloudera 意見相左的地方在於對 Hive 的性能評價。Clourdera 認為 Hive 的性能簡直不能與 Dremel clones 相比。而 Hortonworks 則認為 Hive 能夠和 Dremel Clones 一較高下。

Dremel Clones

      就像開源界一樣,谷歌內部也創立了多個 SQL 引擎。他們有一個類似於 Hive 的 SQL 引擎叫 Tenzing,還有另外一個系統叫 Dremel。

Hive 的創立者 Facebook 公司也創建了一個 Dremel 的克隆版本號叫 Presto。

      Cloudera Impala 和 Apache Drill 是最傑出的兩個 Dremel 克隆版本號,Cloudera 將 Impala 市場定位為最成熟的開源 Dremel 分支,Impala 在2013年年中公布 GA 版本號,MapR 是 Drill 背后的主要贊助商,他把 Drill 的市場角色定位為最靈活的 Dremel 分支。 Impala 能滿足在 Hive 系統中存儲元數據表的需求。而 Drill 能夠直接查詢 JSON 和自己定義格式文件,比方 Apache Parquet 和 Avro 文件格式等。

Spark SQL

      雖然有 Hadoop 上有其它多個 SQL 引擎。但 Spark SQL 卻有着對其感興趣的最廣泛受眾。Spark SQL 是 Spark 引擎上的榜眼。而狀元是 Shark。 Shark 由於顧及 Spark SQL 和 Hive on Spark 項目。Shark 眼下已經終止開發,與 Shark 項目曾近是加州伯克利大學的一個研究項目不同,Spark SQL 和 Hive on Spark 已經在 Spark 贊助商們的支持下建立了各自的開源項目;

      基於 Spark 的 Hive 能夠簡單地說成是前端是 Hive 后端是 Spark ,基於 MR 或 Tez 的 Hive 既實用戶能夠在原系統與 Hive on Spark 系統之間輕松切換。切換工作只只須要簡單地改動下配置參數。

      Spark SQL 是一個完整的新引擎,今天的 Spark SQL 對那些希望把 SQL 嵌入到他們的 Scala,Java 或者 Python 程序的Spark 開發人員而言是最實用的,但 Spark SQL 的主要贊助商 Databricks 對 Spark SQL 還有着更大的雄心。並指望將 Spark SQL 的使用范圍擴展到非 Spark 開發人員中去;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM