iT邦幫忙

0

Google Cloud的資料靈活性與可攜性

  • 分享至 

  • xImage
  •  

這一篇我們介紹Data Catalog(一種metadata 的管理服務)可以搜尋與管理在你的Google Cloud裡所有的資料。同時我們也會介紹DataPrep — 一種資料預先(transformation/enriching)處理的工具. Data Studio資料視覺化工具。 Datalab — 一種 Data Exploration工具。

Data lifecycle有許多面向來決定與設計storage system. 資料也許是運作在以下幾種方式

  • Cataloged
  • Preprocessed
  • Visualized
  • Explored
  • Processed with workflow

在這篇我們將會討論如何使用Data Catalog, 一種metadata management service來支援在Google Clod裡dataset探索與管理。之後我們會將注意力轉到Cloud dataprep, 一種資料預處理(transforming and enriching)流程工具, 再來是Data studio(一種資料視覺化工具)與Cloud Datalab (與資料互動探索與腳本編寫),在每一個case, 我們也會討論到一些典型的業務需求。

Cataloging and Discovery with Data Catalog
企業運作的越久組織越大所積累的資料就會越多,對我們的挑戰就是如何持續追蹤在這些龐大資料裡的資訊(metadata)。例如,你可能有上千個Cloud storage裡面包含了上千萬的資料檔案。我們的管理責任就須要持續保有這些資料的資訊,像是file裡的內容,結構化資料的schema version,兩個file內data的相關性,誰可以access data等工作。這一類的資料的metadata就變得相當重要,因為這可以幫助我們了解資料是不是可用,它代表甚麼意思,以及如何使用它。

Data Catalog是 GCP 對資料進行管理的託管式metadata service。它的主要功能是對企業資料提供單一,綜合view。 meatadatay在Bigquery,Cloud Pub/Sub以及其他透過APIs執行資料匯入時就會自動產生。Bigquery metadata在datasets, tables, view的level被收集。 而在Cloud Pub/Sub topic metadata也是被自動收集的。在我們使用 Data catalog服務時,我們需要在peoject 中啟用 Data Catalog API.

在Data Catalog 執行搜尋
這種搜尋功能就跟我們使用Gmail或Google drive的方式是一樣的。所以在執行搜尋時users可以filter與find native metadata, 這是從包含subject data和用戶生成的metadata的底層存儲系統中擷取的,這些metadata是從tag中收集的。我們稍後會提到tag這個概念。

要能執行這個功能,第一步就是要對這些data subject有權限,這些data subject像是 Cloud Pub/Sub topic的bigquery dataset. Data catalog就是一個單純對metadata執行收集與搜尋的功能,而不是在dataset, table, topic等等的這些資料。下圖為一個 Data catalog overview的範例

當這些storage system的metadata開始被收集後, Data Catalog就是一個read-only service. 任何metadata的異動都是其相對應的storage system能自行去更動的。Dara catalog 自動的從以下服務清單來收集

  • Cloud storage
  • Cloud Bigtable
  • Google Sheets
  • BigQuery
  • Cloud Pub /Sub

metadata也可以手動來收集。

Data Catalog的tag
Tag這一個概念是普遍在GCP與其他公有雲業者用在對其resource做metadata的儲存。Tags在metadata的使用是很廣泛的,像是如果有一個部門或團隊在Cloud storag裡的bucket or object給tag後就可以做資料分類的工作。

Data Catalog 使用template來協助管理使用者定義的metadata. 下圖為一個tag template, 這裡面包含了template detail以及tag的屬性

Dataprep 的資料預處理
我們在處理資料時,花最多時間的可能是在資料準備階段。Cloud Dataprep就是一個託管式服務來大幅減低從資料的explore, cleanse, and transformation等這種工作的準備時間。

一般會使用到dataprepe的業務要求通常是我們的原始資料格式並不適合用來做分析。這些狀況可能是從最簡單資料格式轉換到更複雜的情境,像是需要偵測不一致或資料品質很差的資料。

Cloud dataprep是一個用拖拉元件到workflow的互動式工具。使用者可以直接讀取Cloud Storage 跟Bigquery的資料,也可以直接從本機上傳資料。當我們上傳資料時Cloud dataprep會嘗試去偵測資料的schema, value的data type, 數字型資料的分佈,與遺失或不正常的values。下圖為一個使用者會看到一個summary data的處理過程。

上圖是一個關於資料屬性的統計分佈圖。

資料清理(Data Cleansing)
資料清理其實是一種煩人的工作。它通常需要仔細關注dataset中幾乎任何地方的資料細節。在一些狀況下,只有少數values是遺失或是不正確的資料格式,而其他的狀況可能是某一個column中的每個value都修要被修正。

在Cloud Dataprep的主要清理作業圍繞在columns name的更改,reformatting strings, and working with numeric values. 以下有一些資料清理工作的範例可以用Cloud dataprep來處理:

  • Renaming columns
  • Changing the datatype of a column
  • Copying from one column to another
  • Removing and deduplicating data
  • Modifying strings
  • Extracting values from strings
  • Formatting dates
  • Applying conditional transformations

在資料清理階段時我們與資料通常是交互的(iterative)。我們也許找到某些資料格式是需要去修改,然後開始資料探索後才能了解資料的異常並且修正。Cloud dataprep的交互特性支持這種臨時的、迭代的步驟序列.

Discovering Data
對資料分析或進行機器學習的另一個處理資料的步驟就是辨認資料的patterns與不一致性。Cloud Dataprep針對這一步驟提供以下的功能:

  • Filtering data
  • Locating outliers
  • Deriving aggregations, such as counts
  • Calculating values across columns
  • Comparing strings
    除了以交互方式執行資料清理和發現(Discovery)作業之外,我們還可以在稱為recipe的結構中擷取操作序列(sequences of operations)。

Enriching Data
有時,資料本身必需透過額外的columns增強資料本身的可分析性。例如,資料也需許會透過 join or append。 Cloud dataprep支援以下幾種data enrich資料的作業:

  • Adding two columns
  • Generating primary keys
  • Adding lookup data
  • Appending datasets
  • Joining datasets
  • Adding metadata
    在添加metadata的狀況下,Cloud dataprep 可以處理dataset中data之外的data。例如,我們可以引用source file path和filename、creation data、 import data和其他metadata屬性。

Importing and Exporting Data
Cloud Dataprep可以支援匯入以下檔案格式的資料:

  • Microsoft Excel (XLS/XLSX)
  • CSV
  • JSON, including nested
  • Plain text
  • Tab-separated values(TSV)
  • Parquet
    如果我們是將CSV或JSON 壓縮成GZIP, BZIP 與Sanppy的壓縮檔以及Avro file壓縮成Snappy. Cloud dataprep都可以直接讀取這些壓縮檔而不用先解壓縮。

同樣的Cloud dataprep也可以export data, export支援格式如下:

  • CSV
  • JSON
  • Avro
  • Bigtable tables
    同樣的我們再export出這些data時就可以一併壓縮成GZIP or BZIP的壓縮檔。當匯入資料時,cloud dataprep 創建對資料的reference,預期從local device上傳data時,在這種情況下會創建資料的副本。

Structuring and Validating Data
Cloud dataprep 具有用於更高階transformation的功能,包括以下內容:

  • Reshaping data

  • Splitting columns

  • Creating aggregations

  • Pivoting data

  • Manipulating arrays

  • Manipulating JSON
    還有驗證數據,包括profiling source data。 Profile 的資訊包含:

  • Mismatched values in columns

  • Missing values in columns

  • Statistical breakout by quartile
    在資料準備作業完成後,接下來我們就可以進行資料視覺化的作業。

使用Data Studio進行資料視覺化
這是一種報表與視覺化的工具。Data studio可以直接讀取並將資料轉化成表格與圖表。下圖為一個利用Data studio產生的報表。

Data Studio可以使用的場景有很多,像是data warehousing 的報表和監控系統的dashboard. Data studio有三個基本作業,分別是連接資料來源,資料視覺化與報表共用。

連接資料來源
Data studiog使用一種稱為connector的概念來連接data source,而data source稱為Dataset。Dataset的型式有非常多種包括relational DB table, Google sheet, Bigquery table。 Connector可以連接data source 中的全部或部分columns。而這樣的連接通常需要有授權(authorize)。

以下有三種類型的connector

  • Google connectors — 這是用來連結Google的其他服務,包含Analytics, Ads, Sheets, 與Bigquery
  • Partner Connectors — 這是第三方工具,主要連接非Google的服務像是FaceBook, GitHub, Reddit data。
  • Community Connectors — 顧名思義,這是個人自行開發的連接工具。

Data Studio可以連接的 data source也有三種型態

  • Live Connection Data source — 這些data source會隨著最基礎的data source的更動而自動更新。 data存儲在source system中。大部分的連接方式都屬於這種。
  • Extracted Data Source — data source連結的dataset是一個靜態的snapshot,所以如果data source需要從dataset update就要依需求。這樣的好處是會比live connection效能好。
  • Blended Data Source — 連接的是來自混合的data source的result,而最多可以混合5個data source.

當我們在Data Studio連接好Data Source後就可以視覺化資料了。

資料視覺化
Data Studio 採用元件拖拉的方式來製作報表。 Data Studio reports是一個表格與視覺化的集合。而這些視覺化的元件包含如下:

  • Line charts
  • Bar charts
  • Pie charts
  • Geo map
  • Area and bubble graphs
  • Paginated data tables
  • Pivot tables

報表共用
當我們完成報表後就可以與他人共用,我們可以給其他人view或是edit的權限。我們也可以排程來產生報表並轉成PDF檔案後發出email給相關人士。

使用Cloud Datalab進行資料探索
這是一個交互式的資料探索工具,除了資料探索還能進行資料轉換。Datalab 作為容器的instance運行,意思是我們在使用Cloud Datalab時,實際上是run一個 compute engine instance, 然後在上面跑一個container,之後用browser來連接在上面運行的Cloud datalab notebook, 如下圖

Cloud datalab container運行的就是一個Jupyter Notebook instance.

Jupyter Notebooks
jupyter notebook 是可以包含code和text的文檔。 code和text位於cell中。 單cell內的所有text和code都被視為單個 unit。 例如,當一個cell被執行時,cell中的所有code都會被執行。

Jupyter Notwbook被廣泛的使用在資料科學,機器學習與其他適合交互式、迭代開發工作。並且也支援多種開發語言包含Python 與SQL。

管理Cloud datalab instances
這是一個相關簡單的作業(create and use Cloud datalab instance)。當我們安裝好Cloud Software development kit(SDK),在安裝時要勾選 Datalab component的選項。這時我們就可以使用command line方式來create instance,例如下面例子

datalab create — machine-type n1-highmem-2 jason-datalab-1

當instance完成後,我們可以使用 datalab connect這個command line來連結節。而instance預設的port number 是8081,當然這個port是可以變動的。在上面create instance的範例中我們需要在後面加上 — port的參數來指定我們想要的port number。我們也可以用datalab list 來列出所有正在運作的instance。

當使用完畢時我們可以用datalab delete來刪除instance. 但是這只會刪除instance並不會刪除這個instance的 persistent disk。如果確定真的裡面的資料不要了,在我們delete instance時可以加上參數 — delete-disk。

在Cloud Datalab instance加入library
資料科學家或機器學習工程師通常在使用Python時會需要將library import近來。一些我們會常用到的library如下:

Numpy : 一種高效能的科學機算package

Scipy: 一個用在 science 與engineering的open source

Pandas: 一種用在tabular data的open source package

Scikit Learn: Open source的機器學習package

TensorFlow : Open source的深度學習的package

一些常用的library其實都有安裝在Cloud datalab中了,但如果沒有你要使用的library,你可以使用 conda install 或 pip install這兩種command line來安裝你所需要的library。例如我們要安裝資料分析的package — scikit-data,哪我們在Jupyter notebook cell的command就會是如下

!pip install scikit-data

驚嘆號的意思是告知Jupyter notebook這個command 是shell command不是python statement.

在某些情況下,探索性數據分析(EDA)本身就是目的,但在許多情況下,它是定義將重複性工作負載的第一步。 在這種情況下,我們可以使用 cloud composer 來編排這些工作負載。

使用Cloud Composer編排workflow
這是一個基於 Apache Airflow的全託管流程(workflow)編排服務。Workflow在Python是被定義為一個 Directed Acyclic Graph(DAG-有向無環圖)。而這種有向無環圖的workflow可以被使用在GCP的以下服務:

Bigquery
Cloud Dataflow
Cloud Dataproc
Cloud Datastore
Cloud Storage
Cloud Pub/Sub
AI Platform
在wsorkflow裡的element可以跑在地端或是其他的雲端業者,如同跑在GCP服務中。

Airflow 環境
Apache Airflow是一種分佈式系統,並且它需要好幾種GCP服務。當我們部署它時,Cloud composer environment也被同時部署。所謂的Environments是指一套運作在GKE上獨立的deployment。因為這樣,所以我們可以在同一個Project部署多個Cloud composer environment.

這個Cloud composer environment我們可以使用console或command (gcloud composer)來create。當我們create instance時,我們需要指定node / network configuration與其他環境相關的變數。

Creating DAGs
Airflow DAGs 在 Python 中被定義為一組operators和operators間的關係。一個operators就是在整個workflow其中的一個單一作業。最經常使用到的operators如下:

BashOperator: 在Bash shell執行command

PtyhenOperator: 執行Python函數

EmailOperator: 傳送email message

SimpleHTTPOperator: 傳送Http request

Database operators: 包含 PostgresOperator, MySQLOperator, SQLiteOperator, JdbcOperator

Sensor:等待creation event,例如特定時間或文件或其他資源的創建

Operators的執行順序是用 >>的符號。假如我們要使用 PythonOperator執行一個 write_file_python後再使用 BashOperator 執行 delete_tmp_files_bash,哪我們可以順序可以寫成以下

write_file_python >>delete_tmp_files_bash

Airflow Logs
在Airflow環境中會有兩種log的產生: Airflow logs 與 streaming logs. Airflow logs是每個單一的 DAG task產生出來的。這些log 檔案會存放在Cloud storage的 cloud composer environment的folder中。即使環境被關閉這些log還是會存在。所以這些log是需要手動刪除的。

streamming logs則是Airflow logs的 superset. 這些log是被存放在stackdriver並且能使用Logs Viewer來觀看。我們還可以使用基於log-based指標進行監控和告警。Airflow會有以下幾類的logs

Airflow-database-init : DB的初始化

Airflow-scheduler: scheduler產生的logs

Airflow-webserver: web interface產生的logs

Airflow-worker: 執行DGA作業時產生的logs

Airflow-monitoring:監控時產生的logs

Aitflow: 其他沒有分類的logs

總而言之,Cloud composer 的關鍵在於它是一種工作流程編排服務,它在 GKE 中運行並執行由執行tasks的operators組成的 Python 腳本中指定的執行時間。 任務可以按schedule、手動或回應外部事件執行。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言