AWS-ML認證筆記 —Domain 1

Data Engineering(佔考試20%)

任務一:為ML建立資料儲存庫

  • 辨識資料來源(例如內容與地點。主要來源,如使用者資料)
  • 決定儲存媒介(如RDS/S3/EFS/EBS等)

任務二:辨識與實行一個資料擷取方案

  • 辨識資料作業的風格與類型(如批量batch或串流streaming)
  • 編排資料擷取流水線(批次與串流的ML工作負載),如AWS Kinesis/Data Firehose/ EMR/ Glue / Amazon managed Service for Apache Flink
  • 排程作業

任務三: 辨識與實行一個資料轉換方案

  • 資料流中進行資料轉換(ETL/Glue/EMR/AWS Batch)
  • 使用MapReduce來處理特定於ML的資料(如 Hadoop/Spark/Hive等)

S3 概觀

  • 資料在S3的bucket(類似傳統電腦目錄)中是一個Object(類似檔案)
  • Bucket的名稱必須是Globally unique name
  • Objects要有一個key。所謂的key就是Full path。
    例如: <jason_bucket>/jasonfolders/jason.txt
  • 通常需要進行partitioning
  • Object Tahs最多能到10個 — 這通常對其管理與資安是有幫助的

針對ML的部

  • 大多數是資料的最終存放地,像是用來當資料湖(但大部分的公司都會把它變沼澤)
  • 集中式的架構
  • 物件儲存(Object storage) — 意味著可存放任何格式的檔案
  • ML常用的資料格式 — CSV/JSON/Parquet/ORC/Avro/Protobuf

Data Partitioning

  • 分割區(Partitioning)的目的是讓資料能分散儲存進而分散處理,例如可以讓Athena進行資料查詢
  • Partitioning可以用日期 — 如 S3://bucket/jasondata/year/month/day/hour/data_xx.xx
  • 分割區可以用裝置/產品名稱— 如S3://bucket/jasondata/product-id/data_xx.xxx
  • 最重要要定義符合需求的分割區
  • 可以使用某些工具(如Glue)來處理資料分割區

儲存等級

  • S3 Standard -General Purpose
  • S3 Standard-Infrequent Access (IA)
  • S3 One Zone-Infrequent Access
  • S3 Glacier Instant Retrieval
  • S3 Glacier Flexible Retrieval
  • S3 Glacier Deep Archive
  • S3 Intelligent Tiering

可以手動或使用S3 Lifecycle Configuration(自動)在這些不同等級間移動資料

Durability與Availability

  • 99.999999999%(11個9’s)耐用性(durability),並且可跨多個AZ
  • 意味著每一萬年中儲存一千萬的物件(object)才會不見一個
  • 根據不同的等級來決定可用度(availability)。例如S3 STD有99.99%的可用度(每年不超過53分鐘的不可用)

S3 Standard — General Purpose

  • 99.99% 可用度
  • 存放會經常存取的資料
  • Low latency與High throughput
  • 就算同時有兩個AWS機房燒掉,檔案還是在

使用案例: 大數據分析/行動與遊戲的應用程式/內容發布

S3-Infrequent Access (IA)

當檔案不經常存取,但是要用時又要馬上能存取的。這類型的價格通常低於Standard。

  • S3 Standard-IA
    99.9%可用度,通常用在DR/備份居多
  • S3 One Zone-IA
    在一個AZ中的durability是11個九,但這個AZ掛掉時資料也會不見。99.5%可用度。可以用在地端機房的第二個備份

歸檔資料

八百年都不會用到的,這個儲存價錢非常低,但是取出價錢會比Standard還高。

  • S3 Glacier Instant Retrieval
    毫秒級的資料取出,一季存取一次很適合。最少要存90天才划算,因為沒存到90天還是要算90天的錢。
  • S3 Glacier Flexible Retrieval
    取出的速度又分Expedited(1–5分鐘)/Standard(3–5小時)/Bulk(5–12小時,等這麼久就不算取出的錢)。最少也要存90天
  • S3 Glacier Deep Archive
    看名字就知道要存很久的(最少180天)。取出速度分為Standard(12小時)/Bulk(48小時)

Intelligent Tiering

自動根據我們的檔案使用熱度來存放/移動該資料。資料取出不用錢。自動分層根據以下規則:

  • Frequent Access tier (automatic): default tier
  • Infrequent Access tier (automatic): objects not accessed for 30 days
  • Archive Instant Access tier (automatic): objects not accessed for 90 days
  • Archive Access tier (optional): configurable from 90 days to 700+ days
  • Deep Archive Access tier (optional): config. from 180 days to 700+ days

以下為各S3層級比較表

S3 Lifecycle規則

Transition Actions — 設定物件在不同等級之間移動的規則,例如:

  • 物件在建立後的60天後,將物件搬到 STD IA
  • 物件在建立後的6個月後,將物件搬到 Glacier

Expiration actions — 設定物件多久後刪掉

  • 例如log檔在建立的365天候就刪掉
  • 如果有開啟 versioning功能,可以刪除舊版本
  • 可以刪除不完整的Multi-part的上傳檔案

規則可以讓我們針對某個prefix或是某個特定的tag。

S3的資安

  1. User-based — 使用IAM policies
  2. Resource-based —
    — Bucket policies: 這從S3 console上設定,並且這一個policy可以跨AWS Account
    — Object ACL — finer grain(可以關掉)
    — Bucket ACL — 較少用(可以關掉)

一個IAM Principal可以存取S3 object的情況下是:

  • user的IAM permissions ALLOW
  • 或是(OR) resource policy ALLOW它
  • AND(並且)沒有任何特別說明的DENY規則

Bucket Policies

JSON based policies:

  • Resources: buckets and objects
  • Effect: Allow / Deny
  • Actions: Set of API to Allow or Deny
  • Principal: The account or user to apply the policy to

將policy設定在S3 Bucket上:

  • 可以將該bucket公開在網路上
  • 強制在上傳時就將檔案加密
  • 可以將存取權限給予其他AWS account(Cross Account)

S3的加密

分為兩大類別:(考試中會問哪一種狀況適用哪種加密方式)

第一大類: Server-Side Encryption (SSE)

SSE-S3
使用S3-Managed Keys (預設是啟用的),key的管理與產生全部都由AWS來管控。加密使用AES-256,要使用這一方式要在header加上”x-amz-server-side-encryption”: “AES256”。預設在建立bukcet/object就會使用。

SSE-KMS
key的管理與產生全部都由KMS來處理。使用KMS的好處是使用者有控制權,但不用搞底層的key的管理服務。另外稽核紀錄還會存放在CloudTrail中。使用這方式的header是”x-amz-server-side-encryption”: “aws:kms”

SSE-KMS有一些限制,當我們上傳(GenerateDataKey API)或下載(Decrypt API)檔案,S3都會Call KMS API。而KMS對其API呼叫是有限制的,根據不同的region會有每秒5500/10000/30000等次數限制。不過我們也是可以提出Quota increase的請求給AWS。

SSE-C —
由使用者自行管控key。S3不會儲存我們提供的key,而這樣的方式則必須使用https,因為加密金鑰會在每一次的http request之中。

第二大類是Client-Side Encryption

  • 使用client library,例如 Amazon S3 Client-Side Encryption Library
  • client在傳送到 S3 之前必須自行加密數資料
  • 從 S3 檢索資料時,client必須自行解密資料
  • 客戶自行管理key和加密週期

S3 Encryption in transit

S3預設是使用Https的(SSL/TLS),但也可以使用Http。我們可以強制client連線只能用Https。

我們可以使用bucket policy的“強制加密”,並拒絕任何 API call來 PUT 沒有加密標頭header的 S3 object(SSE-KMS 或 SSE-C),如下範例:

有一點比較重要的是,在S3的安全檢查機制中。Policy會先檢查,有過關再來看Default Encryption。

使用VPC Endpoint Gateway來連接S3

我們從VPC去存取S3可以透過Internet或VPC Gateway。一個是透過Public IP來存取S3一個則是透過Private IP。以安全性來說VPC Endpoint Gateway提供最大的網路安全性。所以在設定Bucket Policy時也要注意來源來IP是設定Public(AWS:SourceIP) or Private(AWS: SourceVpce)。

Kinesis概觀

這是AWS幫我們代管Apache Kafka的平台服務。用來處理應用程式日誌、指標資料、IoT、clickstreams,也能處裡real time的大數據,並且支援streaming processing frameworks(如Spark, NiFi等)。另外這個託管服務的資料是replicate在三個AZ之間的。Kinesis分為以下幾種服務:

  • Kinesis Streams: 低延遲且大規模資料串流擷取
  • Kinesis Analytics: 使用SQL語法進行即時的串流資料分析
  • Kinesis Firhose: 將串流資料載入到S3/Redshift/ElasticSearch/Splunk中
  • Kinesis Video Streams: 用於即時串流視訊

Kinesis Streams概觀

通常Stream會被劃分為有順序的Shards(也稱Pasrtitions)。產生資料的這一端稱為Producers,收取端稱為Consumers。

資料預設存放時間為24小時,但可以展延到365天。並且可以reprocess/replay資料。多個應用程式可以使用同同一個streams,一旦資料進入到Kinesis中就不能自行刪掉它,要等時間到。

Kinesis Data Stream分為以下兩種使用模式:

Provisioned mode:
說白話就是我們知道所要處理的資料量能,並且是固定住的。我們可以選擇Shards的數量,用手動或API的方式來擴展Shards的數量。 付費的方式是依據Shard的數量 X 每小時。Record有以下限制:

  • 每個Shards可以擷取的資料為 1MB/s (或是每秒1000筆 record)。看哪一個先到極限
  • 每個Shards可以產出的資料為 2MB/s (這理又分為 classic與 enhanced fans-out consumer兩種)

On-demand mode:
看名字就知道,這不需要預先知道資料處理量能。它一開始的處理量能是4MB/s 或 4000 record/s的資料擷取,並且會根據最近30天的資料處理量對其底層資源進行調整。費用是 per stream per hour & data in/out per GB。

Kinesis Data Stream的限制

Producer:

  • 每一個Shard的寫入限制 — 1MB/s or 1000 messages/s
  • ProvisionedThroughputException的限制

Consumer Classic:

  • 每一個Shard的讀取限制 — 2MB/s(對所有的consumers)
  • 每一個Shard的API呼叫限制 — 5次/s(對所有的consumers)

Kinesis Data Firehose

  • 全託管服務
  • Near Real Time(基於時間和大小的緩衝區,可以選擇停用)
  • 將資料導入 Redshift / Amazon S3 / ElasticSearch / Splunk
  • 自動縮放
  • 支援多種資料格式-從 CSV / JSON 到 Parquet / ORC 的資料轉換(僅適用於 S3)
  • 透過 AWS Lambda 進行資料轉換(例如:CSV => JSON)
  • 當目標是 S3 時支援壓縮(GZIP、ZIP 和 SNAPPY)
  • 用處理的資料量來算錢

Data Stream Vs. Firehose

Streams:

  • 能寫自己的代碼(Producer/Consumer)
  • Real time(Classic的延遲約為 200 毫秒,Enhance fan-out的延遲約為 70 毫秒)
  • 能夠On-Demand的自動縮放
  • 資料儲存1至365天,replay能力,multi consumers

Firehose:

  • 全託管,將資料導入到 S3、Splunk、Redshift、ElasticSearch
  • 使用 Lambda 進行無伺服器資料轉換
  • Near Real time
  • 自動縮放
  • 無資料存儲

Kinesis Analytics

使用場景:

  • Streaming ETL:Select columns,對串流資料進行簡單轉換
  • Continuous metric generation:例如手機遊戲的即時排行榜
  • 回應式分析:尋找某些標準並建立告警(過濾)

功能:

  • 用多少算多少(但並不便宜)
  • 無伺服器;自動縮放
  • 使用 IAM 權限存取串流來源和目標
  • SQL或Flink會消耗運算資源
  • Schema discovery
  • Lambda 可用於pre-porcessing

Kinesis Data Analytics的ML

RCF(Random Cut Forest)是用於串流中數字型欄位(numeric column)中異常偵測的 SQL 函數。例如:偵測金融業的詐欺爭偵測,會使用最近的歷史記錄來運算模型。

HOTSPOTS — 定位並傳回資料中相對密集區域的資訊(如下圖範例)。

Kinesis Data Analytics + Lambda

Lambda 也可以作為資料目的地。為後續的資料處理提供了很大的靈活性,例如:

  • 聚合列(Aggregating rows)
  • 轉換成不同的格式
  • 轉換和豐富數據
  • 加密

開放其他服務和目的地的存取 — S3、DynamoDB、Aurora、Redshift、SNS、SQS、CloudWatch

Managed Service for Apache Flink

先前用於 Apache Flink 或 Java 的 Kinesis Data Analytics

  • Kinesis Data Analytics 底層用的是 Flink
  • 現行支援Python和Scala
  • Flink是一個處理資料流的框架

MSAF 將 Flink 與 AWS 整合起來,我們可以從頭開始開發自己的 Flink 應用程式,然後透過 S3 將其載入到 MSAF 中,而不是使用 SQL。除了 DataStream API 之外,還有用於 SQL 存取的 Table API。最重要的它是serverless。

Kinesis Video Stream

Producers可以是安全攝影機、隨身攝影機、AWS DeepLens、智慧型手機相機、音訊來源、影像、雷達資料、RTSP 相機。一個producer對應一個video stream。並且有回放功能。

Consumer可以是我們自建的(如MXNet,Tensortflow)、AWS Sagemaker、Amazon Rekognition Video。資料可以保存從1小時到10年。以下為一個使用範例場景流程圖。

Glue Data Catalog

針對我們的表格資料進行自動探尋schema的Metadata儲存庫,既然是儲存庫所以schema也能有版本。另外與Athena與Redshift Spectrum整合(schema & Data discovery)。Glue Crawlers協助建立Glue Data Catalog

Crawlers(爬蟲)

  • 爬蟲會爬一遍資料來推斷資料的schema與分割區
  • 適用於 JSON、Parquet、CSV、關聯式儲存
  • 爬蟲適用於:S3、Redshift、 RDS
  • On Demand 或On Schedule來運作爬蟲
  • 需要 IAM role/credentials才能存取資料存儲

Glue與S3分割區

  • Glue 爬蟲將根據 S3 資料的組織方式提取分割區
  • 預先考量如何查詢 S3 中的資料湖,例如IoT設備每小時發送一次感測器資料
  • 主要以時間範圍(time range)進行查詢嗎?如果是這樣,將buckets設定為 s3://jason-bucket/dataset/yyyy/mm/dd/device
  • 是以裝置進行查詢嗎?如果是,將buckets設定為為 s3://jason-bucket/dataset/device/yyyy/mm/dd

Glue ETL

用來“轉換、清理、豐富”資料(在進行分析之前)

  • 使用Python或Scala產生ETL代碼
  • 可以用我們自己的 Spark 或 PySpark 腳本
  • 目標可以是 S3、JDBC(RDS、Redshift)或 Glue Data Catalog中

這是全託管,具有成本效益,只需為消耗的資源付費。作業在serverless Spark 平台上運行。Glue Scheduler 用於排程作業。Glue Triggers可根據「event」自動執行作業。

Glue ETL- Transformations

Bundled Transformation:

  • DropFields, DropNullFields — remove (null) fields
  • Filter — specify a function to filter records
  • Join — to enrich data
  • Map — add fields、delete fields、perform external lookups

ML Transformation — FindMatches ML:識別資料集中的重複或匹配資料,即使這些資料沒有common unique identifier且沒有欄位完全匹配。格式之間的轉換有 — CSV/JSON/Avro/Parq/ORC/XML。Apache Spark transformations (example: K-Means)。

Glue DataBrew

  • 讓我們"清理和標準化"資料而無需寫代碼
  • 將機器學習和分析資料準備時間縮短高達 80%
  • 資料來源包括S3、Redshift、Aurora、Glue Data Catalog…
  • 超果250 個現成的transformation來自動執行任務,如過濾異常、資料轉換、修正無效值…

針對ML的AWS Data Stores

Redshift:

  • Data warehouse(OLAP)服務
  • 可以將資料從S3載入到Redshift
  • 可以使用Redshift Spectrum直接query S3中的資料

RDS/Aurora:

  • RDBMS(OLTP)
  • 要先有底層資源啟用

DynamoDB:

  • NOSQL DB,Serverless服務,read/write的能力

S3:

  • Object storage
  • Serviceless,無限制的儲存空間
  • 能與其他AWS服務高度整合

OpenSearch:

  • 經過index的資料
  • 在資料點之間搜尋
  • Clickstream Analytics

AWS 資料流水線(Data Pipleline)功能

  • 資料目的地包括 S3、RDS、DynamoDB、Redshift 和 EMR
  • 管理作業間的依賴性
  • 重試並通知失敗
  • 資料來源可能位於地端機房
  • 高可用

資料流水線 VS. Glue

Glue:

  • Glue ETL — 運行是基於 Scala 或 Python 的 Apache Spark 代碼,專注於 ETL
  • Glue ETL — 不用管配置或管理資源
  • Data Catalog,使資料可供 Athena 或 Redshift Spectrum 使用

資料流水線:

  • 編排服務(Orchestration service)
  • 對底層資源有更多的控制權,所以可以直接存取EC2/EMR instance。

AWS Batch

  • 用 Docker image運行批次作業
  • 動態設定Insatnce(EC2 和 Spot instance)
  • 根據數量和要求的最佳數量和類型
  • 無需管理clusters,Fully serverless
  • 只需支付EC2 instance的費用
  • 可以用 CloudWatch Events 排程批次作業
  • 可以用AWS Step Functions 編排批次作業

Batch VS. Glue

Glue:

  • Glue ETL — 運行是基於 Scala 或 Python 的 Apache Spark 代碼,專注於 ETL
  • Glue ETL — 不用管配置或管理資源
  • Data Catalog,使資料可供 Athena 或 Redshift Spectrum 使用

Batch:

  • 對於任何運算作業,無論什麼作業(必須提供 Docker image)
  • 資源在我們的AWS account中建立,由 Batch 管理
  • 對於任何非 ETL 相關工作,Batch 可能會更好

AWS Step Functions

  • 用於設計工作流程(workflow)
  • 簡單的可視化
  • 代碼之外的高階錯誤處理與重試機制(error handling and Retry)
  • 稽核工作流程的歷史記錄
  • 能夠「等待」任何時間
  • State Machine的最長執行時間為 1 年

範例:訓練一個ML模型

範例:調整一個ML模型

範例:管理批次作業

即時的資料工程流水線

批次的資料工程流水線

分析的資料工程流水線

AWS DataSync

這是用於從地端機房到 AWS 儲存服務的資料遷移。DataSync Agent會部署成VM並連接到我們地端機房的儲存服務,如 NFS、SMB、HDF。另外遷移遷移過程中也會進行資料加密和資料驗證。

--

--

運用"雲端服務"加速企業的數位轉型願景
運用"雲端服務"加速企業的數位轉型願景

Written by 運用"雲端服務"加速企業的數位轉型願景

我們協助您駕馭名為"雲端運算"的怪獸,馴服它為您所用。諮詢請來信jason.kao@suros.com.tw. https://facebook.com/jason.kao.for.cloud

No responses yet