Logo Zephyrnet

Xử lý dữ liệu tham chiếu thay đổi nhanh trong công việc ETL truyền trực tuyến Keo AWS

Ngày:

Truyền trực tuyến công việc ETL in Keo AWS có thể sử dụng dữ liệu từ các nguồn phát trực tuyến như Amazon KinesisKafka Apache, làm sạch và chuyển đổi các luồng dữ liệu đó trong chuyến bay, cũng như liên tục tải kết quả vào Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) hồ dữ liệu, kho dữ liệu hoặc các kho dữ liệu khác.

Bản chất luôn bật của các công việc phát trực tuyến đặt ra một thách thức duy nhất khi xử lý dữ liệu tham chiếu thay đổi nhanh được sử dụng để làm phong phú thêm các luồng dữ liệu trong công việc ETL phát trực tuyến AWS Glue. AWS Glue xử lý dữ liệu thời gian thực từ Luồng dữ liệu Amazon Kinesis sử dụng lô vi mô. Các foreachbatch phương pháp được sử dụng để xử lý lô vi xử lý một luồng dữ liệu.

Bài đăng này đề xuất một giải pháp để làm phong phú thêm dữ liệu phát trực tuyến với dữ liệu tham chiếu thường xuyên thay đổi trong công việc ETL phát trực tuyến AWS Glue.

Bạn có thể làm phong phú thêm các luồng dữ liệu bằng cách thay đổi dữ liệu tham chiếu theo những cách sau:

  • Đọc tập dữ liệu tham chiếu với mỗi lô vi mô, điều này có thể gây ra số lần đọc dư thừa và tăng yêu cầu đọc. Cách tiếp cận này tốn kém, không hiệu quả và không được đề cập trong bài đăng này.
  • Thiết kế một phương pháp để thông báo cho công việc phát trực tuyến AWS Glue rằng dữ liệu tham chiếu đã thay đổi và chỉ làm mới nó khi cần thiết. Cách tiếp cận này hiệu quả về chi phí và có tính khả dụng cao. Chúng tôi khuyên bạn nên sử dụng cách tiếp cận này.

Tổng quan về giải pháp

Bài đăng này sử dụng DynamoDB Streams để nắm bắt các thay đổi đối với dữ liệu tham chiếu, như được minh họa trong sơ đồ kiến ​​trúc sau. Để biết thêm thông tin về Dòng DynamoDB, hãy xem Các trường hợp sử dụng và mẫu thiết kế của dòng DynamoDB.

Dòng công việc bao gồm các bước sau:

  1. Người dùng hoặc ứng dụng cập nhật hoặc tạo một mục mới trong bảng DynamoDB.
  2. DynamoDB Streams được sử dụng để xác định các thay đổi trong dữ liệu tham chiếu.
  3. Một hàm Lambda được gọi mỗi khi một thay đổi xảy ra trong dữ liệu tham chiếu.
  4. Hàm Lambda ghi lại sự kiện có chứa bản ghi đã thay đổi, tạo “tệp thay đổi” và đặt nó vào nhóm Amazon S3.
  5. Công việc AWS Glue được thiết kế để theo dõi luồng cho giá trị này trong mỗi lô vi mô. Thời điểm nó nhìn thấy cờ thay đổi, AWS Glue bắt đầu làm mới dữ liệu DynamoDB trước khi xử lý bất kỳ bản ghi nào khác trong luồng.

Bài đăng này được kèm theo một Hình thành đám mây AWS mẫu tạo tài nguyên như được mô tả trong kiến ​​trúc giải pháp:

  • Một bảng DynamoDB có tên ProductPriority với một vài mặt hàng được tải
  • Một nhóm S3 có tên demo-bucket-<AWS AccountID>
  • Hai hàm Lambda:
    • demo-glue-script-creator-lambda
    • demo-reference-data-change-handler
  • Một luồng dữ liệu Kinesis có tên SourceKinesisStream
  • Cơ sở dữ liệu danh mục dữ liệu keo AWS được gọi là my-database
  • Hai bảng Danh mục dữ liệu
  • Một công việc AWS Glue được gọi là demo-glue-job-<AWS AccountID>. Có thể tìm thấy mã cho công việc AWS Glue Tại liên kết này.
  • Hai Quản lý truy cập và nhận dạng AWS (IAM) vai trò:
    • Một vai trò cho các chức năng Lambda để truy cập các Luồng Kinesis, Amazon S3 và DynamoDB
    • Một vai trò cho công việc AWS Glue để truy cập Kinesis, Amazon S3 và DynamoDB
  • An Trình tạo dữ liệu Amazon Kinesis (KDG) tài khoản với một người dùng được tạo thông qua Nhận thức về Amazon để tạo một luồng dữ liệu mẫu

Điều kiện tiên quyết

Đối với hướng dẫn này, bạn nên có các điều kiện tiên quyết sau:

  • Tài khoản AWS
  • Người dùng IAM phải có quyền tạo các vai trò bắt buộc
  • Quyền tạo ngăn xếp CloudFormation và các dịch vụ mà chúng tôi đã trình bày chi tiết

Tạo tài nguyên với AWS CloudFormation

Để triển khai giải pháp, hãy hoàn thành các bước sau:

  1. Chọn Khởi chạy Stack:
  2. Thiết lập nhóm người dùng Amazon Cognito và kiểm tra xem bạn có thể truy cập URL KDG được chỉ định trong tab đầu ra của ngăn xếp hay không. Hơn nữa, hãy xác thực xem bạn có thể đăng nhập vào KDG bằng thông tin đăng nhập được cung cấp trong khi tạo ngăn xếp hay không.

Bây giờ, bạn sẽ có sẵn các tài nguyên cần thiết trong tài khoản AWS của mình.

  1. Xác minh danh sách này với các tài nguyên trong phần đầu ra của ngăn xếp CloudFormation.

Dữ liệu mẫu

Dữ liệu tham chiếu mẫu đã được tải vào kho dữ liệu tham chiếu. Ảnh chụp màn hình sau đây cho thấy một ví dụ.

Sản phẩm priority giá trị có thể thay đổi thường xuyên dựa trên thời gian trong ngày, ngày trong tuần hoặc các yếu tố khác thúc đẩy cung và cầu.

Mục tiêu là để đưa những thay đổi này vào dữ liệu tham chiếu một cách liền mạch vào đường dẫn.

Tạo một luồng sự kiện ngẫu nhiên vào Kinesis

Tiếp theo, chúng tôi mô phỏng một luồng dữ liệu mẫu vào Kinesis. Để được hướng dẫn chi tiết, hãy xem Kiểm tra giải pháp dữ liệu truyền trực tuyến của bạn với Trình tạo dữ liệu Amazon Kinesis mới. Đối với bài đăng này, chúng tôi xác định cấu trúc của dữ liệu đơn đặt hàng được mô phỏng bằng cách sử dụng một mẫu được tham số hóa.

  1. Trên bảng điều khiển KDG, chọn Vùng chứa luồng Kinesis nguồn.
  2. Chọn luồng phân phối của bạn.
  3. Nhập mẫu sau vào trường Mẫu bản ghi:
    { "dish": "{{random.arrayElement(["pizza","burger","salad","donut","ice-cream"])}}"
    ,"cost": {{random.number({"min":10,"max":150})}}
    ,"customer_id":{{random.number({"min":1,"max":10000})}}
    }

  4. Chọn Mẫu thử nghiệm, sau đó chọn Gửi dữ liệu.

KDG sẽ bắt đầu gửi một luồng đơn đặt hàng được tạo ngẫu nhiên đến luồng dữ liệu Kinesis.

Chạy công việc phát trực tuyến AWS Glue

Ngăn xếp CloudFormation đã tạo một công việc AWS Glue đọc từ luồng dữ liệu Kinesis thông qua bảng Danh mục dữ liệu, kết hợp với dữ liệu tham chiếu trong DynamoDB và ghi kết quả vào nhóm S3. Để chạy công việc, hãy hoàn thành các bước sau:

  1. Trên bảng điều khiển AWS Keo, bên dưới ETL trong ngăn điều hướng, chọn việc làm.
  2. Chọn công việc demo-glue-job-<AWS AccountID>.
  3. trên Hoạt động menu, chọn Chạy công việc.

Ngoài việc bổ sung, công việc bao gồm một kiểm tra bổ sung giám sát tiền tố Amazon S3 cho tệp “Cờ thay đổi”. Tệp này được tạo bởi hàm Lambda, được gọi bởi luồng DynamoDB bất cứ khi nào có bản cập nhật hoặc mục tham chiếu mới.

Điều tra dữ liệu mục tiêu trong Amazon S3

Sau đây là ảnh chụp màn hình của dữ liệu được tải trong thời gian thực vào item=burger vách ngăn. Mức độ ưu tiên được đặt thành phương tiện trong dữ liệu tham chiếu và các đơn đặt hàng đi vào phân vùng tương ứng.

Cập nhật dữ liệu tham chiếu

Bây giờ chúng tôi cập nhật mức độ ưu tiên cho burgers đến high trong bảng DynamoDB thông qua bảng điều khiển trong khi các đơn đặt hàng đang truyền vào đường dẫn.

Sử dụng lệnh sau để thực hiện cập nhật thông qua Amazon CloudShell. Thay đổi Vùng thành giá trị thích hợp.

aws dynamodb update-item --table-name "ProductPriority" --key '{"item":{"S":"burger"}, "price":{"N":"100"}}' --update-expression "SET priority = :s" --expression-attribute-values '{":s": {"S": "high"}}' --return-values ALL_NEW --region us-east-1

Xác minh rằng dữ liệu đã được cập nhật.

Điều hướng đến thư mục S3 đích để xác nhận nội dung. Công việc AWS Glue lẽ ra đã bắt đầu gửi đơn đặt hàng bánh mì kẹp thịt vào high vách ngăn.

Hàm Lambda được gọi bởi luồng DynamoDB và đặt tệp “Cờ thay đổi” trong nhóm Amazon S3. Công việc AWS Glue làm mới dữ liệu tham chiếu và xóa tệp để tránh làm mới dư thừa.

Sử dụng mẫu này cho dữ liệu tham chiếu trong Amazon S3

Nếu dữ liệu tham chiếu được lưu trữ trong nhóm S3, hãy tạo Thông báo sự kiện Amazon S3 xác định các thay đổi đối với tiền tố nơi dữ liệu tham chiếu được lưu trữ. Thông báo sự kiện gọi một hàm Lambda chèn cờ thay đổi vào luồng dữ liệu.

Dọn dẹp

Để tránh phát sinh các khoản phí trong tương lai, hãy xóa tài nguyên. Bạn có thể làm điều này bằng cách xóa ngăn xếp CloudFormation.

Kết luận

Trong bài đăng này, chúng tôi đã thảo luận về các phương pháp xử lý dữ liệu tham chiếu thay đổi nhanh chóng được lưu trữ trong DynamoDB hoặc Amazon S3. Chúng tôi đã trình bày một trường hợp sử dụng đơn giản thực hiện mô hình này.

Lưu ý rằng DynamoDB Streams ghi các bản ghi luồng trong thời gian gần thực. Khi thiết kế giải pháp của bạn, hãy tính đến độ trễ nhỏ giữa bản cập nhật thực tế trong DynamoDB và quá trình ghi vào luồng DynamoDB.


Về các tác giả

Jerome Rajan là Nhà tư vấn phân tích dữ liệu khách hàng tiềm năng tại AWS. Anh ấy giúp khách hàng thiết kế và xây dựng các giải pháp phân tích có thể mở rộng và di chuyển các đường ống dẫn dữ liệu và kho dữ liệu vào đám mây. Trong một vũ trụ thay thế, anh ấy là Nhà vô địch Cờ vua Thế giới!

Dipankar Ghosal là Kiến trúc sư chính tại Amazon Web Services và có trụ sở tại Minneapolis, MN. Anh ấy tập trung vào phân tích và thích giúp khách hàng giải quyết các trường hợp sử dụng duy nhất của họ. Khi không làm việc, anh ấy thích đi bộ đường dài với vợ và con gái.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img

Trò chuyện trực tiếp với chúng tôi (chat)

Chào bạn! Làm thế nào để tôi giúp bạn?