返回文章列表

AWS雲端資料轉換管道建置

本文介紹如何在 AWS 上建置高效的雲端資料轉換管道,涵蓋資料湖建置、ETL 流程、資料倉儲整合以及相關 AWS 服務應用,例如 S3、Glue、Redshift 等,並提供 Python 程式碼範例和架構圖示,協助讀者快速上手。

資料工程 雲端運算

隨著資料量爆炸性增長,企業需要更有效率的資料處理方案。AWS 雲端服務提供豐富的工具和資源,協助建構可擴充套件的資料轉換管道。本文將引導讀者運用 AWS Glue、S3、Redshift 等服務,開發一個兼具效能和彈性的資料處理架構,並示範如何進行資料擷取、轉換、載入(ETL)等流程。同時,文章也探討資料湖和資料倉儲的建置與整合,並提供 Python 程式碼片段,方便讀者理解和實作。

資料工程與AWS雲端資料轉換管道建置

在當今數位時代,企業對於資料處理和分析的需求日益增長。AWS(Amazon Web Services)提供了一套完整的雲端解決方案,幫助企業設計和建置大規模的資料轉換管道。本文將探討如何在AWS上進行資料工程,並建置高效的雲端資料轉換管道。

資料工程的興起與挑戰

隨著大資料成為企業的重要資產,資料工程的重要性也日益凸顯。資料工程師在其中扮演著關鍵角色,負責設計和維護大規模的資料處理系統。然而,隨著資料量的不斷增長,資料工程師面臨著諸多挑戰,包括資料儲存、處理和分析等。

AWS上的資料管理架構

AWS提供了一系列的服務和工具,幫助企業建置高效的資料管理架構。其中包括Amazon S3、Amazon Glue、Amazon EMR等服務。這些服務可以協助企業處理和分析大規模的資料,並提供高用性和可擴充套件性。

使用AWS建置資料湖

資料湖是一種集中式的資料儲存函式庫,可以儲存原始的、未經處理的資料。AWS上的Amazon S3是建置資料湖的理想選擇。透過使用Amazon S3,企業可以儲存和管理大量的資料,並提供高用性和可擴充套件性。

import boto3

# 建立S3客戶端
s3 = boto3.client('s3')

# 建立S3儲存桶
bucket_name = 'my-data-lake'
s3.create_bucket(Bucket=bucket_name)

內容解密:

  1. 匯入boto3函式庫:boto3是AWS SDK for Python,允許Python開發者直接在Python程式中建立、設定和操作AWS服務。
  2. 建立S3客戶端:使用boto3.client(‘s3’)建立S3客戶端,以便與S3服務進行互動。
  3. 建立S3儲存桶:使用s3.create_bucket方法建立一個新的S3儲存桶,這是儲存資料的第一步。

資料轉換管道的建置

在AWS上建置資料轉換管道需要使用多種服務和工具。其中包括AWS Glue、Amazon EMR等服務。這些服務可以協助企業處理和分析大規模的資料,並提供高用性和可擴充套件性。

使用AWS Glue進行資料轉換

AWS Glue是一種完全託管的ETL(提取、轉換、載入)服務,可以協助企業處理和分析大規模的資料。透過使用AWS Glue,企業可以輕鬆地進行資料轉換和處理。

import awsglue
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

# 建立GlueContext
glueContext = GlueContext(SparkContext.getOrCreate())

# 載入資料
dyf = glueContext.create_dynamic_frame.from_catalog(database="my_database", table_name="my_table")

# 轉換資料
dyf = dyf.apply_mapping([("column1", "string", "column1", "string")])

# 載入資料到目標
glueContext.write_dynamic_frame.from_options(dyf, connection_type="s3", connection_options={"path": "s3://my-bucket/output/"}, format="csv")

內容解密:

  1. 匯入必要的模組:匯入awsglue和其他必要的模組,以便使用AWS Glue的功能。
  2. 建立GlueContext:使用GlueContext(SparkContext.getOrCreate())建立GlueContext,這是進行ETL作業的基礎。
  3. 載入資料:使用glueContext.create_dynamic_frame.from_catalog方法從目錄中載入資料。
  4. 轉換資料:使用dyf.apply_mapping方法對資料進行轉換,這裡是將column1從string轉換為string(實際應用中可能是不同型別的轉換)。
  5. 載入資料到目標:使用glueContext.write_dynamic_frame.from_options方法將轉換後的資料載入到S3儲存桶中,格式為CSV。

AWS 資料工程師工具箱與資料湖架構實作

在現代大資料處理和分析的領域中,AWS 提供了一系列強大的工具和服務來支援資料工程師的工作。從資料擷取、轉換到分析的整個流程,AWS 的服務能夠有效地支援各種需求。

AWS 服務在資料工程中的角色

AWS 提供多種服務以支援資料工程的各個環節,包括資料擷取、轉換、協調以及消費。

資料擷取服務

  1. Amazon Database Migration Service (DMS):用於將現有的資料函式庫遷移到 AWS 上的服務,支援同質和異質資料函式庫之間的遷移。

  2. Amazon Kinesis:適用於串流資料擷取,能夠即時處理和分析大量資料流。

  3. Amazon MSK (Managed Streaming for Apache Kafka):提供完全託管的 Apache Kafka 服務,用於串流資料處理。

  4. Amazon AppFlow:用於從 SaaS 應用程式中擷取資料的服務,簡化了資料整合流程。

  5. Amazon Transfer Family:支援使用 FTP/SFTP 協定進行資料傳輸的服務。

  6. Amazon DataSync:用於將本地儲存裝置中的資料遷移到 AWS 的服務。

  7. AWS Snow 系列裝置:針對大量資料傳輸的實體裝置,能夠加速大規模資料遷移。

資料轉換服務

  1. AWS Lambda:無伺服器運算服務,適用於輕量級的資料轉換任務。

  2. AWS Glue:無伺服器 Spark 處理服務,用於大規模資料轉換和整合。

  3. Amazon EMR:根據 Hadoop 生態系統的大資料處理服務,適用於複雜的資料處理需求。

資料協調服務

  1. AWS Glue Workflows:用於協調 Glue 元件的工作流程管理服務。

  2. AWS Step Functions:用於管理複雜工作流程的服務,支援多種 AWS 服務的整合。

  3. Amazon Managed Workflows for Apache Airflow (MWAA):完全託管的 Apache Airflow 服務,用於工作流程管理和任務排程。

資料安全與治理

在進行大資料處理和分析時,資料的安全性和治理是至關重要的。AWS 提供多種服務來支援這方面的需求。

  1. AWS Key Management Service (KMS):用於管理和控制加密金鑰的服務,確保資料的安全性。

  2. Amazon Macie:自動化資料發現和分類別的服務,用於保護敏感資料。

  3. Amazon GuardDuty:威脅檢測服務,用於監控 AWS 環境中的可疑活動。

  4. AWS Identity and Access Management (IAM):身份和存取管理服務,用於精細控制使用者和資源的許可權。

  5. AWS Lake Formation:用於建立和管理資料湖的服務,簡化了資料湖的設定和許可權管理。

資料湖與資料倉儲架構

在設計大資料架構時,資料湖和資料倉儲是兩個重要的概念。AWS 提供了靈活的解決方案來支援這兩種架構。

  1. 資料湖架構:使用 Amazon S3 作為核心儲存層,結合 AWS Glue 和其他服務來進行資料處理和分析。

  2. 資料倉儲架構:利用 Amazon Redshift 進行高效的查詢和分析,結合 Redshift Spectrum 可以直接查詢 S3 中的資料。

  3. Lakehouse 架構:結合了資料湖和資料倉儲的優點,提供了一個統一的大資料分析平台。AWS 提供了一系列服務來支援 Lakehouse 架構的實作。

內容解密:

本篇文章主要闡述了 AWS 在大資料處理和分析領域中的各種工具和服務。首先介紹了 AWS 在資料工程中的角色,包括資料擷取、轉換、協調及消費等環節所使用的不同服務。接著討論了在進行大資料處理時,如何確保資料的安全性和治理。最後,文章概述了在 AWS 上設計和實作資料湖與資料倉儲架構的方法,以及如何利用 Lakehouse 架構來結合兩者的優勢,為讀者提供了一個全面性的指引。

@startuml
start
:資料擷取;
:資料轉換;
:資料協調;
:資料消費;
stop

partition "資料安全與治理" {
  :AWS KMS;
  :Amazon Macie;
  :Amazon GuardDuty;
}

partition "資料湖與資料倉儲架構" {
  :資料湖架構;
  :資料倉儲架構;
  :Lakehouse 架構;
}
@enduml

此圖示說明瞭大資料處理流程及相關的安全治理與架構設計概念。

雲端產業的快速變化

雲端產業,尤其是AWS,正不斷推出新的服務和改進現有的服務。本文中的截圖可能會與讀者在完成實作練習時在AWS控制檯中看到的不同,但詳細的逐步指示應該能夠幫助讀者跟進。任何可能顯著影響實作練習的變化都將在相關章節的GitHub儲存函式庫中註明。

取得範例程式碼和資源

此圖示代表本文內容與AWS資源之間的關係

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title AWS雲端資料轉換管道建置

package "Python 應用架構" {
    package "應用層" {
        component [主程式] as main
        component [模組/套件] as modules
        component [設定檔] as config
    }

    package "框架層" {
        component [Web 框架] as web
        component [ORM] as orm
        component [非同步處理] as async
    }

    package "資料層" {
        database [資料庫] as db
        component [快取] as cache
        component [檔案系統] as fs
    }
}

main --> modules : 匯入模組
main --> config : 載入設定
modules --> web : HTTP 處理
web --> orm : 資料操作
orm --> db : 持久化
web --> cache : 快取查詢
web --> async : 背景任務
async --> fs : 檔案處理

note right of web
  Flask / FastAPI / Django
end note

@enduml

內容解密:

此圖示顯示了本文內容、實作練習、AWS服務以及GitHub儲存函式庫之間的關係。本文內容指導讀者完成實作練習,這些練習使用各種AWS服務。相關的程式碼和資源存放在GitHub儲存函式庫中,供讀者下載和使用。

資料工程與AWS簡介

資料工程是目前需求極高的職業領域,隨著資料對於各規模組織的重要性日益增加,具備建構複雜資料管線能力的人才備受青睞。資料工程師負責將原始資料進行擷取、轉換和最佳化,以滿足不同資料使用者的需求,這是一個充滿挑戰且具有價值的工作。

本章節將探討資料如何成為企業的重要資產,並介紹資料工程的基礎概念,包括治理和安全等議題。同時,我們也將瞭解AWS提供的服務如何成為資料工程師的重要工具,並透過實際操作建立AWS帳戶和使用諸如Amazon S3、AWS Lambda和AWS Identity and Access Management(IAM)等服務。

資料工程的崛起

大資料已經成為企業的重要資產,各大企業紛紛利用大資料分析來推動業務增長。例如,TikTok透過分析大量使用者資料來提供個人化推薦,而Amazon則根據使用者的購買歷史來推薦相關產品。大資料也被應用於醫療保健和金融領域,幫助企業做出更明智的決策。

建立AWS帳戶

在進行實際操作之前,我們需要建立一個AWS帳戶。以下是建立AWS帳戶的步驟:

  1. 登入AWS官網並點選「建立AWS帳戶」。
  2. 輸入您的電子郵件地址和密碼。
  3. 填寫您的聯絡資訊和付款資訊。
  4. 透過電話或簡訊驗證您的身份。
  5. 選擇您的支援方案並完成帳戶建立。
import boto3
import awswrangler as wr
from urllib.parse import unquote_plus

程式碼解析:

此段程式碼匯入了三個重要的Python套件:

  • boto3:AWS的Python SDK,用於與AWS服務進行互動。
  • awswrangler:一個用於處理AWS資料的Python套件,提供了簡化AWS資料操作的功能。
  • unquote_plus:用於解碼URL編碼的字串。
$ aws s3 cp test.csv s3://dataeng-landing-zone-initials/testdb/csvparquet/test.csv

命令解析:

此命令使用AWS CLI將本地檔案test.csv上傳至S3儲存桶s3://dataeng-landing-zone-initials/testdb/csvparquet/中。

  • aws s3 cp:表示使用AWS CLI進行S3檔案複製操作。
  • test.csv:本地檔案名稱。
  • s3://dataeng-landing-zone-initials/testdb/csvparquet/test.csv:S3儲存桶中的目標路徑和檔案名稱。