Ngân hàng đề — AWS Certified Data Engineer Associate
Tìm thấy 867 câu.
An analytics organization has been acquired by a leading media company. The analytics organization has 10 independent applications with an on-premises data footprint of about 70 Terabytes for each application. The CTO of the media company has set a timeline of two weeks to carry out the data migration from the on-premises data center to the AWS Cloud and establish connectivity.
Which of the following are the MOST cost-effective options for completing the data transfer and establishing connectivity? (Select two)
-
A
Order 10 AWS Snowball Edge Storage Optimized devices to complete the one-time data transfer
-
B
Setup AWS Direct Connect to establish connectivity between the on-premises data center and AWS Cloud
-
C
Setup AWS Site-to-Site VPN to establish on-going connectivity between the on-premises data center and AWS Cloud
-
D
Order 70 AWS Snowball Edge Storage Optimized devices to complete the one-time data transfer
-
E
Order 1 AWS Snowmobile to complete the one-time data transfer
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Đề mô tả một tổ chức phân tích có 10 ứng dụng độc lập, mỗi ứng dụng khoảng 70 TB dữ liệu tại data center on-premises, tổng cộng khoảng 700 TB. Câu hỏi yêu cầu chọn hai phương án MOST cost-effective để vừa chuyển dữ liệu một lần, vừa thiết lập kết nối giữa on-premises và AWS Cloud.
Cụm từ quyết định đáp án là "timeline of two weeks" — hai tuần. Đây là ràng buộc lọc sạch các phương án: bất kỳ giải pháp nào cần thời gian triển khai dài hơn hai tuần đều bị loại, bất kể nó tốt đến đâu về mặt kỹ thuật. Cụm thứ hai là "70 Terabytes for each application" — con số này quyết định số lượng thiết bị cần đặt. Và cụm "establishing connectivity" cho biết đề hỏi hai việc khác nhau: một lần chuyển khối dữ liệu lớn, và một đường kết nối duy trì lâu dài — nên hai đáp án phải giải quyết hai vế này, không phải hai cách làm cùng một việc.
✅ Vì sao đáp án đúng là đúng
A — Đặt 10 thiết bị AWS Snowball Edge Storage Optimized. Mỗi thiết bị Snowball Edge Storage Optimized cung cấp dung lượng HDD dùng được cỡ 80 TB, đủ chứa trọn 70 TB của một ứng dụng. Mười ứng dụng × một thiết bị mỗi ứng dụng = 10 thiết bị, và vì các ứng dụng độc lập nhau nên việc gán mỗi thiết bị cho một ứng dụng cũng gọn về mặt vận hành. Snowball là phương án thiết kế đúng cho tầm dữ liệu vài chục TB đến vài PB, và vì thiết bị chạy song song nên toàn bộ 700 TB kịp trong khung hai tuần.
C — Thiết lập AWS Site-to-Site VPN. Đây là vế "establishing connectivity". Site-to-Site VPN dựng đường IPSec mã hoá giữa mạng on-premises và VPC, đi qua Internet công cộng nên không cần chờ kéo đường vật lý — cấu hình xong trong thời gian rất ngắn. Nó phù hợp khi cần kết nối gấp, nhu cầu băng thông vừa phải, và chấp nhận được độ biến thiên vốn có của Internet. Với deadline hai tuần, đây là lựa chọn khả thi duy nhất trong danh sách cho phần kết nối, đồng thời rẻ hơn hẳn vì không có chi phí đường truyền riêng.
❌ Vì sao các phương án còn lại sai
B — AWS Direct Connect. Đây là phương án gần đúng nhất và cũng là bẫy chính. Direct Connect cho đường mạng riêng, không đi qua Internet, băng thông ổn định — về mặt kỹ thuật nó tốt hơn VPN. Nhưng nó hỏng ở đúng hai ràng buộc mà đề nêu: thời gian triển khai (phải làm việc với đối tác, kéo cáp chéo tại Direct Connect location — thường tính bằng tháng, vượt xa hai tuần) và chi phí (đầu tư đáng kể cho port và đường truyền, ngược với yêu cầu "MOST cost-effective"). Nếu đề không có mốc hai tuần, đáp án này sẽ đổi.
D — Đặt 70 thiết bị Snowball Edge Storage Optimized. Đúng loại thiết bị, sai số lượng. Con số 70 đến từ việc hiểu nhầm "70 TB mỗi ứng dụng" thành "70 thiết bị". Vì mỗi thiết bị chứa được khoảng 80 TB, 10 thiết bị đã đủ cho 700 TB; đặt 70 thiết bị là trả tiền cho gấp bảy lần số thiết bị không dùng tới — vi phạm trực tiếp tiêu chí cost-effective.
E — Một chiếc AWS Snowmobile. Snowmobile là container kéo bằng xe tải, dung lượng tới cỡ hàng chục petabyte, dành cho khối dữ liệu từ khoảng 10 PB trở lên tại một địa điểm. Ở đây tổng dữ liệu chỉ khoảng 700 TB — chưa tới 1 PB, tức nhỏ hơn ngưỡng hợp lý của Snowmobile cả một bậc độ lớn. Dùng Snowmobile cho lượng dữ liệu này là dư thừa và tốn kém; Snowball mới là công cụ đúng tầm.
📌 Điểm cần nhớ
- Ngưỡng chọn thiết bị migration: dữ liệu cỡ hàng chục TB đến vài PB → Snowball Edge; từ khoảng 10 PB trở lên tại một địa điểm → Snowmobile. Luôn nhẩm tổng dung lượng trước khi chọn.
- Direct Connect vs Site-to-Site VPN gần như luôn được phân biệt bằng thời gian và chi phí: đề nhắc "urgent", "immediate", "in days/weeks", "cost-effective" → VPN; đề nhắc "consistent bandwidth", "private, not over the Internet", "predictable latency" và không giới hạn thời gian → Direct Connect.
- Đọc kỹ số lượng thiết bị trong phương án: đề thường cài sẵn một phương án đúng loại nhưng sai số lượng, lấy chính con số trong đề bài làm mồi. Hãy chia tổng dung lượng cho dung lượng mỗi thiết bị.
- Câu "Select two" mô tả hai nhu cầu khác nhau (chuyển dữ liệu một lần + kết nối lâu dài) thì hai đáp án phải phủ hai nhu cầu đó, không được chọn hai phương án cùng giải quyết một vế.
A nightly cron job generates a customer data file of 1 GB size in .xls format and stores it in an Amazon S3 bucket. A data engineer is tasked with concatenating the column in the file that contains customer first names with the column that contains customer last names and then calculating the number of distinct customers in the file.
Which of the following will you suggest to address this requirement with the least operational overhead?
-
A
Leverage AWS Glue DataBrew to create a recipe that uses the COUNT_DISTINCT aggregate function to determine the number of distinct customers
-
B
Query the customer data file in .xls format stored in Amazon S3 using SQL commands via Amazon Athena
-
C
Leverage AWS Glue DataBrew to create a recipe that uses the FLAG_DUPLICATE_ROWS function to determine the number of distinct customers
-
D
Develop an Apache Spark job in an AWS Glue notebook to read the file in Amazon S3 and determine the number of distinct customers
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Đề mô tả một cron job chạy hằng đêm sinh ra file dữ liệu khách hàng 1 GB, định dạng .xls, lưu trong Amazon S3. Việc cần làm gồm hai bước: nối (concatenate) cột họ với cột tên, rồi đếm số khách hàng riêng biệt (distinct).
Hai cụm từ quyết định đáp án:
.xlsformat — đây là định dạng bảng tính nhị phân của Excel, không phải text phân tách. Cụm này một mình đã loại được phương án dựa trên Athena.least operational overhead— công sức vận hành ít nhất. Cụm này phân biệt giữa công cụ trực quan không cần viết code và việc tự phát triển job xử lý dữ liệu.
Khi hai ràng buộc này đi cùng nhau, câu hỏi thực chất là: công cụ nào vừa đọc được .xls trực tiếp trên S3, vừa cho phép làm cả biến đổi cột lẫn phép đếm distinct mà không phải viết dòng code nào.
✅ Vì sao đáp án đúng là đúng
Đáp án đúng là A — dùng AWS Glue DataBrew, tạo recipe với hàm COUNT_DISTINCT.
AWS Glue DataBrew là công cụ chuẩn bị dữ liệu dạng trực quan (visual data preparation), thiết kế để người dùng làm sạch và chuẩn hoá dữ liệu mà không cần viết code. DataBrew cung cấp sẵn hàng trăm phép biến đổi kiểu point-and-click: bỏ giá trị null, thay giá trị thiếu, sửa lệch schema, tạo cột mới từ hàm — trong đó có cả việc ghép nội dung nhiều cột thành một cột mới, đúng yêu cầu nối họ với tên trong đề.
Phần đếm thì dùng đúng hàm mà đề cần: COUNT_DISTINCT trả về tổng số giá trị riêng biệt lấy từ các cột nguồn được chọn, kết quả đặt vào một cột mới; giá trị rỗng và null bị bỏ qua. Ghép hai bước lại — tạo cột họ tên đầy đủ, rồi COUNT_DISTINCT trên cột đó — là ra chính xác số khách hàng riêng biệt.
Vì toàn bộ quy trình gói trong một recipe trực quan, không phải viết, kiểm thử hay bảo trì script nào, đây là phương án có operational overhead thấp nhất trong bốn lựa chọn.
❌ Vì sao các phương án còn lại sai
B — Query file .xls trên S3 bằng SQL qua Amazon Athena. Đây là phương án sai vì lý do kỹ thuật cứng, không phải vì "tốn công". Athena đọc được các định dạng như CSV, TSV, file phân tách theo ký tự tuỳ chọn, JSON, các định dạng thuộc hệ Hadoop (ORC, Apache Avro, Parquet), cùng một số dạng log (CloudTrail, Apache web server, Logstash). .xls không nằm trong số đó — Athena không có SerDe để đọc định dạng bảng tính nhị phân của Excel. Nghe thì rất hợp lý ("SQL trên S3, serverless, ít vận hành"), nhưng truy vấn sẽ không chạy được ngay từ đầu.
C — DataBrew nhưng dùng hàm FLAG_DUPLICATE_ROWS. Đây là phương án gần đúng nhất và cũng là bẫy chính: đúng dịch vụ, sai hàm. FLAG_DUPLICATE_ROWS tạo một cột mới, đánh dấu ở mỗi dòng xem dòng đó có trùng khớp hoàn toàn với một dòng xuất hiện trước đó trong dataset hay không. Lần xuất hiện đầu tiên không bị đánh dấu vì nó không trùng với dòng nào trước nó. Kết quả nhận được là một cột cờ theo từng dòng, không phải con số đếm — muốn ra số khách hàng riêng biệt vẫn phải làm thêm bước nữa. Trong khi COUNT_DISTINCT trả thẳng con số cần tìm.
D — Viết job Apache Spark trong AWS Glue notebook. Về mặt kỹ thuật thì hoàn toàn khả thi: đọc file từ S3 rồi dùng hàm countDistinct là ra kết quả đúng. Nhưng phương án này đòi hỏi phải tự phát triển script, kiểm thử và bảo trì nó về sau — tức là operational overhead đáng kể. Khi đề bài đã ghi rõ "least operational overhead" mà vẫn tồn tại một phương án no-code làm được cùng việc, thì phương án viết code bị loại.
📌 Điểm cần nhớ
- Định dạng file là bộ lọc cứng, xét trước tiêu chí "ít vận hành". Athena không đọc được
.xls; danh sách định dạng Athena hỗ trợ (CSV/TSV/delimited, JSON, ORC, Avro, Parquet, một số dạng log) là kiến thức nên thuộc để loại phương án nhanh. - "Least operational overhead" thường trỏ về công cụ no-code/visual, ở đây là AWS Glue DataBrew, chứ không phải job Spark tự viết trong Glue notebook — dù cả hai đều ra đúng kết quả.
- Phân biệt hàm trong recipe của DataBrew:
COUNT_DISTINCTtrả về số lượng giá trị riêng biệt (bỏ qua rỗng/null);FLAG_DUPLICATE_ROWSchỉ gắn cờ dòng trùng lặp và không đánh dấu lần xuất hiện đầu tiên. - Cẩn thận bẫy "đúng dịch vụ, sai hàm". Khi hai phương án cùng dùng một dịch vụ, ràng buộc phân biệt nằm ở chi tiết chức năng — đọc kỹ đề xem kết quả cần là một con số hay một cột đánh dấu.
The web development team at an IT company has about 200 TB of web-log data that is stored in an Amazon S3 bucket as raw text. Each log file is identified by a key of the type year-month-day_log_HHmmss.txt where HHmmss denotes the time the log file was created. The data engineering team has created an Amazon Athena table that links to the given S3 bucket. The team executes several queries every hour against a subset of the table's columns. The company wants a Hive-metastore compatible solution that costs less and requires less maintenance to support the ongoing analytics on this log data.
As an AWS Certified Data Engineer Associate, which of the following solutions would you combine to address these requirements? (Select three)
-
A
Partition the data by using a key prefix of the form date=year-month-day/ to the S3 objects
-
B
Partition the data by using a key prefix of the form year-month-day/ to the S3 objects
-
C
Change the log files to Apache Avro format
-
D
Drop and recreate the table with the PARTITIONED BY clause. Load the partitions by executing the
MSCK REPAIR TABLEstatement -
E
Drop and recreate the table with the PARTITIONED BY clause. Load the partitions by executing the
ALTER TABLE ADD PARTITIONstatement -
F
Change the log files to Apache Parquet format
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Đề mô tả 200 TB web-log ở dạng raw text trong S3, tên file theo mẫu year-month-day_log_HHmmss.txt, đã có một bảng Athena trỏ vào bucket đó. Có ba cụm từ quyết định đáp án:
- "Hive-metastore compatible solution" — đây là ràng buộc mạnh nhất. Nó ép cách đặt tiền tố khoá S3 phải theo kiểu Hive (
khoá=giá_trị), và ép cách nạp partition phải là lệnh tự quét được thư mục. - "queries every hour against a subset of the table's columns" — chỉ đọc một phần cột, tức là định dạng columnar mới có lợi, không phải định dạng row-based.
- "costs less and requires less maintenance" — Athena tính tiền theo lượng dữ liệu quét; "ít bảo trì" nghĩa là không muốn mỗi ngày phải chạy tay một lệnh khai báo partition mới.
Ba cụm từ này ứng với đúng ba việc phải làm: đặt tên tiền tố, nạp partition, và đổi định dạng file.
✅ Vì sao đáp án đúng là đúng
A — tiền tố dạng date=year-month-day/. Athena hiểu partition kiểu Hive khi đường dẫn chứa cặp khoá–giá trị nối bằng dấu bằng (date=2026-08-26/, hoặc nhiều tầng year=…/month=…/day=…/). Đường dẫn tự mang theo tên của partition key nên Athena suy ra được cấu trúc partition mà không cần ai khai báo từng cái. Đây chính là "Hive-metastore compatible" mà đề đòi.
D — PARTITIONED BY + MSCK REPAIR TABLE. Bảng hiện tại được tạo không có partition, nên phải drop và tạo lại với mệnh đề PARTITIONED BY. MSCK REPAIR TABLE quét bucket, tìm các thư mục theo kiểu Hive và nạp toàn bộ partition trong một lệnh — đúng nghĩa "ít bảo trì". Lệnh này chỉ hoạt động với bố cục Hive, nên nó đi kèm A thành một cặp, không tách rời được.
F — chuyển sang Apache Parquet. Parquet là định dạng columnar: mỗi cột lưu liền một khối, nên khi truy vấn chỉ chạm vào vài cột thì Athena chỉ đọc đúng những khối đó, bỏ qua phần còn lại. Cộng với nén tốt hơn raw text, lượng dữ liệu quét giảm mạnh — mà Athena tính tiền theo số byte quét, nên chi phí giảm theo. Với 200 TB và truy vấn chạy mỗi giờ, đây là khoản tiết kiệm lớn nhất trong ba việc.
❌ Vì sao các phương án còn lại sai
B — tiền tố dạng year-month-day/ (không có date=). Đây là phương án gần đúng nhất và cũng là cái bẫy chính. Nó có phân vùng dữ liệu thật, nhưng đường dẫn chỉ chứa giá trị mà không chứa tên partition key — đúng kiểu non-Hive mà CloudTrail hay Firehose sinh ra (data/2021/01/26/...). Athena không đoán được thư mục đó ứng với cột nào, nên MSCK REPAIR TABLE không nạp được, và đề thì yêu cầu tường minh giải pháp tương thích Hive metastore. Hỏng ở đúng dấu bằng.
E — PARTITIONED BY + ALTER TABLE ADD PARTITION. Cũng là phương án gần đúng: lệnh này nạp partition được thật, và nó chính là cách phải dùng cho bố cục non-Hive. Nhưng nó khai báo từng partition một, ánh xạ thủ công giá trị sang location. Với log sinh theo ngày, mỗi ngày lại phải thêm một lệnh — ngược hẳn với yêu cầu "requires less maintenance". Khi bố cục đã theo kiểu Hive thì đây là cách làm nhọc công không cần thiết.
C — chuyển sang Apache Avro. Avro là định dạng row-based: ghi nhanh, đọc trọn bản ghi hiệu quả, hợp cho ETL cần lấy tất cả các cột. Nhưng đề nói rõ truy vấn chỉ chạm vào một tập con các cột; với Avro, Athena vẫn phải đọc qua toàn bộ bản ghi để lấy được vài trường, nên lượng byte quét không giảm được như Parquet. Sai vì chọn nhầm hướng tối ưu: bài toán ở đây là đọc phân tích, không phải ghi.
📌 Điểm cần nhớ
- Thấy chữ "Hive-compatible" trong đề Athena thì đường dẫn phải là
khoá=giá_trị/và lệnh nạp partition làMSCK REPAIR TABLE. Thấy bố cục thư mục không có dấu bằng (CloudTrail, Firehose) thì phải dùngALTER TABLE ADD PARTITION. Hai cặp này luôn đi liền nhau, đừng trộn chéo. MSCK REPAIR TABLE= quét và nạp hàng loạt, ít bảo trì.ALTER TABLE ADD PARTITION= khai từng cái, chính xác hơn nhưng thủ công. Cụm "less maintenance" trong đề thường là tín hiệu chọn cái đầu.- Truy vấn một tập con cột → columnar (Parquet, ORC). Ghi nhiều / đọc trọn bản ghi / ETL → row-based (Avro). Đây là cặp so sánh xuất hiện đi xuất hiện lại trong kỳ thi Data Engineer.
- Athena tính tiền theo lượng dữ liệu quét, nên mọi phương án giảm chi phí đều quy về hai việc: partition để cắt bớt file phải đọc, và định dạng columnar + nén để cắt bớt byte trong mỗi file. Đề nào nói "costs less" mà có cả hai lựa chọn thì thường phải chọn cả hai.
An IT company wants to process IoT data from the field devices of an agricultural sciences company. The data engineering team at the company is designing a new database infrastructure for capturing this IoT data. The database should be resilient with minimal operational overhead and require the least development effort. The application includes a device tracking system that stores the GPS data for all devices. Real-time IoT data, as well as metadata lookups, must be performed with high throughput and microsecond latency.
Which of the following options would you recommend as the MOST efficient solution for these requirements?
-
A
Use RDS MySQL as the database with ElastiCache
-
B
Use DynamoDB as the database with DynamoDB Accelerator (DAX)
-
C
Use Aurora MySQL as the database with Aurora cluster cache
-
D
Use DocumentDB as the database with API Gateway
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Đề mô tả một hệ thống thu nhận dữ liệu IoT từ thiết bị ngoài đồng ruộng: có hệ thống theo dõi thiết bị lưu dữ liệu GPS, có tra cứu metadata, và cần chọn hạ tầng database mới.
Cụm từ quyết định nằm ở câu cuối phần yêu cầu: "high throughput and microsecond latency" — thông lượng cao và độ trễ ở mức micro giây, chứ không phải mili giây. Hai cụm phụ trợ siết thêm: "minimal operational overhead" (ít việc vận hành) và "least development effort" (ít công sức lập trình).
Ba ràng buộc này ghép lại loại được gần hết các phương án:
- microsecond → chỉ tầng cache in-memory mới đạt được; database đọc từ đĩa/replica chỉ tới mili giây.
- minimal operational overhead → phải là dịch vụ được quản lý sẵn, không tự dựng và tự bảo trì cluster cache.
- least development effort → cache phải trong suốt với ứng dụng, không bắt lập trình viên tự viết logic ghi cache, đọc cache, làm mất hiệu lực cache.
Thêm một chi tiết nữa: dữ liệu IoT có cấu trúc thay đổi theo thiết bị, hợp với mô hình key-value/document hơn là bảng quan hệ có schema cố định.
✅ Vì sao đáp án đúng là đúng
B — DynamoDB làm database, kèm DynamoDB Accelerator (DAX) thoả cả ba ràng buộc cùng lúc:
- DynamoDB là database key-value và document được quản lý hoàn toàn, hợp với dữ liệu IoT có cấu trúc không cố định, và cho độ trễ ở mức mili giây một chữ số ở mọi quy mô. Việc tra cứu metadata và ghi dữ liệu GPS theo device ID đúng là dạng truy cập theo khoá mà DynamoDB được thiết kế cho.
- DAX là lớp cache in-memory cho DynamoDB, được quản lý sẵn và có tính sẵn sàng cao. Nó chính là thứ kéo độ trễ đọc từ mili giây xuống micro giây — đúng con chữ mà đề yêu cầu — kể cả ở mức rất nhiều request mỗi giây.
- Về công sức lập trình: DAX tương thích API với DynamoDB, nên ứng dụng chỉ cần thay đổi rất ít là dùng được. DAX tự lo việc nạp dữ liệu vào cache, làm mất hiệu lực cache và quản lý cluster — lập trình viên không phải viết những phần đó.
Cần lưu ý: dữ liệu DAX trả về là eventually consistent, và đề ở đây không đòi hỏi đọc nhất quán mạnh, nên đánh đổi này chấp nhận được.
❌ Vì sao các phương án còn lại sai
A — RDS MySQL kèm ElastiCache. Đây là phương án gần đúng nhất vì cũng là "database + cache in-memory", và ElastiCache thật sự đạt được độ trễ rất thấp. Nó hỏng ở hai chỗ khác: (1) RDS MySQL là database quan hệ với schema cố định, không hợp với dữ liệu IoT có cấu trúc thay đổi; (2) ElastiCache không tự động tích hợp với RDS — bạn phải tự viết logic cache-aside ở tầng ứng dụng (đọc cache trước, miss thì đọc DB rồi ghi lại cache, và tự lo làm mất hiệu lực khi dữ liệu đổi), đồng thời tự cấp phát và duy trì một cluster cache riêng. Cả hai đều đi ngược "least development effort" và "minimal operational overhead".
C — Aurora MySQL kèm Aurora cluster cache. Sai ở cả hai vế. Vế database: Aurora MySQL vẫn là quan hệ, cùng vấn đề schema như phương án A. Vế cache: cluster cache management không phải là lớp cache tăng tốc đọc cho ứng dụng. Công dụng chính của nó là giữ ấm buffer pool để instance primary mới hoạt động tốt hơn ngay sau khi failover — tức là một cơ chế phục vụ tính sẵn sàng, không phải cơ chế kéo độ trễ xuống micro giây cho truy vấn thường ngày. Ai chỉ nhìn thấy chữ "cache" mà chọn phương án này là bị đánh lừa bởi tên gọi.
D — DocumentDB kèm API Gateway. DocumentDB là database document được quản lý sẵn, tương thích MongoDB, nên phần database ít nhất còn hợp với dữ liệu bán cấu trúc. Nhưng phần thứ hai mới là chỗ chết: API Gateway không phải là thành phần tối ưu database. Nó là cửa ngõ cho API — tạo, công bố, giám sát và bảo vệ REST API hoặc WebSocket API. Đặt API Gateway trước DocumentDB không làm truy vấn nhanh hơn micro giây, và trong bộ bốn phương án này nó đóng vai distractor thuần tuý: ghép một dịch vụ nghe quen tai vào chỗ nó không giải quyết vấn đề nào của đề.
📌 Điểm cần nhớ
- "Microsecond latency" gần như luôn là tín hiệu của một lớp cache in-memory, không phải của database gốc. Thấy "millisecond" thì DynamoDB một mình là đủ; thấy "microsecond" thì phải có DAX (hoặc ElastiCache) đi kèm.
- DAX thắng ElastiCache khi database là DynamoDB vì nó tương thích API và tự lo cache invalidation — đúng tiêu chí "least development effort". ElastiCache mạnh nhưng bắt bạn tự viết logic cache-aside.
- Đừng chọn theo chữ "cache" trong tên dịch vụ. Aurora cluster cache management phục vụ việc hồi phục sau failover, không phải tăng tốc đọc cho ứng dụng.
- Dữ liệu IoT có cấu trúc biến động → nghiêng về NoSQL (DynamoDB, DocumentDB) thay vì RDS/Aurora, trừ khi đề nói rõ có schema cố định và cần join phức tạp.
- Khi một phương án ghép database với một dịch vụ không nằm cùng tầng vấn đề (API Gateway là tầng API, không phải tầng lưu trữ), gần như chắc chắn đó là distractor.
A data engineer needs to set up a daily execution of Amazon Athena queries, each of which may take longer than 15 minutes to run. What are the two most cost-effective steps to achieve this requirement? (Select two)
-
A
Set up an AWS Lambda function that uses the Athena Boto3 client start_query_execution API call to execute the Athena queries programmatically
-
B
Set up an AWS Glue Python shell job that uses the Athena Boto3 client start_query_execution API call to execute the Athena queries programmatically
-
C
Set up a workflow in AWS Step Functions that incorporates two states. Configure the initial state prior to triggering the AWS Glue Python shell job. Establish the subsequent state as a Wait state, designed to periodically verify the completion status of the Athena query via the Athena Boto3 get_query_execution API call. Ensure the workflow is configured to initiate the subsequent query once the preceding one concludes
-
D
Set up a workflow in AWS Step Functions that incorporates two states. Configure the initial state prior to triggering the Lambda function. Establish the subsequent state as a Wait state, designed to periodically verify the completion status of the Athena query via the Athena Boto3 get_query_execution API call. Ensure the workflow is configured to initiate the subsequent query once the preceding one concludes
-
E
Develop a Python shell script in AWS Glue to implement a sleep timer that checks every 5 minutes if the current Athena query has successfully completed. Set up the script so that it triggers the subsequent query once the current one is confirmed to have finished
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Đề mô tả một data engineer cần chạy hằng ngày một loạt truy vấn Amazon Athena, trong đó mỗi truy vấn có thể mất hơn 15 phút. Hỏi hai bước tiết kiệm chi phí nhất (most cost-effective) để đạt được yêu cầu đó.
Có hai cụm từ quyết định:
- "may take longer than 15 minutes to run" — đây là con số cố ý gợi tới thời gian chạy tối đa của một lần gọi AWS Lambda. Nó không có nghĩa là "loại Lambda đi", mà có nghĩa là: Lambda không được phép ngồi chờ truy vấn kết thúc. Việc khởi chạy truy vấn Athena là bất đồng bộ —
start_query_executiontrả vềQueryExecutionIdngay lập tức, còn Athena chạy tiếp ở phía nó. Phần "chờ và kiểm tra trạng thái" phải do một thứ khác đảm nhiệm. - "two most cost-effective steps" — đề không hỏi "cách nào chạy được", vì nhiều phương án đều chạy được. Nó hỏi cách nào rẻ hơn. Đây chính là ràng buộc phân biệt giữa các cặp phương án gần như giống hệt nhau, chỉ khác nhau ở chỗ dùng Lambda hay AWS Glue Python shell job làm nơi gọi API.
Nói cách khác, câu này thực chất gồm hai quyết định độc lập: (1) ai gọi start_query_execution — Lambda hay Glue; (2) ai chịu trách nhiệm chờ đợi và điều phối chuỗi truy vấn dài hơn 15 phút.
✅ Vì sao đáp án đúng là đúng
Đáp án theo tệp là A và D.
A — Lambda gọi start_query_execution qua Athena Boto3 client. Đây là cách chuẩn để chạy truy vấn Athena bằng chương trình. Lời gọi này bất đồng bộ: Lambda chỉ cần khởi chạy truy vấn rồi kết thúc ngay, nên giới hạn thời gian chạy của Lambda không phải vấn đề. Vì hàm chỉ sống vài giây mỗi ngày, chi phí gần như không đáng kể — đó chính là lý do nó thắng về mặt "cost-effective".
D — Step Functions với hai state: state đầu kích hoạt Lambda, state sau là Wait state, kiểm tra định kỳ trạng thái truy vấn bằng get_query_execution, xong mới chạy truy vấn kế tiếp. AWS Step Functions là dịch vụ điều phối serverless dựa trên state machine; mỗi bước là một state, và Wait state có nhiệm vụ tạm dừng workflow trong một khoảng thời gian rồi mới đi tiếp. Đây đúng là thứ mà đề cần: chỗ để "chờ" một truy vấn kéo dài hơn 15 phút mà không có tài nguyên tính toán nào phải chạy trong lúc chờ. Step Functions cũng giữ được trạng thái xuyên suốt các bước, nên việc "truy vấn trước xong mới chạy truy vấn sau" được diễn đạt trực tiếp trong workflow chứ không phải nhét vào code. Step Functions còn có tích hợp sẵn với Athena để start/stop truy vấn và lấy kết quả.
Cặp A + D chia đúng vai: Lambda làm việc ngắn (bắn lệnh), Step Functions làm việc dài (chờ, theo dõi, nối chuỗi). Không thành phần nào phải trả tiền cho thời gian ngồi không.
❌ Vì sao các phương án còn lại sai
B — AWS Glue Python shell job gọi start_query_execution. Về mặt kỹ thuật thì phương án này chạy được, và đó là điểm khiến nó gài. Glue Python shell job hoàn toàn có thể import Boto3 và gọi Athena. Chỗ nó hỏng là ở đúng tiêu chí đề đặt ra: chi phí. Glue Python shell job là job tính phí theo tài nguyên và thời gian chạy của job, đắt hơn hẳn một hàm Lambda chỉ sống vài giây để bắn một lời gọi API. Với công việc "gọi một API rồi thoát", dùng Glue là mang dao mổ trâu đi giết gà — vẫn xong việc nhưng vi phạm chữ most cost-effective.
C — Step Functions hai state, nhưng state đầu kích hoạt Glue Python shell job. Đây là phương án gần đúng nhất, và cũng là bẫy chính. Phần kiến trúc điều phối của nó hoàn toàn đúng: đúng ý tưởng Wait state, đúng cách dùng get_query_execution để kiểm tra trạng thái, đúng cách nối truy vấn kế tiếp. Nó chỉ hỏng ở một chi tiết duy nhất: dùng Glue Python shell job thay cho Lambda ở bước khởi chạy. Vì lý do chi phí đã nêu ở phương án B, C thua D. Nếu đọc lướt và chỉ nhìn cụm "Step Functions + Wait state", rất dễ chọn nhầm C — phải đọc tới chỗ nó gọi cái gì mới phân biệt được C với D.
E — Script Python shell trong Glue có sleep timer, cứ 5 phút kiểm tra một lần xem truy vấn đã xong chưa, xong thì chạy truy vấn kế tiếp. Phương án này sai theo hai hướng cùng lúc. Thứ nhất là chi phí: một Glue job phải sống suốt toàn bộ thời gian truy vấn chạy, tức là trả tiền cho thời gian ngủ. Thứ hai là lãng phí tài nguyên: polling bằng sleep trong một job chạy dài là làm bằng tay đúng thứ mà Wait state của Step Functions cung cấp sẵn, miễn phí về mặt tài nguyên tính toán. Ngoài ra, cách này còn tự viết lấy phần quản lý trạng thái và xử lý lỗi mà một dịch vụ orchestration đã lo hộ.
📌 Điểm cần nhớ
start_query_executionlà lời gọi bất đồng bộ. Một truy vấn Athena chạy 40 phút không có nghĩa là nơi gọi nó phải sống 40 phút. Thấy "query chạy lâu hơn 15 phút" thì đừng vội loại Lambda — hãy hỏi Lambda có phải chờ hay không.- Chờ đợi là việc của orchestration, không phải của compute. Khi đề cần "chạy xong bước này mới sang bước kia" với thời gian không đoán trước được, Step Functions + Wait state là mẫu chuẩn; polling bằng
sleeptrong một job chạy dài là dấu hiệu của phương án sai. - Khi đề hỏi "most cost-effective", điểm phân biệt thường nằm ở chỗ có phải trả tiền cho thời gian ngồi không hay không. Lambda gọi vài giây rẻ hơn Glue Python shell job làm cùng việc đó.
- Hai phương án chỉ khác nhau một danh từ thì danh từ đó chính là câu trả lời. C và D giống nhau từng chữ trừ "Glue Python shell job" so với "Lambda function" — gặp cặp như vậy, đọc thẳng vào chỗ khác biệt thay vì đánh giá lại toàn bộ kiến trúc.
A company has an S3 bucket that contains files in two different folders - s3://my-bucket/images and s3://my-bucket/thumbnails. When an image is first uploaded and new, it is viewed several times. Post a detailed analysis, the data analytics team has noticed that after 45 days those image files are rarely requested, but the thumbnails still are. After 180 days, the company would like to archive the image files and the thumbnails. Overall, the company would like the solution to remain highly available to prevent disasters from happening against the entire AZ.
Which of the following represents the best-fit solutions for an efficient cost strategy for the given S3 bucket? (Select two)
-
A
Create a Lifecycle Policy to transition all objects to Glacier Deep Archive after 180 days
-
B
Create a Lifecycle Policy to transition all objects to S3 Standard IA after 45 days
-
C
Create a Lifecycle Policy to transition objects to S3 Standard IA using a prefix after 45 days
-
D
Create a Lifecycle Policy to transition objects to Glacier Deep Archive using a prefix after 180 days
-
E
Create a Lifecycle Policy to transition objects to S3 One Zone IA using a prefix after 45 days
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Đề mô tả một S3 bucket có hai thư mục: s3://my-bucket/images và s3://my-bucket/thumbnails. Câu hỏi yêu cầu chọn hai hành động Lifecycle Policy tối ưu chi phí.
Có ba cụm từ trong đề quyết định đáp án:
-
"after 45 days those image files are rarely requested, but the thumbnails still are" — sau 45 ngày chỉ ảnh gốc mới nguội, còn thumbnail vẫn được đọc thường xuyên. Nghĩa là hành động ở mốc 45 ngày phải giới hạn phạm vi, chỉ áp cho thư mục
images. Trong S3 Lifecycle, cách giới hạn đó chính là dùng prefix trong filter của rule. -
"After 180 days, the company would like to archive the image files and the thumbnails" — mốc 180 ngày áp cho cả hai loại, tức là toàn bộ bucket. Ở đây prefix trở nên thừa.
-
"remain highly available to prevent disasters from happening against the entire AZ" — dữ liệu phải sống sót khi mất nguyên một Availability Zone. Đây là ràng buộc loại thẳng bất kỳ storage class nào chỉ lưu trong một AZ.
Mấu chốt: cùng một ý tưởng "chuyển sang Standard-IA sau 45 ngày" xuất hiện ở hai phương án, chỉ khác nhau ở chỗ có prefix hay không; và ý tưởng "Glacier Deep Archive sau 180 ngày" cũng vậy. Đề cố tình bắt bạn quyết định mốc nào cần prefix, mốc nào không.
✅ Vì sao đáp án đúng là đúng
C — transition objects to S3 Standard-IA using a prefix after 45 days. S3 Standard-IA dành cho dữ liệu ít được truy cập nhưng vẫn cần đọc nhanh khi cần: cùng độ bền và độ trễ thấp như S3 Standard, giá lưu trữ mỗi GB rẻ hơn, đổi lại có phí truy xuất theo GB và có thời lượng lưu tối thiểu bị tính tiền. Vì chỉ ảnh gốc mới nguội sau 45 ngày, rule phải lọc theo prefix images/ để thumbnail ở lại S3 Standard — thumbnail vẫn bị đọc nhiều, đẩy nó sang IA sẽ sinh phí retrieval liên tục và có thể đắt hơn chứ không rẻ đi.
A — transition all objects to Glacier Deep Archive after 180 days. Ở mốc 180 ngày đề nói rõ archive cả images lẫn thumbnails, nên rule áp cho toàn bucket là đúng ý và đơn giản nhất. Glacier Deep Archive là lớp lưu trữ chi phí cực thấp dành cho archiving và backup dài hạn, độ bền rất cao, đáp ứng được nhu cầu lưu trữ nguội lâu dài của bài toán.
❌ Vì sao các phương án còn lại sai
B — Standard-IA cho tất cả object sau 45 ngày. Đây là phương án gần đúng nhất, chỉ hỏng đúng một chỗ: thiếu prefix. Nó kéo luôn thumbnails/ sang Standard-IA trong khi đề nói thumbnail vẫn đang được yêu cầu thường xuyên. Kết quả là mỗi lượt xem thumbnail phải trả thêm phí truy xuất — đi ngược mục tiêu "efficient cost strategy" của đề.
D — Glacier Deep Archive có prefix sau 180 ngày. Cũng gần đúng: đúng lớp lưu trữ, đúng mốc thời gian. Cái sai là phạm vi bị thu hẹp không cần thiết. Đề muốn archive cả hai thư mục ở mốc 180 ngày, dùng prefix nghĩa là chỉ một trong hai được archive, phần còn lại vẫn nằm ở lớp đắt tiền. Prefix là công cụ để phân biệt hai nhóm — chỗ nào không cần phân biệt thì đừng dùng.
E — S3 One Zone-IA có prefix sau 45 ngày. Prefix thì đúng, mốc thời gian thì đúng, nhưng lớp lưu trữ sai. Khác với các lớp S3 khác vốn phân tán dữ liệu qua nhiều Availability Zone, One Zone-IA chỉ lưu trong một AZ duy nhất, đổi độ sẵn sàng lấy giá rẻ hơn. Đề nêu thẳng yêu cầu "prevent disasters against the entire AZ", nên One Zone-IA bị loại bởi chính câu đó — dù nó là lựa chọn rẻ nhất trong nhóm IA.
📌 Điểm cần nhớ
- Prefix trong Lifecycle rule là để phân biệt các nhóm object có vòng đời khác nhau. Khi đề mô tả hai thư mục nguội đi với tốc độ khác nhau → cần prefix; khi cả bucket cùng chung số phận → không cần.
- Câu nào nhắc tới "survive an entire AZ failure" thì loại ngay One Zone-IA, bất kể nó rẻ hơn. One Zone-IA chỉ hợp với dữ liệu tái tạo lại được (chính bản thân thumbnail là ví dụ, nhưng chỉ khi đề không đòi chống mất AZ).
- Standard-IA không tự động rẻ hơn. Nó rẻ ở phí lưu trữ nhưng tính thêm phí truy xuất và có thời lượng lưu tối thiểu; đưa dữ liệu đang nóng vào IA là làm tăng hoá đơn.
- Đọc kỹ mốc thời gian gắn với đối tượng nào. Đề dạng này thường đặt hai mốc, một mốc chỉ áp cho một phần dữ liệu, mốc kia áp cho tất cả — chọn sai phạm vi là mất điểm dù chọn đúng storage class.
The data engineering team at a social media company wants to use Amazon CloudWatch alarms to automatically recover Amazon EC2 instances if they become impaired. The team has hired you to provide subject matter expertise.
Which of the following statements would you identify as CORRECT regarding this automatic recovery process? (Select two)
-
A
A recovered instance is identical to the original instance, including the instance ID, private IP addresses, Elastic IP addresses, and all instance metadata
-
B
Terminated Amazon EC2 instances can be recovered if they are configured at the launch of instance
-
C
If your instance has a public IPv4 address, it retains the public IPv4 address after recovery
-
D
If your instance has a public IPv4 address, it does not retain the public IPv4 address after recovery
-
E
During instance recovery, the instance is migrated during an instance reboot, and any data that is in memory is retained
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Đề bài mô tả một đội data engineering muốn dùng Amazon CloudWatch alarm để tự động khôi phục (auto recovery) các Amazon EC2 instance khi chúng bị impaired — tức hỏng do sự cố hạ tầng bên dưới (hardware failure hoặc lỗi cần chính AWS can thiệp mới sửa được). Câu hỏi yêu cầu chọn hai phát biểu ĐÚNG về cơ chế này.
Cụm từ quyết định nằm ở chỗ "recover ... if they become impaired". Chữ impaired phân biệt rõ với terminated: recovery chỉ áp dụng cho instance đang chạy nhưng bị hỏng ở tầng host, chứ không phải instance đã bị huỷ. Cụm thứ hai đáng chú ý là "recover" chứ không phải "relaunch" — recovery giữ nguyên chính instance đó (cùng instance ID), khác hẳn với việc tạo một instance mới thay thế. Hai chi tiết này đủ để loại được các phương án gần giống nhau về địa chỉ IP và về dữ liệu trong bộ nhớ.
✅ Vì sao đáp án đúng là đúng
A — Instance sau khi recover giống hệt instance gốc, gồm cả instance ID, private IP address, Elastic IP address và toàn bộ instance metadata. Đây chính là bản chất của auto recovery: AWS di chuyển instance sang một host khoẻ mạnh chứ không tạo ra một instance mới. Vì vậy mọi định danh đều được giữ lại — instance ID không đổi, private IP không đổi, Elastic IP vẫn gắn nguyên, metadata giữ nguyên. Nếu instance bị hỏng nằm trong một placement group thì instance sau recovery vẫn chạy trong placement group đó.
C — Nếu instance có public IPv4 address thì nó giữ lại địa chỉ public IPv4 sau khi recover. Cùng logic với A: vì đây vẫn là instance cũ được chuyển host, public IPv4 address được giữ lại chứ không cấp mới. Đây là điểm khiến recovery hữu ích trong thực tế — client và bản ghi DNS trỏ tới instance không cần cập nhật gì.
❌ Vì sao các phương án còn lại sai
B — "Instance đã terminated có thể được recover nếu được cấu hình từ lúc launch". Sai. Instance đã terminated không thể recover được, và cũng không có tuỳ chọn nào lúc launch cho phép làm điều đó. Đây là phương án đánh vào việc nhầm lẫn giữa impaired (còn tồn tại, host bên dưới hỏng) và terminated (đã bị huỷ, vòng đời kết thúc). Recovery chỉ can thiệp được vào instance còn trong vòng đời.
D — "Instance KHÔNG giữ lại public IPv4 address sau khi recover". Đây là phương án đối lập trực tiếp với C, và là cái bẫy gần đúng nhất trong danh sách. Nó nghe hợp lý vì người học quen với chuyện public IPv4 (loại tự động gán, không phải Elastic IP) bị mất khi stop rồi start lại một instance. Nhưng recovery không phải là chu trình stop–start do người dùng thực hiện; nó là quá trình migrate do AWS điều khiển, và địa chỉ public IPv4 được giữ nguyên. Nhớ nhầm sang hành vi stop/start là rơi đúng vào phương án này.
E — "Trong quá trình recovery, instance được migrate qua một lần reboot và dữ liệu trong bộ nhớ được giữ lại". Nửa đầu đúng, nửa sau sai — đúng kiểu phương án gần đúng khó chịu nhất. Instance quả thật được migrate thông qua một lần reboot, nhưng vì có reboot nên toàn bộ dữ liệu nằm trong memory (RAM) bị mất. Recovery bảo toàn định danh và cấu hình mạng, không bảo toàn trạng thái runtime trong bộ nhớ. Ứng dụng nào giữ state trong RAM thì phải tự chịu trách nhiệm khôi phục sau khi instance khởi động lại.
📌 Điểm cần nhớ
- Auto recovery bằng CloudWatch alarm chỉ dành cho instance impaired do sự cố hạ tầng bên dưới; instance đã terminated thì không recover được bằng bất kỳ cách nào.
- Recovery giữ nguyên danh tính của instance: instance ID, private IP, Elastic IP, public IPv4 address, metadata, và cả placement group nếu có.
- Recovery không giữ dữ liệu trong memory — instance đi qua một lần reboot khi migrate, nên RAM bị xoá sạch.
- Đừng suy hành vi của recovery từ hành vi stop rồi start: stop/start có thể làm mất public IPv4 tự động gán, còn recovery thì giữ lại. Đây là điểm khác biệt hay bị dùng làm bẫy trong đề thi.
The data engineering team at an e-commerce company uses Apache Hive on Amazon EMR. The team has noticed sub-par performance for the cluster during the morning peak load hours when 95% of the daily queries are executed. The team has also observed that HDFS's (Hadoop Distributed File System) usage never surpasses 10%.
As an AWS Certified Data Engineer Associate, which of the following solutions would you recommend to resolve these performance issues?
-
A
Set up spot fleet configurations for core and task nodes. Leverage the CloudWatch YARNMemoryAvailablePercentage metric to configure automatic scaling policies to scale out/scale in the spot fleet
-
B
Set up instance group configurations for core and task nodes. Leverage the CloudWatch YARNMemoryAvailablePercentage metric to configure automatic scaling policies to scale out/scale in the instance groups
-
C
Set up instance group configurations for core and task nodes. Leverage the CloudWatch CapacityRemainingGB metric to configure automatic scaling policies to scale out/scale in the instance groups
-
D
Set up spot fleet configurations for core and task nodes. Leverage the CloudWatch CapacityRemainingGB metric to configure automatic scaling policies to scale out/scale in the spot fleet
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Đề mô tả một cụm Amazon EMR chạy Apache Hive bị chậm vào giờ cao điểm buổi sáng, khi 95% truy vấn trong ngày dồn vào cùng một khoảng thời gian. Kèm theo đó là một chi tiết tưởng như thừa: HDFS usage không bao giờ vượt quá 10%.
Hai cụm từ quyết định đáp án:
- "morning peak load hours" — tải biến động theo giờ, nghĩa là giải pháp phải là automatic scaling: nở ra khi cao điểm, co lại khi hết cao điểm. Đây là ràng buộc chọn cách cấu hình node.
- "HDFS's usage never surpasses 10%" — đề nói thẳng rằng dung lượng đĩa không phải nút thắt. Đây là ràng buộc chọn metric dùng làm tín hiệu scaling: bất kỳ metric nào đo HDFS đều bị loại ngay.
Bốn phương án chính là tổ hợp 2×2 của hai trục này: (instance group vs spot fleet) × (YARNMemoryAvailablePercentage vs CapacityRemainingGB). Chỉ cần bắt đúng hai ràng buộc trên là khoanh vùng được đúng một ô.
✅ Vì sao đáp án đúng là đúng
Đáp án đúng là B: Set up instance group configurations for core and task nodes + dùng metric YARNMemoryAvailablePercentage để cấu hình automatic scaling policy.
Về phần cấu hình node: khi tạo cụm EMR, bạn khai báo master, core và task node theo một trong hai kiểu — uniform instance groups hoặc instance fleets. Automatic scaling trong Amazon EMR được thiết lập theo instance group: bạn gắn policy vào group, EMR tự thêm/bớt instance dựa trên giá trị của một CloudWatch metric mà bạn chỉ định. Đây đúng là thứ mà tình huống "tải dồn vào buổi sáng" cần.
Về phần metric: YARNMemoryAvailablePercentage là phần trăm bộ nhớ còn trống mà YARN quản lý (MemoryAvailableMB / MemoryTotalMB). Hive trên EMR chạy công việc qua YARN, nên khi truy vấn dồn vào giờ cao điểm, bộ nhớ YARN còn trống sẽ tụt xuống — đó chính là tín hiệu trực tiếp phản ánh áp lực tính toán thật của cụm. Đặt scale-out khi giá trị này xuống dưới ngưỡng và scale-in khi nó phục hồi, cụm sẽ tự nở ra đúng lúc buổi sáng và tự co lại phần còn lại trong ngày. Metric này khớp cả với nút thắt thật (compute/memory) lẫn với thông tin đề cho (HDFS rảnh rỗi).
❌ Vì sao các phương án còn lại sai
A — spot fleet + YARNMemoryAvailablePercentage: metric thì đúng, nhưng phần cấu hình sai. Spot Fleet là một khái niệm của Amazon EC2 — một tập Spot Instance (và tuỳ chọn thêm On-Demand) khởi chạy theo tiêu chí bạn đặt — và không dùng trực tiếp được với EMR. Trong EMR, thứ tương ứng nếu bạn muốn trộn nhiều loại instance và dùng Spot là instance fleets, không phải "spot fleet". Đây là phương án gần đúng nhất, và chỗ nó hỏng nằm ở đúng một chữ: nhầm cấu trúc của EC2 với cấu trúc của EMR.
C — instance group + CapacityRemainingGB: phần cấu hình đúng nhưng metric sai, và sai theo hai tầng. CapacityRemainingGB đo dung lượng đĩa HDFS còn lại — nó hữu ích để theo dõi tình trạng và sức khoẻ cụm, chứ không phải tín hiệu để co giãn tài nguyên tính toán. Tệ hơn, đề đã nói rõ HDFS không bao giờ vượt 10%, nghĩa là metric này gần như đứng yên ở mức "còn rất nhiều chỗ" suốt cả ngày. Lấy nó làm điều kiện scaling thì policy sẽ không bao giờ kích hoạt vào đúng giờ cao điểm — vấn đề hiệu năng vẫn nguyên vẹn.
D — spot fleet + CapacityRemainingGB: sai cả hai trục. Vừa dùng khái niệm Spot Fleet của EC2 vốn không áp được cho EMR, vừa chọn metric đo HDFS trong khi HDFS không phải nút thắt. Đây là phương án dễ loại nhất.
📌 Điểm cần nhớ
- Trong EMR, hai kiểu khai báo node là uniform instance groups và instance fleets. "Spot Fleet" là khái niệm của EC2 — thấy nó trong một câu hỏi về EMR thì gần như chắc chắn là phương án gài.
- Automatic scaling của EMR gắn vào instance group và chạy theo một CloudWatch metric do bạn chỉ định. Câu nào nói "tải biến động theo giờ/theo mùa" là đang đòi automatic scaling.
- Chọn metric theo đúng nút thắt.
YARNMemoryAvailablePercentagephản ánh áp lực compute/memory của YARN — hợp để co giãn cụm.CapacityRemainingGBđo dung lượng HDFS còn lại — hợp để giám sát sức khoẻ, không hợp làm tín hiệu scaling. - Những chi tiết "thừa" trong đề thường là ràng buộc loại trừ. Câu "HDFS usage never surpasses 10%" tồn tại chỉ để giết hai phương án dùng metric HDFS — đọc lướt qua nó là mất manh mối rẻ nhất của cả câu.
A university has tie-ups with local hospitals to share anonymized health statistics of people. The data is stored in Amazon S3 as .csv files. Amazon Athena is used to run extensive analytics on the data for finding correlations between different parameters in the data. The university is facing high costs and performance-related issues as the volume of data is growing rapidly. The data in the S3 bucket is already partitioned by date and the university does not want to change this partition scheme.
As a data engineer, how can you further improve query performance? (Select two)
-
A
Remove partitions and perform
data bucketingon the S3 bucket -
B
Transform .csv files to Parquet format by fetching only the data fields required for predicates
-
C
The S3 bucket should be configured in the same AWS Region where the Athena queries are being run
-
D
Transform .csv files to JSON format by fetching the required key-value pairs only
-
E
The S3 bucket should be configured in the same Availability Zone where the Athena queries are being run
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Bối cảnh: dữ liệu thống kê y tế ẩn danh nằm trên Amazon S3 dưới dạng .csv, dùng Amazon Athena chạy phân tích tương quan trên khối dữ liệu đang phình nhanh. Vấn đề là chi phí cao và hiệu năng kém. Câu hỏi yêu cầu chọn hai cách cải thiện thêm hiệu năng truy vấn.
Hai cụm từ trong đề quyết định đáp án:
- "already partitioned by date and the university does not want to change this partition scheme" — đây là ràng buộc chốt chặn. Bất kỳ phương án nào đòi bỏ phân vùng hiện có đều bị loại ngay, không cần bàn tới việc kỹ thuật đó tốt hay không.
- ".csv files" và "extensive analytics ... finding correlations between different parameters" — dữ liệu đang ở định dạng row-based, còn tải công việc là kiểu phân tích chỉ đụng tới một số cột. Đây là dấu hiệu kinh điển cho việc chuyển sang định dạng columnar.
Athena tính tiền theo lượng dữ liệu quét được, nên ở đây "giảm chi phí" và "tăng hiệu năng" là cùng một bài toán: đọc ít byte hơn, và đọc từ nơi gần hơn.
✅ Vì sao đáp án đúng là đúng
B — Transform .csv files to Parquet format by fetching only the data fields required for predicates
Apache Parquet (và Apache ORC) là định dạng columnar: dữ liệu lưu theo cột chứ không theo dòng. Điều đó mang lại hai lợi ích cộng dồn:
- Athena chỉ cần đọc đúng những cột mà truy vấn tham chiếu tới, thay vì đọc trọn từng dòng CSV rồi vứt đi phần thừa. Với truy vấn tìm tương quan giữa vài tham số trong một bảng rộng, phần tiết kiệm là rất lớn.
- Vì mỗi cột chứa dữ liệu cùng kiểu, nén theo cột đạt tỷ lệ nén cao hơn hẳn so với nén cả dòng, nên khối lượng byte trên S3 cũng nhỏ đi.
Quan trọng là cách này không đụng gì tới sơ đồ phân vùng theo ngày — chỉ đổi định dạng tệp bên trong từng phân vùng, nên thoả ràng buộc của đề.
C — The S3 bucket should be configured in the same AWS Region where the Athena queries are being run
Athena có thể truy vấn dữ liệu S3 nằm ở Region khác — hữu ích khi không được phép hoặc không tiện di chuyển dữ liệu, hoặc khi Athena chưa có mặt ở Region chứa dữ liệu. Nhưng truy vấn cross-Region kéo theo hai cái giá: lượng dữ liệu truyền đi có thể lớn hơn cả kích thước tập dữ liệu, và phát sinh phí truyền dữ liệu giữa các Region. Đặt bucket cùng Region với nơi chạy Athena loại bỏ cả độ trễ lẫn khoản phí đó — đúng tinh thần "tối ưu thêm" mà đề hỏi.
❌ Vì sao các phương án còn lại sai
A — Remove partitions and perform data bucketing on the S3 bucket
Đây là phương án gần đúng nhất, và nó hỏng đúng ở chữ "Remove partitions". Bucketing bản thân nó là kỹ thuật hợp lệ của Athena: gom các bản ghi có cùng giá trị của một thuộc tính vào cùng một "bucket" (ở đây là tệp, chọn bằng hàm băm), phân bố đều để mỗi bucket có lượng dữ liệu xấp xỉ nhau; khi truy vấn lọc theo thuộc tính đó, Athena xác định được bucket nào chứa bản ghi và chỉ đọc các tệp trong bucket ấy. Ứng viên tốt cho bucketing là cột high cardinality, phân bố đều, và hay được lọc theo giá trị cụ thể.
Lưu ý thuật ngữ: "bucket" trong bucketing không liên quan tới Amazon S3 bucket — hai khái niệm trùng tên. Nhưng dù kỹ thuật này tốt, đề đã nói thẳng là trường đại học không muốn đổi sơ đồ phân vùng, mà phương án lại mở đầu bằng việc gỡ bỏ phân vùng. Vi phạm ràng buộc của đề thì loại, bất kể phần sau hay đến đâu. (Trên thực tế bucketing còn dùng kèm với partitioning được, nhưng phương án này không phát biểu như vậy.)
D — Transform .csv files to JSON format by fetching the required key-value pairs only
Đúng là có động tác "chuyển định dạng", nhưng chuyển sai đích. JSON vẫn là định dạng row-based — mỗi bản ghi là một khối key-value trọn vẹn, nên Athena vẫn phải đọc qua toàn bộ bản ghi để lấy vài trường. JSON còn cõng thêm tên khoá lặp lại ở mỗi dòng, thường phình to hơn cả CSV gốc. Không có lợi thế đọc theo cột, không có nén theo cột — nghĩa là không giải quyết được gì cho tải phân tích ở đây.
E — The S3 bucket should be configured in the same Availability Zone where the Athena queries are being run
Đây là distractor cài cắm để bẫy người đọc lướt: nó chỉ khác đáp án C đúng một chữ (AZ thay vì Region). Cả Amazon S3 lẫn Amazon Athena đều quản lý dữ liệu ở cấp Region, không phải cấp Availability Zone. Không có tuỳ chọn nào để "đặt một S3 bucket vào một AZ" cả, nên phương án này mô tả một thao tác không tồn tại.
📌 Điểm cần nhớ
- Ràng buộc trong đề là bộ lọc mạnh nhất. Câu nào có mệnh đề kiểu "does not want to change X" thì mọi phương án bắt đầu bằng "Remove X" đều bị loại, kể cả khi kỹ thuật đó hoàn toàn hợp lệ trong tình huống khác.
- Athena + hiệu năng/chi phí ⇒ nghĩ tới lượng dữ liệu quét. Ba đòn bẩy chính: định dạng columnar (Parquet/ORC), partitioning, và nén. Với CSV/JSON thấy trong đề, chuyển sang Parquet/ORC gần như luôn là đáp án.
- CSV và JSON cùng một loại — row-based. Đổi từ CSV sang JSON không phải là tối ưu; đó là bẫy hay gặp vì trông giống một hành động "hiện đại hoá định dạng".
- Phân biệt Region và Availability Zone. S3 và Athena là dịch vụ cấp Region; mọi phương án nói tới việc đặt bucket vào một AZ đều là distractor. Cùng Region là điều kiện tối ưu, còn cross-Region tuy chạy được nhưng phải trả giá bằng dữ liệu truyền và phí.
- Bucketing ≠ S3 bucket. Bucketing là cách gom bản ghi theo hàm băm trên một cột high-cardinality để Athena chỉ đọc đúng tệp cần; đừng lẫn hai khái niệm khi đọc phương án.
A company wants to publish an event into an Amazon Simple Queue Service (Amazon SQS) queue whenever a new object is uploaded on Amazon S3.
Which of the following statements are true regarding this functionality?
-
A
Both Standard Amazon SQS queue and FIFO SQS queue are allowed as an Amazon S3 event notification destination
-
B
Neither Standard Amazon SQS queue nor FIFO SQS queue is allowed as an Amazon S3 event notification destination
-
C
Only FIFO Amazon SQS queue is allowed as an Amazon S3 event notification destination, whereas Standard SQS queue is not allowed
-
D
Only Standard Amazon SQS queue is allowed as an Amazon S3 event notification destination, whereas FIFO SQS queue is not allowed
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Đề mô tả một tình huống rất quen: mỗi khi có object mới được upload lên Amazon S3, công ty muốn đẩy một event vào một Amazon SQS queue. Câu hỏi không hỏi "cấu hình thế nào" mà hỏi phát biểu nào đúng về khả năng này — cụ thể là loại SQS queue nào được phép làm đích đến (destination) của S3 event notification.
Cụm từ quyết định nằm ở chỗ bốn phương án đối lập nhau theo đúng một trục: Standard queue so với FIFO queue. Đề bài chỉ nói chung chung "an Amazon SQS queue", nên toàn bộ việc chọn đáp án nằm ở chỗ bạn có nhớ giới hạn về loại queue mà S3 Event Notifications chấp nhận hay không. Đây là câu kiểm tra kiến thức thuộc lòng về danh sách destination hợp lệ, không phải câu suy luận kiến trúc.
✅ Vì sao đáp án đúng là đúng
Đáp án đúng là D — Chỉ Standard Amazon SQS queue được phép làm đích đến của S3 event notification, còn FIFO SQS queue thì không.
Tính năng S3 Event Notifications cho phép bạn nhận thông báo khi có sự kiện xảy ra trong bucket (ví dụ s3:ObjectCreated:* khi upload object mới). Để bật, bạn thêm một notification configuration khai báo những event nào muốn S3 publish và destination nào nhận thông báo đó.
S3 hỗ trợ ba nhóm destination:
- Amazon SNS topic
- Amazon SQS queue
- AWS Lambda function
Với nhánh SQS, S3 chỉ publish được vào Standard queue; FIFO queue không nằm trong danh sách destination được hỗ trợ. Vì vậy phát biểu ở phương án D là phát biểu duy nhất mô tả đúng khả năng của tính năng này.
❌ Vì sao các phương án còn lại sai
-
A — Cả Standard lẫn FIFO đều được phép. Đây là phương án "bẫy" gần đúng nhất, vì nó đúng một nửa: Standard đúng là được phép. Nhưng nó nới rộng sang FIFO, mà FIFO không được S3 Event Notifications chấp nhận làm destination. Người chọn A thường suy luận "SQS là SQS, hai loại queue chỉ khác nhau ở thứ tự và tính trùng lặp" — suy luận đó đúng về mặt đặc tính queue, nhưng danh sách destination được hỗ trợ là một ràng buộc riêng của phía S3, không suy ra được từ đặc tính của SQS.
-
B — Không loại nào được phép. Sai ngay từ tiền đề, vì SQS queue rõ ràng là một trong ba destination hợp lệ của S3 Event Notifications, bên cạnh SNS topic và Lambda. Nếu B đúng thì chính tình huống mà đề bài mô tả sẽ không thực hiện được, trong khi đề đang giả định nó khả thi.
-
C — Chỉ FIFO được phép, Standard thì không. Đây là phương án đảo ngược hoàn toàn thực tế. Nó hấp dẫn với ai nghĩ rằng "event upload thì cần đúng thứ tự nên chắc phải là FIFO". Thứ tự nghe có vẻ hợp lý về mặt nghiệp vụ, nhưng nó không phản ánh những gì S3 Event Notifications thực sự hỗ trợ — quan hệ đúng là ngược lại.
📌 Điểm cần nhớ
- S3 Event Notifications có đúng ba nhóm destination cần thuộc lòng: SNS topic, SQS queue, Lambda function. Câu hỏi dạng "destination nào hợp lệ" xuất hiện rất thường xuyên.
- Ở nhánh SQS, chỉ Standard queue được chấp nhận; FIFO queue không phải destination hợp lệ của S3 event notification.
- Khi bốn phương án có dạng "cả hai / không cái nào / chỉ X / chỉ Y", chúng đang kiểm tra một danh sách hỗ trợ cụ thể chứ không phải khả năng suy luận. Hãy nhớ danh sách, đừng suy từ đặc tính chung của dịch vụ.
- Đừng suy "nghiệp vụ cần đúng thứ tự ⇒ phải dùng FIFO" để đoán khả năng tích hợp: nhu cầu về thứ tự và loại queue mà một dịch vụ khác được phép publish vào là hai chuyện tách rời nhau.