數據分析是當前比較熱門的技術,經過利用雲計算的資源,更加快速對數據進行收集、處理並分析。本文將從實踐角度闡述 AWS 數據湖以及數據分析等產品,是如何幫助企業更加智能的利用數據,從而輔助業務決策。linux
好久以前,當時的數據量不多,人們都是把數據記在腦中或者記錄在紙張上面,想要查看數據的時候,翻開記錄就行。算法
隨着科技的進步,產生了愈來愈多的數據,人們發現數據記錄在筆記中變得繁瑣且不高效,並且查詢數據也變得困難。因而產生了,數據庫能夠知足海量數據快速地增刪改查等需求。sql
好比如今的移動支付,用戶的每筆消費,後臺數據庫都會快速記錄這筆交易;用戶在電商平臺下的每一個訂單,後臺數據庫一樣會快速地記錄下來,這就會產生海量的數據,而這也只是海量數據的冰山一角。數據庫
時間長了,人們發現庫裏的數據愈來愈多了,不光要支持聯機業務,還要有分析的價值。可是,傳統的數據庫須要知足頻繁、快速的讀寫需求,並不適合大量讀取數據特徵進行分析業務。人們開始尋找其餘的方法。安全
固然人類仍是很聰明的,既然不能直接在數據庫中進行分析,那我應該能夠把須要分析的數據導出來,放到一個專門的數據庫中面進行分析,在導出的過程當中咱們還能夠對數據進行一些格式轉換,這個過程也就是咱們常說的 ETL(Extract-Transform-Load)。服務器
這個專門存放加工後數據的地方,咱們稱之爲數據倉庫。數據倉庫裏面的數據主要用於咱們後面的數據分析,如用於 BI、報表、經營分析、廣告投放等。架構
那麼數據庫和數據倉庫的區別主要在哪裏呢?框架
雖然應用場景不同,但數據庫和數據倉庫都是適用於結構化數據。在至關長的一段時間內,數據庫和數據倉庫聯合,共同知足企業的實時交易型業務和聯機分析型的業務。機器學習
在過去幾十年中,系統、應用程序和設備生成的數據量顯著增長。 數據無處不在。 有各類不一樣結構和格式的數據,如半結構化和非結構化數據,面對多種類型數據分析的需求也愈來愈複雜。分佈式
這個時候,人們又陷入了沉思,該找一個什麼樣的存儲來保存全部的原始數據,而且可讓多個應用進行讀取查詢。大數據須要使用好全部類型的數據,並不能拋棄這些數據,而且須要近似無限量的存儲,這些數據五花八門,又多又雜,該如何存儲呢?
索性就挖一個大坑吧,而後把全部的原始格式的數據一股腦地扔進去,這些數據就如同坑中的水,由於數據量巨大,這個坑也就變成了小湖泊。你須要什麼數據,直接在湖邊挖個溝渠,把數據引入到你的應用上面,這就是咱們所說的數據湖的雛形。
那麼數據湖究竟是什麼呢?咱們查看一下維基百科上面的解釋:
數據湖(Data Lake)是一個以原始格式存儲數據的存儲庫或系統。它按原樣存儲數據,而無需事先對數據進行結構化處理。一個數據湖能夠存儲結構化數據(如關係型數據庫中的表),半結構化數據(如CSV、日誌、XML、JSON),非結構化數據(如電子郵件、文檔、PDF)和二進制數據(如圖形、音頻、視頻)。
經過數據湖的定義,咱們能夠從中找出一些數據湖的特色,或者數據湖知足什麼條件。
我以爲數據湖就是一個架構體系,經過它咱們能夠快速地存儲、處理、分析海量的數據,同時可使用多種多樣的手段進行分析,全部的操做都是在安全合規的場景下進行;以數據爲導向,實現任意來源、任意速度、任意規模、任意類型數據的全量獲取、全量存儲和全生命週期管理;還能夠經過接口和外面的計算資源交互集成,知足各種企業級應用需求。
數據湖是用於存儲大量原始數據的存儲庫。 因爲數據原始且未經處理,所以其加載和更新速度很是快,但數據並未採用適合高效分析的結構。 能夠將數據湖看做是在引入數據進行修改並轉換爲適合執行分析的格式前的暫存點。
有了數據湖,企業分析人員不用在不一樣的數據倉庫和文件存儲之間進行頻繁切換,也不須要重複地寫抽取、加載的邏輯,極大提高了分析人員的的工做效率。
咱們上面是介紹了數據湖比較廣泛的定義,那麼 AWS 是如何定義數據湖的呢?
AWS 定義數據湖是一個集中式存儲庫,容許用戶以任意規模存儲全部結構化和非結構化數據。在 AWS 中, Amazon S3 能夠實現數據湖的這些功能,由於 Amazon S3 有不少特性能夠知足數據湖各式各樣的要求,在後面數據存儲方面,咱們將着重介紹 Amazon S3 的這些特性。
上圖中的整個方案是基於 AWS Lake Formation 構建,AWS Lake Formation 本質上是一個管理性質的組件,與其餘 AWS 服務互相配合,來完成整個企業級數據湖的構建。上圖從左到右,體現了數據獲取、數據存儲、數據處理、數據分析四個步驟,下面咱們將逐一介紹,闡述 AWS 提供的服務是如何幫助咱們使用數據湖。
如今,數據更容易收集,託管成本更低,數據獲取是整個數據湖構建的起始,既然 Amazon S3 是 AWS 數據湖的存儲,那咱們該如何把業務數據放入其中呢?
首先,須要判斷接入數據的類型,是結構化數據仍是非結構化數據,是流式的數據仍是批量的數據,而後再選擇合適的工具。AWS 針對不一樣場景提供了豐富的服務,幫助用戶將外部數據導入到數據湖 Amazon S3 中。
爲了使數據湖中的數據能夠統一進行管理,流入的數據須要包括元數據和實際數據兩個部分。元數據流入包括數據源建立、元數據抓取兩步,最終會造成數據資源目錄,並生成對應的安全設置與訪問控制策略。
AWS 提供了多種數據提取的服務,如:
這些服務能夠把各式各樣的數據從外部導入到 Amazon S3 中,具體每一個服務的詳細功能,AWS 都作了詳細的介紹,用戶能夠參考官方文檔進行配置。
數據湖的存儲主要是依託於 Amazon S3,Amazon S3 能夠理解爲數據湖最重要的一部分,Amazon S3 採用傳統文件系統的分層目錄結構和文件系統語義,同時具有 AWS 提供的安全性和可伸縮性。組織爲近乎無限大的文件系統。 其具備如下特徵:
AWS 的衆多服務均可以和 Amazon S3 無縫結合,如與 Hadoop 分佈式文件系統 (HDFS) 兼容,爲數據湖的數據注入與攝取提供了強大的支持。
數據處理這一部分主要是利用 AWS Glue 來進行處理,AWS Glue 是 ETL 和數據目錄服務,它是無服務器架構,僅爲做業實際使用的資源付費,方便易用,威力強大,支持自動 schema 發現,具備可視化 ETL 和代碼生成和靈活的任務調度程序,是 AWS 大數據處理中很是重要的一個組件。
AWS Glue 主要組件有數據目錄、做業編寫、做業執行,下面介紹每一個組件能夠作什麼事情:
總之,藉助 AWS Glue,咱們無需再去考慮數據源是什麼格式,是結構化仍是非結構化,AWS Glue 能夠自動智能地進行分析,推斷出數據架構,數據類型等等。應對底層數據架構不斷髮生的變化,若是沒有 AWS Glue,數據源結構發生變化,用戶須要從新去建立數據目錄,這些繁瑣的事情如今用戶不須要再去關係,AWS Glue 能夠通通搞定,數據分析人員能夠把更多的注意力放在業務實現方面。
AWS Glue 也具有機器學習的能力,能夠幫助用戶識別不一樣的數據集中重複的記錄,幫助用戶進行數據清理和轉換,這個功能不須要用戶寫一行代碼,也不須要具有專業機器學習的算法的能力,只需點擊幾下鼠標便可實現。
在企業裏面,通常分析做業都是 BI 報表類型,業務部門把想看的指標告訴數據分析人員,數據分析人員編寫 SQL 語句,而後運行結果提供給業務部門查看,可是因爲需求的多變和不明確性,這樣的過程會反反覆覆。
這是企業中一個很是典型的場景,可是在實際的使用過程當中,客戶可能還會須要更加複雜的一些分析手段,好比客戶想要經過機器查詢、經過 K/V 能夠快速地在海量數據中查詢須要的結果、想要實現全文檢索,或者流式快速對數據進行統計等。
面對以上的問題,咱們均可以經過 AWS 提供的服務進行實現。經過 Amazon Redshift 實現交互式查詢分析,使用 Amazon EMR 對海量數據進行 ETL 處理和分析,使用 Amazon ElasticSearch 實現全文檢索,Amazon Kinesis 實現流式快速數據統計等,藉助於 Amazon Athena 能夠直接對 Amazon S3 的數據進行 SQL 查詢,當下比較流行的機器學習方面也可也藉助 Amazon SageMaker 來實現,Amazon SageMaker 能夠讀取 Amazon S3 中的訓練數據,並將訓練好的模型回寫到 Amazon S3 中。
咱們能夠看到,在 AWS 數據湖上,這些分析都是經過不一樣的外部工具來實現,計算由外部的組件實現,存儲統一由 Amazon S3 提供,這也是 AWS 數據湖的獨特之處,計算與存儲分離。
數據的採集和生產最終是爲了決策,數據的各類分析要求基本已經知足了企業大部分的需求,那這些分析結果如何以可視化的效果展示從而幫助用戶決策呢?
在數據展現方面,AWS 也爲用戶提供了一款採用雲技術的快速商業智能服務 Amazon QuickSight,企業用戶能夠更加便捷、快速低成本地分析數據。
Amazon QuickSight 的定位是鏈接用戶與數據,它是整個 AWS 生態中離商業決策最近的服務,直接解決大數據應用的 「最後一千米」 問題。它不須要用戶有代碼能力,可自動識別和整合各類不一樣的數據源,包括與 Amazon RedShift、Amazon S三、Amazon Athena、Amazon Aurora、Amazon RDS、AWS IAM、AWS CloudTrail、Amazon Cloud Directory 等 AWS 服務的原生集成。提供實時交互式的數據查詢方式,而且自動進行數據可視化,最大程度下降了商業決策端用戶使用大數據的成本。
在企業數字化轉型的過程當中,勢必會有不少數據分散在各個地方,這些數據如何統一管理?AWS 給出的答案是須要一個統一的數據目錄用來註冊和管理數據的元數據信息。在 AWS 搭建一個這樣的數據目錄並不難,使用 AWS Glue Catalog 能夠很方便實現。
可是對於一個集中的數據目錄,如何管理權限邊界變成了一個問題,AWS 是如何管理權限邊界的呢?
AWS Glue Catalog 是經過 AWS IAM 對元數據進行精細化控制的,它能夠在整個數據目錄級別、數據庫級別、表級別對不一樣的 AWS IAM 用戶進行受權,很是靈活方便。這些權限管理能夠經過 AWS Lake Formation 來實現,AWS Lake Formation 的權限進一步能夠細分爲數據資源目錄訪問權限和底層數據訪問權限,分別對應元數據和實際存儲的數據。實際存儲數據的訪問權限又進一步分爲數據存取權限和數據存儲訪問權限。
綜上,AWS 數據湖方案成熟度高,特別是元數據管理、權限管理上考慮充分,打通了異構數據源與各種計算引擎的上下游關係,讓數據可以自由 「移動」 。在流計算和機器學習上,AWS 的解決方案也比較完善。在流計算方面,AWS 推出了專門的流計算組件 Amazon Kinesis,同時 Amazon Kinesis 還能夠訪問 AWS Glue 中的元數據,這一點也充分體現了 AWS 數據湖解決方案在生態上的完備性。
至此,圍繞着數據湖 AWS 提供整個一套大數據解決方案,那麼在每一個階段中,不一樣的數據類型和不一樣的分析需求應該如何知足,應如何調度和管理一個數據分析的應用呢?
若是咱們在 AWS 上面一步步配置的話,那會變得很是困難,畢竟 AWS 圍繞數據庫有如此衆多的服務,服務之間的關聯和權限配置變得很複雜,這時候就須要一個工具來幫助用戶把這些問題都搞定,AWS Lake Formation 能夠幫助用戶快速地搭建數據湖,而且也引入了安全管理機制,真正地幫助用戶把數據湖保護起來。
說了這麼多,那下面咱們使用 AWS Lake Formation 去構建一個數據湖吧。
上圖是一個數據湖的架構圖,咱們將準備兩份數據 sales 和 customers,會使用 AWS Glue 來存取數據的元數據,在使用 AWS Lake Formation 賦予用戶 salesuser 和 customersuser 使用這兩個數據表,最終他們將經過 Amazon Athena 來查詢須要的數據。
咱們準備了兩個數據文件,下面把他們各自的字段列舉一下:
一樣咱們也會建立兩個用戶,分別是 salesuser 和 customersuser,並賦予相應的權限:
下面開始讓咱們建立吧。
建立用戶這裏有幾個注意事項,咱們建立的用戶是須要能夠登陸 AWS Console 控制檯,用戶賦予如下幾項權限:AmazonS3FullAccess, AmazonAthenaFullAccess, CloudWatchLogsReadOnlyAccess, AWSCloudFormationReadOnlyAccess 和 AWSGlueConsoleFullAccess。
由於 AWS Glue crawler 須要從 Amazon S3 中爬取元數據,因此須要給 AWS Glue 建立一個 Role,賦予 PowerUserAccess 的策略。
爲數據湖建立一個 Amazon S3 Bucket,命名爲 wzlinux-datalake
,而後把數據上傳到上面,由於測試環境,咱們手動上傳這些數據,生產環境都是自動上傳更新數據。
在 Bucket 裏面建立兩個文件夾 data
和 script
,data
這個文件夾主要是存放數據湖數據,script
文件夾後面 Amazon Athena 會使用,做爲 Amazon Athena 查詢結果輸出位置。
在 data
目錄下面,建立兩個文件夾,一個是 sales
,一個是 customers
,把各自的 csv 文件傳到其中。
打開 AWS Lake Formation 控制檯,賦予使用的 AWS IAM 用戶 administrators 權限。
在 Databases 裏面,添加剛剛建立的存儲桶做爲數據庫,用做數據目錄,後面會用 AWS Glue 爬取,以下圖:
下一步來到 Data Lake locations,把建立的 Amazon S3 做爲數據湖存儲。
數據湖中的全部數據都須要被數據目錄所記錄纔可使用,數據目錄可使用 AWS Glue 來爬取建立,下面咱們配置數據目錄爬取任務。
選擇剛剛建立的數據目錄 wzlinux-db
,並賦予其爬取 Amazon S3 數據的權限。
權限設置以下。
而後找到 Crawlers,添加一個 Crawlers。
添加 Amazon S3 數據存儲的目錄。
選擇建立好的角色。
選擇在 AWS Lake Formation 建立好的數據庫做爲輸出目錄。
建立完成以後,運行咱們的爬網程序。
爬取完成以後,咱們就能夠去 AWS Lake Formation 裏面去查看數據目錄了,能夠看到多了兩張表。
目前數據湖的數據目錄咱們已經建立好了,如今咱們分別賦予用戶對數據目錄的操做權限,以知足咱們開始的要求。
首先爲 salesuser 添加權限,找到 Sales 表,選擇 Grant 按鈕,添加權限。
一樣的方式賦予 customersuser 權限。
權限受權好了,那咱們能夠分別登錄這兩個用戶進行數據查詢驗證。
首先咱們登錄 salesuser 用戶驗證測試,咱們能夠看到全部的表。
在查詢以前,咱們須要作一個設定,配置一下結果輸出,這也就是以前建立的 script
目錄。
而後咱們開始查詢,結果和咱們設定的同樣,能夠查看全部的列數據。
SELECT * FROM "wzlinux-db"."sales" limit 10;
如今咱們登錄另一個用戶查看,只能夠看到咱們分配的兩個列。
一樣的進行數據查詢,查看一下結果,和開始的設定也同樣。
能夠看到,全部的測試結果和以前預期的同樣,經過整個實驗過程,我相信你們對 AWS Lake Formation 如何規範化數據湖有了必定的瞭解。
這麼好的工具,你如今是否也想體驗一下呢,目前 AWS Lake Formation 在中國區的北京區域也已經上線,歡迎你們去使用體驗 AWS 數據湖的方便之處。