傳統的資料分析使用關系型資料庫管理系統(Relational Database Management System,RDBMS)的資料庫來建立資料倉庫和資料集市,以便使用商業智能工具進行分析。RDBMS 資料庫采用的是寫時模式(Schema-on-Write)的方法,而這種方法有許多缺點。
傳統資料倉庫的設計思想是用于提取、轉換和加載(Extract, Transform, and Load,ETL)資料,據此回答與使用者需求直接相關的一組預先定義的問題。這些預先定義的問題是利用 SQL 查詢來回答的。一旦資料以易于通路的(consumable)格式進行轉換和加載,使用者就可以通過各種工具和應用程式通路它,進而生成報告和儀表闆。但是,以易于通路的格式建立資料需要幾個步驟,如下所示:
(1)确定預先定義的問題。
(2)從資料源系統識别和收集資料。
(3)建立 ETL 流水線,把資料以易于通路的格式加載到分析型資料庫裡。
如果有了新的問題,系統就需要識别和添加新的資料源并建立新的ETL流水線。這涉及資料庫中的模式更改,實施工作通常會持續1~6個月。這是一個很重大的限制,迫使資料分析人員隻能在預定義的範圍内進行操作。
将資料轉換為易于通路的格式通常會導緻丢失原始/原子資料,而這些資料可能含有我們正在尋找的答案的結論或線索。
處理結構化和非結構化資料是傳統資料倉庫系統中的另一個挑戰。有效地存儲和處理大型二進制圖像或視訊也總是有挑戰性的。
大資料分析是不使用關系資料庫的;相反,它通常借助Hive和HBase在Hadoop平台上使用讀取模式(Schema-on-Read,SOR)方法 。這種方法有許多優點。圖1-2比較了 Schema-on-Write和Schema-on-Read 的場景。
讀取模式方法為系統帶來了靈活性和可重用性。讀取模式的範例強調以原始的、未修改的格式存儲資料,并且通常在讀取或處理資料時,會根據需要将某個模式應用于資料。這種方法讓存儲資料的數量和類型具有更大的靈活性。同一組原始資料可以應用多個模式,以提出各種問題。如果需要回答新問題,隻需擷取新資料并将其存儲在HDFS的一個新目錄中,就可以開始回答新問題了。
這種方法還為使用多種方法和工具通路資料提供了巨大的靈活性。例如,可以使用 SQL分析工具或Spark中的複雜Python或R腳本來分析同一組原始資料。由于我們并不會把資料存儲在ETL所需的多個層中,是以可以降低存儲成本和資料轉移成本。非結構化和結構化的資料源都可以和結構化的資料源一起進行分析。
使用大資料平台(如 Hadoop)進行大資料分析的生命周期與傳統的資料分析項目類似。不過,大資料分析有個根本的格局轉變,那就是使用讀取模式方法進行資料分析。
一個大資料分析項目涉及的活動如圖1-3所示。
首先要明确項目的業務問題和期望的結果,以便确定需要哪些資料,可以進行哪些分析。業務問題的一些示例是公司銷售額下降、客戶通路了網站但沒有購買産品、客戶放棄了購物車、支援電話熱線呼叫量的突然增加等。而項目成果的一些示例是把購買率提高 10%、将購物車放棄率降低50%、在下一季度讓支援電話量減少50%的同時保持客戶滿意度。
要确定資料的品質、數量、格式和來源。資料源可以是資料倉庫(OLAP)、應用程式資料庫(OLTP)、來自伺服器的日志檔案、來自網際網路的文檔,以及從傳感器和網絡集線器生成的資料。要識别所有内部和外部資料源的需求。此外,要确定資料匿名化和重新進行身份資訊處理的要求,以删除或掩蓋個人身份資訊(personally identifiable information,PII)。
我們可以使用Sqoop工具從關系資料庫收集資料,并使用Flume來對資料進行流式傳輸。我們還可以考慮使用Apache Kafka來實作可靠的中間存儲。在設計和收集資料的時候,還要考慮容錯的情況。
我們得到的資料會有不同的格式,也可能有資料品質問題。預處理步驟的作用是把資料轉換為所需的格式,或清理不一緻、無效或損壞的資料。一旦資料符合所需的格式,就可以啟動執行分析階段的工作。Apache Hive、Apache Pig和Spark SQL都是對海量資料進行預處理的優秀工具。
在某些項目中,如果資料已經具備了整潔的格式,或者分析過程是使用讀取模式(Schema-on-Read)方法直接針對源資料進行的,那可能就不需要這個步驟了。
我們進行分析的目的是回答業務方面的問題。這就需要了解資料以及資料點之間的關系。進行分析的類型有描述性和診斷性分析,得到的是資料的過去和目前視圖。它通常回答的是像 “發生了什麼事情?”和“為什麼發生?”這樣的一些問題。在某些情況下也會進行預測分析,它回答的問題是,基于某個假設會發生什麼情況,諸如此類。
Apache Hive、Pig、Impala、Drill、Tez、Apache Spark和HBase都是在批處理模式下進行資料分析的優秀工具。而Impala、Tez、Drill和Spark SQL等實時分析工具可以內建到傳統的商業智能工具(Tableau、Qlikview等)裡,用于互動式分析。
資料可視化是把分析結果以圖像或圖形格式來呈現,以便更好地了解分析結果,并根據這些資料做出業務決策。
通常,我們可以使用Sqoop将最終資料從Hadoop導出到RDBMS資料庫,以便內建到可視化系統中;也可以把可視化系統直接內建到Tableau、Qlikview、Excel這些工具中。基于Web的筆記本(如 Jupyter、Zeppelin和Databricks cloud等)也可以通過和Hadoop及 Spark元件進行內建,用于實作資料的可視化。
Hadoop和Spark為你提供了大資料分析的極大靈活性: