Bỏ qua để đến nội dung

Data & Analytics – Athena, Redshift, OpenSearch, EMR, Glue

Amazon Athenadịch vụ truy vấn serverless để phân tích dữ liệu đang nằm trong Amazon S3. Điểm hấp dẫn của nó là bạn không phải cấp phát bất cứ hạ tầng gì — dữ liệu ở đâu thì truy vấn ngay ở đó.

  • Dùng ngôn ngữ SQL chuẩn để truy vấn các file (được xây trên nền Presto).
  • Hỗ trợ CSV, JSON, ORC, Avro, và Parquet.
  • Giá: $5.00 cho mỗi TB dữ liệu được quét (scanned).
  • Thường được dùng cùng Amazon QuickSight để làm reporting/dashboard.
  • Use case: business intelligence / analytics / reporting, phân tích và truy vấn VPC Flow Logs, ELB Logs, CloudTrail trails

Luồng điển hình: dữ liệu được load vào S3 BucketAmazon Athena query & analyzeAmazon QuickSight làm reporting & dashboards.

Vì Athena tính tiền theo lượng dữ liệu quét, tối ưu hiệu năng và tối ưu chi phí ở đây là cùng một việc.

  • Dùng dữ liệu dạng cột (columnar) để tiết kiệm chi phí (quét ít hơn). Apache Parquet hoặc ORC được khuyến nghị — cải thiện hiệu năng rất lớn. Có thể dùng Glue để chuyển dữ liệu sang Parquet hoặc ORC.
  • Nén dữ liệu để mỗi lần lấy về nhẹ hơn (bzip2, gzip, lz4, snappy, zlib, zstd…).
  • Phân vùng (partition) dataset trong S3 để truy vấn dễ dàng theo các cột ảo (virtual columns). Quy ước đường dẫn:
s3://yourBucket/pathToTable
/<PARTITION_COLUMN_NAME>=<VALUE>
/<PARTITION_COLUMN_NAME>=<VALUE>
/<PARTITION_COLUMN_NAME>=<VALUE>
/etc…

Ví dụ thực tế: s3://athena-examples/flight/parquet/year=1991/month=1/day=1/

  • Dùng file lớn hơn (> 128 MB) để giảm overhead.

Federated Query cho phép bạn chạy truy vấn SQL xuyên qua nhiều nguồn dữ liệuquan hệ, phi quan hệ, object store, và cả nguồn tự định nghĩa (trên AWS hoặc on-premises).

  • Nó dùng các Data Source Connector chạy trên AWS Lambda để thực hiện Federated Query — ví dụ connector cho CloudWatch Logs, DynamoDB, RDS
  • Kết quả được lưu lại vào Amazon S3.

Các nguồn mà slide liệt kê: Database (On-Premises), ElastiCache, DocumentDB, DynamoDB, Redshift, HBase in EMR, MySQL, Aurora, SQL Server.

Redshift dựa trên PostgreSQL, nhưng không dùng cho OLTP. Nó là OLAP – online analytical processing (phân tích và data warehousing).

  • Hiệu năng tốt hơn 10 lần so với các data warehouse khác, scale tới hàng petabyte dữ liệu.
  • Lưu dữ liệu theo cột (columnar storage) thay vì theo dòng, cùng parallel query engine.
  • Hai mode: Provisioned cluster hoặc Serverless cluster.
  • interface SQL để chạy truy vấn.
  • Các công cụ BI như Amazon QuickSight hoặc Tableau tích hợp được với nó.
  • So với Athena: Redshift cho truy vấn / join / aggregation nhanh hơn nhờ có index.

Một cluster có hai loại node, và phân biệt được chúng là bắt buộc:

Node Vai trò
Leader node Lập kế hoạch truy vấn (query planning)tổng hợp kết quả (results aggregation)
Compute node Thực thi truy vấn, rồi gửi kết quả về leader

Client kết nối qua JDBC/ODBC và gửi truy vấn (ví dụ SELECT COUNT(*) … FROM MY_TABLE GROUP BY …) tới Leader Node. Với Provisioned mode, bạn chọn instance type trước, và có thể reserve instance để tiết kiệm chi phí.

  • Redshift có mode “Multi-AZ” cho một số cluster.
  • Snapshotbackup tại một thời điểm của cluster, được lưu nội bộ trong S3.
  • Snapshot là incremental — chỉ lưu những gì đã thay đổi.
  • Bạn restore một snapshot vào một cluster mới.
  • Automated: mỗi 8 giờ, mỗi 5 GB, hoặc theo lịch; đặt retention từ 1 đến 35 ngày.
  • Manual: snapshot được giữ tới khi bạn xóa nó.
  • Bạn có thể cấu hình Redshift tự động copy snapshot (cả automated và manual) của một cluster sang một AWS Region khác — ví dụ snapshot từ us-east-1 được copy sang eu-west-1 rồi restore thành một Redshift Cluster mới ở đó.

Nguyên tắc vàng: insert theo lô lớn thì tốt hơn rất nhiều (large inserts are MUCH better). Có ba đường nạp dữ liệu:

  • Amazon Kinesis Data Firehose → Redshift Cluster (đi qua S3 copy ở bên dưới).
  • S3 dùng câu lệnh COPY — ví dụ:
copy customer
from 's3://mybucket/mydata'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

Đường đi của lệnh COPY này phụ thuộc cấu hình: không bật Enhanced VPC Routing thì traffic đi qua Internet; bật Enhanced VPC Routing thì traffic đi qua VPC.

  • EC2 Instance với JDBC driver → Redshift Cluster; ở đường này, tốt hơn là ghi dữ liệu theo batch.

Redshift Spectrum cho phép truy vấn dữ liệu đã nằm trong S3 mà không cần nạp vào Redshift.

  • Bắt buộc phải có một Redshift cluster đang chạy để bắt đầu truy vấn.
  • Truy vấn sau đó được gửi tới hàng nghìn node Redshift Spectrum để xử lý.

Luồng: client gửi truy vấn qua JDBC/ODBC (ví dụ SELECT COUNT(*) … FROM S3.EXT_TABLE GROUP BY …) tới Leader NodeCompute Nodes → đẩy xuống Redshift Spectrum (node 1, 2, … N) → đọc trực tiếp từ Amazon S3.

Amazon OpenSearchhậu duệ của Amazon ElasticSearch. Giá trị của nó thể hiện rõ nhất khi đặt cạnh DynamoDB: trong DynamoDB, truy vấn chỉ tồn tại theo primary key hoặc index; còn với OpenSearch, bạn có thể tìm kiếm trên bất kỳ field nào, kể cả khớp một phần (partial matches).

  • Vì thế thường dùng OpenSearch để bổ trợ cho một database khác, chứ không thay thế nó.
  • Hai mode: managed cluster hoặc serverless cluster.
  • Không hỗ trợ SQL một cách nguyên bản — có thể bật qua một plugin.
  • Ingest từ Kinesis Data Firehose, AWS IoT, và CloudWatch Logs.
  • Bảo mật qua Cognito & IAM, mã hóa KMS, và TLS.
  • Kèm theo OpenSearch Dashboards để visualization.

Ba mẫu tích hợp điển hình, đều đáng nhớ vì đề thi hay mô tả chúng bằng lời:

Với DynamoDB: ứng dụng làm CRUD trên DynamoDB TableDynamoDB StreamLambda FunctionAmazon OpenSearch. Sau đó ứng dụng dùng API tìm item trên OpenSearch và API lấy item từ DynamoDB — mỗi bên làm đúng việc mạnh của mình.

Với CloudWatch Logs: có hai đường

Đường Thành phần Độ trễ
Qua Lambda CloudWatch Logs → Subscription FilterLambda Function (do AWS quản lý) → OpenSearch Real time
Qua Firehose CloudWatch Logs → Subscription FilterKinesis Data Firehose → OpenSearch Near Real Time

Với Kinesis: Kinesis Data StreamsKinesis Data Firehose (near real time, có thể kèm data transformation bằng Lambda Function) → OpenSearch; hoặc Kinesis Data StreamsLambda Function (real time) → OpenSearch.

EMR là viết tắt của “Elastic MapReduce”. EMR giúp tạo các cluster Hadoop (Big Data) để phân tích và xử lý khối lượng dữ liệu khổng lồ.

  • Cluster có thể gồm hàng trăm EC2 instance.
  • EMR đi kèm sẵn Apache Spark, HBase, Presto, Flink
  • EMR lo toàn bộ việc cấp phát và cấu hình.
  • auto-scalingtích hợp với Spot instances.
  • Use case: data processing, machine learning, web indexing, big data
Node Vai trò
Master Node Quản lý cluster, điều phối, quản lý sức khỏe (health) — chạy dài (long running)
Core Node Chạy task và lưu dữ liệuchạy dài
Task Node (tùy chọn) Chỉ chạy taskthường dùng Spot

Các phương án mua:

  • On-demand: đáng tin cậy, dự đoán được, sẽ không bị terminate.
  • Reserved (tối thiểu 1 năm): tiết kiệm chi phí — EMR sẽ tự động dùng nếu có sẵn.
  • Spot Instances: rẻ hơn, có thể bị terminate, kém tin cậy hơn.

Cluster có thể là long-running, hoặc transient (tạm thời).

QuickSight là dịch vụ business intelligence serverless được hỗ trợ bởi machine learning, dùng để tạo dashboard tương tác.

  • Nhanh, tự động scale, nhúng được (embeddable), với giá theo session (per-session pricing).
  • Use case: business analytics, xây dựng visualization, phân tích ad-hoc, lấy insight kinh doanh từ dữ liệu.
  • Tính toán in-memory bằng engine SPICE nếu dữ liệu được import vào QuickSight.
  • Enterprise edition: có thể thiết lập Column-Level security (CLS).
  • Data Sources (AWS Services): RDS, Aurora, Redshift, Athena, S3, OpenSearch, Timestream.
  • Data Sources (Imports): ELF & CLF (Log Format).
  • Data Sources (SaaS)On-Premises Databases (JDBC).

Phần này chứa một chi tiết rất hay bị hỏi về quản lý người dùng:

  • Định nghĩa Users (bản standard) và Groups (bản enterprise).
  • Những user & group này chỉ tồn tại bên trong QuickSight, không phải IAM!
  • Một dashboard:
    • là một snapshot chỉ đọc (read-only) của một analysis mà bạn có thể chia sẻ;
    • giữ lại cấu hình của analysis (filtering, parameters, controls, sort).
  • Bạn có thể chia sẻ analysis hoặc dashboard với Users hoặc Groups.
  • Muốn chia sẻ một dashboard, trước tiên bạn phải publish nó.
  • Người xem dashboard cũng xem được dữ liệu bên dưới (underlying data).

AWS Glue là dịch vụ ETL (extract, transform, and load) được quản lý, hữu ích để chuẩn bị và biến đổi dữ liệu cho mục đích analytics. Nó hoàn toàn serverless.

Luồng cơ bản: Extract dữ liệu từ S3 BucketAmazon RDSTransform trong Glue ETLLoad vào Redshift (data warehouse).

Đây là mẫu hay được hỏi chung với Athena: Input S3 Bucket chứa CSVGlue ETL chuyển sang ParquetOutput S3 BucketAmazon Athena analyze.

Phần kích hoạt tự động: S3 PUT phát event notificationLambda Function (hoặc EventBridge làm giải pháp thay thế) → trigger Glue ETL Job.

Glue Data Catalogdanh mục các dataset của bạn. Cách nó hình thành và được dùng:

  • AWS Glue Data Crawler làm data discovery trên các nguồn: Amazon S3, Amazon RDS, Amazon DynamoDB, và các nguồn qua JDBC.
  • Crawler ghi metadata vào Glue Data Catalog — gồm các DatabaseTables (Metadata).
  • Catalog đó được dùng bởi Amazon Athena, Amazon Redshift Spectrum, Amazon EMR, và các Glue Jobs (ETL).
  • Glue Job Bookmarks: ngăn việc xử lý lại dữ liệu cũ.
  • Glue DataBrew: làm sạch và chuẩn hóa dữ liệu bằng các phép biến đổi dựng sẵn.
  • Glue Studio: GUI mới để tạo, chạy và giám sát ETL job trong Glue.
  • Glue Streaming ETL (xây trên Apache Spark Structured Streaming): tương thích với Kinesis Data Streaming, Kafka, MSK (managed Kafka).

Data lakemột nơi tập trung chứa toàn bộ dữ liệu của bạn cho mục đích analytics. AWS Lake Formation là dịch vụ được quản lý hoàn toàn, giúp dựng một data lake chỉ trong vài ngày.

  • Discover, cleanse, transform, và ingest dữ liệu vào Data Lake của bạn.
  • Tự động hóa rất nhiều bước thủ công phức tạp (thu thập, làm sạch, di chuyển, catalog dữ liệu…) và loại bỏ trùng lặp (de-duplicate) bằng ML Transforms.
  • Kết hợp dữ liệu có cấu trúc và phi cấu trúc trong cùng data lake.
  • Có sẵn source blueprint: S3, RDS, Relational & NoSQL DB
  • Fine-grained Access Control cho ứng dụng của bạn — ở mức dòng và mức cột (row and column-level).
  • Được xây trên nền AWS Glue.

Kiến trúc: các Data Sources (Amazon S3, RDS, Aurora, On-Premises Database SQL & NoSQL) được ingest vào AWS Lake Formation — nơi có Source Crawlers, ETL and Data Prep., Data Catalog, Security Settings, Access Control — rồi dữ liệu nằm trong Data Lake (lưu trong S3) và được Athena, Redshift, EMR (và QuickSight) truy vấn cho Users.

Dịch vụ này trước đây tên là Kinesis Data Analytics for Apache Flink.

  • Flink (viết bằng Java, Scala hoặc SQL) là một framework xử lý data stream.
  • Dịch vụ cho phép chạy bất kỳ ứng dụng Apache Flink nào trên một cluster được quản lý trên AWS.
  • Cấp phát tài nguyên compute, tính toán song song, tự động scale.
  • Backup ứng dụng (được triển khai dưới dạng checkpoint và snapshot).
  • Dùng được mọi tính năng lập trình của Apache Flink để biến đổi dữ liệu.

Nguồn đọc vào: Amazon MSK (Apache Kafka)Kinesis Data Streams.

Amazon Managed Streaming for Apache Kafka (Amazon MSK)giải pháp thay thế cho Amazon Kinesis.

  • Apache Kafka được quản lý hoàn toàn trên AWS.
  • Cho phép bạn tạo, cập nhật, xóa cluster.
  • MSK tạo và quản lý các node Kafka broker và node Zookeeper cho bạn.
  • Triển khai MSK cluster trong VPC của bạn, multi-AZ (tối đa 3 AZ để HA).
  • Tự động phục hồi khỏi các lỗi Apache Kafka thông thường.
  • Dữ liệu được lưu trên EBS volume, giữ bao lâu cũng được.
  • MSK Serverless: chạy Apache Kafka trên MSK mà không phải quản lý capacity — MSK tự cấp phát tài nguyên và tự scale compute & storage.

Producers (code của bạn) — nhận dữ liệu từ Kinesis, IoT, RDS… — write to topic trên MSK Cluster (gồm Broker 1, 2, 3replication giữa nhau). Phía kia, Consumers (code của bạn) poll from topic rồi đẩy tiếp tới EMR, S3, SageMaker, Kinesis, RDS

Kinesis Data Streams Amazon MSK
Kích thước message Giới hạn 1 MB Mặc định 1MB, cấu hình được lên cao hơn (ví dụ 10MB)
Đơn vị phân chia Data Streams với Shards Kafka Topics với Partitions
Thay đổi quy mô Shard Splitting & Merging Chỉ có thể thêm partition vào một topic
Mã hóa in-flight TLS PLAINTEXT hoặc TLS
Mã hóa at-rest KMS KMS

Amazon MSK được tiêu thụ bởi: Kinesis Data Analytics for Apache Flink, AWS Glue Streaming ETL Jobs (chạy trên Apache Spark Streaming), Lambda, và các ứng dụng chạy trên Amazon EC2, ECS, EKS.

Bài toán cuối chương gom gần hết các dịch vụ đã học thành một kiến trúc. Yêu cầu:

  • Pipeline ingest phải hoàn toàn serverless.
  • Thu thập dữ liệu theo thời gian thực.
  • Biến đổi dữ liệu.
  • Truy vấn dữ liệu đã biến đổi bằng SQL.
  • Báo cáo tạo ra từ các truy vấn phải nằm trong S3.
  • Nạp dữ liệu đó vào một warehouse và tạo dashboard.

IoT DevicesAmazon Kinesis Data Streams (real-time) → Amazon Kinesis Data Firehose (mỗi 1 phút, có AWS Lambda làm biến đổi dữ liệu) → Ingestion Bucket trên Amazon S3 → S3 trigger Amazon SQS (tùy chọn) → AWS Lambda pull data từ queue → Amazon Athena truy vấn → kết quả ghi vào Reporting Bucket trên S3 → được dùng bởi Amazon QuickSightAmazon Redshift Serverless.

  • IoT Core cho phép thu thập dữ liệu từ các thiết bị IoT.
  • Kinesis rất tốt cho việc thu thập dữ liệu thời gian thực.
  • Firehose giúp chuyển dữ liệu tới S3 gần thời gian thực (1 phút).
  • Lambda có thể giúp Firehose làm biến đổi dữ liệu.
  • Amazon S3 có thể gửi notification tới SQS.
  • Lambda có thể subscribe vào SQS(ta cũng đã có thể nối S3 trực tiếp tới Lambda).
  • Athena là dịch vụ SQL serverlesskết quả được lưu trong S3.
  • Reporting bucket chứa dữ liệu đã phân tích và có thể được dùng bởi các công cụ báo cáo như AWS QuickSight, Redshift
Dịch vụ Phải nhớ
Athena SQL serverless trên S3, nền Presto, hỗ trợ CSV/JSON/ORC/Avro/Parquet, $5.00 / TB quét; tối ưu bằng Parquet/ORC, nén, partition, file > 128 MB; Federated Query qua connector chạy trên Lambda, kết quả lưu về S3
Redshift Nền PostgreSQL nhưng là OLAP, 10x nhanh hơn, columnar + parallel query, provisioned hoặc serverless; nhanh hơn Athena nhờ index
Redshift cluster Leader node lập kế hoạch + tổng hợp kết quả · Compute node thực thi truy vấn
Redshift snapshot Lưu nội bộ trong S3, incremental, restore ra cluster mới; automated mỗi 8 giờ / mỗi 5 GB / theo lịch, retention 1–35 ngày; manual giữ tới khi xóa; copy snapshot sang region khác
Nạp dữ liệu Redshift Insert lô lớn tốt hơn nhiều; qua Firehose, qua COPY từ S3 (Enhanced VPC Routing → đi qua VPC thay vì Internet), hoặc JDBC từ EC2 theo batch
Redshift Spectrum Truy vấn dữ liệu đang ở S3 mà không cần nạp, nhưng vẫn cần một cluster đang chạy
OpenSearch Kế thừa ElasticSearch, search mọi field kể cả partial match, managed hoặc serverless, không native SQL (cần plugin), ingest từ Firehose/IoT/CloudWatch Logs, bảo mật Cognito & IAM, có OpenSearch Dashboards
EMR Cluster Hadoop, kèm Spark/HBase/Presto/Flink, hàng trăm EC2, auto-scaling + Spot; Master (quản lý) & Core (task + dữ liệu) chạy dài, Task node thường là Spot; cluster long-running hoặc transient
QuickSight BI serverless, per-session pricing, engine SPICE khi import dữ liệu, CLS ở Enterprise; user/group chỉ tồn tại trong QuickSight, không phải IAM; dashboard là snapshot read-only của analysis, phải publish trước khi share, người xem thấy cả dữ liệu nền
Glue ETL serverless được quản lý; chuyển CSV → Parquet cho Athena; Data Catalog do Crawler ghi metadata, dùng bởi Athena / Redshift Spectrum / EMR; Job Bookmarks chống xử lý lại, DataBrew, Glue Studio, Streaming ETL (Kinesis, Kafka, MSK)
Lake Formation Dựng data lake (lưu trong S3) trong vài ngày, xây trên nền Glue, blueprint sẵn cho S3/RDS/NoSQL, ML Transforms de-duplicate, quyền chi tiết tới mức dòng và cột
Managed Service for Apache Flink Tên cũ Kinesis Data Analytics for Apache Flink; Java/Scala/SQL, cluster được quản lý, auto scaling, backup bằng checkpoint/snapshot; đọc từ MSKKinesis Data Streamskhông đọc từ Data Firehose
Amazon MSK Kafka được quản lý, thay thế Kinesis; broker + Zookeeper do MSK quản lý, trong VPC của bạn, multi-AZ tới 3 AZ, dữ liệu trên EBS giữ bao lâu cũng được; MSK Serverless tự scale
Kinesis vs MSK Kinesis: 1 MB, Shard, split & merge, TLS · MSK: 1MB mặc định, cấu hình lên 10MB, Partition, chỉ thêm partition, PLAINTEXT hoặc TLS; cả hai mã hóa at-rest bằng KMS
Pipeline Big Data IoT → Kinesis Data Streams (real-time) → Firehose (1 phút, Lambda transform) → S3 ingestion bucket → SQS (tùy chọn) → Lambda → AthenaS3 reporting bucketQuickSight / Redshift Serverless