Logo Zephyrnet

Thực thi kiểm soát truy cập chi tiết trên Định dạng bảng mở thông qua Amazon EMR được tích hợp với AWS Lake Formation | Dịch vụ web của Amazon

Ngày:

Với Amazon EMR 6.15/XNUMX, chúng tôi đã phát động Sự hình thành hồ AWS dựa trên các điều khiển truy cập chi tiết (FGAC) trên Định dạng bảng mở (OTF), bao gồm Apache Hudi, Apache Iceberg và Delta lake. Điều này cho phép bạn đơn giản hóa việc bảo mật và quản trị trên hồ dữ liệu giao dịch bằng cách cung cấp các điều khiển truy cập ở các quyền cấp bảng, cột và hàng với các công việc Apache Spark của bạn. Nhiều công ty doanh nghiệp lớn tìm cách sử dụng hồ dữ liệu giao dịch của họ để hiểu rõ hơn và cải thiện việc ra quyết định. Bạn có thể xây dựng kiến ​​trúc ngôi nhà bên hồ bằng cách sử dụng Amazon EMR được tích hợp với Lake Formation cho FGAC. Sự kết hợp các dịch vụ này cho phép bạn tiến hành phân tích dữ liệu trên hồ dữ liệu giao dịch của mình trong khi vẫn đảm bảo quyền truy cập an toàn và được kiểm soát.

Thành phần máy chủ bản ghi Amazon EMR hỗ trợ chức năng lọc dữ liệu cấp thuộc tính bảng, cột, hàng, ô và lồng nhau. Nó mở rộng hỗ trợ cho các định dạng Hive, Apache Hudi, Apache Iceberg và Delta lake cho cả hoạt động đọc (bao gồm du hành thời gian và truy vấn gia tăng) và ghi (trên các câu lệnh DML như INSERT). Ngoài ra, với phiên bản 6.15, Amazon EMR còn giới thiệu tính năng bảo vệ kiểm soát truy cập cho giao diện web ứng dụng của mình, chẳng hạn như Máy chủ lịch sử Spark trên cụm, Máy chủ dòng thời gian Yarn và giao diện người dùng Trình quản lý tài nguyên Yarn.

Trong bài đăng này, chúng tôi trình bày cách triển khai FGAC trên Apache Hudi các bảng sử dụng Amazon EMR được tích hợp với Lake Formation.

Trường hợp sử dụng hồ dữ liệu giao dịch

Khách hàng của Amazon EMR thường sử dụng Định dạng bảng mở để hỗ trợ nhu cầu giao dịch ACID và du hành thời gian trong hồ dữ liệu. Bằng cách lưu giữ các phiên bản lịch sử, việc du hành thời gian của hồ dữ liệu mang lại các lợi ích như kiểm tra và tuân thủ, phục hồi và khôi phục dữ liệu, phân tích có thể tái tạo và khám phá dữ liệu tại các thời điểm khác nhau.

Một trường hợp sử dụng hồ dữ liệu giao dịch phổ biến khác là truy vấn gia tăng. Truy vấn gia tăng đề cập đến chiến lược truy vấn chỉ tập trung vào việc xử lý và phân tích dữ liệu mới hoặc cập nhật trong hồ dữ liệu kể từ truy vấn cuối cùng. Ý tưởng chính đằng sau các truy vấn gia tăng là sử dụng siêu dữ liệu hoặc cơ chế theo dõi thay đổi để xác định dữ liệu mới hoặc dữ liệu đã sửa đổi kể từ truy vấn cuối cùng. Bằng cách xác định những thay đổi này, công cụ truy vấn có thể tối ưu hóa truy vấn để chỉ xử lý dữ liệu liên quan, giảm đáng kể thời gian xử lý và yêu cầu về tài nguyên.

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

Trong bài đăng này, chúng tôi trình bày cách triển khai FGAC trên các bảng Apache Hudi bằng Amazon EMR trên Đám mây điện toán đàn hồi Amazon (Amazon EC2) được tích hợp với Lake Formation. Apache Hudi là một khung hồ dữ liệu giao dịch nguồn mở giúp đơn giản hóa đáng kể việc xử lý dữ liệu gia tăng và phát triển các đường dẫn dữ liệu. Tính năng FGAC mới này hỗ trợ tất cả OTF. Ngoài việc trình diễn với Hudi tại đây, chúng tôi sẽ theo dõi các bảng OTF khác trên các blog khác. Chúng tôi sử dụng máy tính xách tay in Xưởng sản xuất Amazon SageMaker để đọc và ghi dữ liệu Hudi thông qua các quyền truy cập khác nhau của người dùng thông qua cụm EMR. Điều này phản ánh các tình huống truy cập dữ liệu trong thế giới thực—ví dụ: nếu người dùng kỹ thuật cần quyền truy cập dữ liệu đầy đủ để khắc phục sự cố trên nền tảng dữ liệu, trong khi các nhà phân tích dữ liệu có thể chỉ cần truy cập vào một tập hợp con dữ liệu không chứa thông tin nhận dạng cá nhân (PII). ). Tích hợp với Lake Formation thông qua Vai trò thời gian chạy của Amazon EMR còn cho phép bạn cải thiện tình trạng bảo mật dữ liệu của mình và đơn giản hóa việc quản lý kiểm soát dữ liệu đối với khối lượng công việc của Amazon EMR. Giải pháp này đảm bảo một môi trường an toàn và được kiểm soát để truy cập dữ liệu, đáp ứng nhu cầu đa dạng và yêu cầu bảo mật của những người dùng và vai trò khác nhau trong một tổ chức.

Sơ đồ sau minh họa kiến ​​trúc giải pháp.

Giải pháp xây dựng

Chúng tôi tiến hành quá trình nhập dữ liệu để nâng cấp (cập nhật và chèn) tập dữ liệu Hudi vào Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) và duy trì hoặc cập nhật lược đồ bảng trong Keo AWS Danh mục dữ liệu. Không cần di chuyển dữ liệu, chúng ta có thể truy vấn bảng Hudi do Lake Formation quản lý thông qua nhiều dịch vụ AWS khác nhau, chẳng hạn như amazon Athena, Amazon EMR và Amazon SageMaker.

Khi người dùng gửi công việc Spark thông qua bất kỳ điểm cuối nào của cụm EMR (Các bước EMR, Livy, EMR Studio và SageMaker), Lake Formation sẽ xác thực các đặc quyền của họ và hướng dẫn cụm EMR lọc ra dữ liệu nhạy cảm như dữ liệu PII.

Giải pháp này có ba loại người dùng khác nhau với các cấp độ quyền khác nhau để truy cập dữ liệu Hudi:

  • hudi-db-người tạo-vai trò – Điều này được sử dụng bởi quản trị viên hồ dữ liệu, người có đặc quyền thực hiện các hoạt động DDL như tạo, sửa đổi và xóa các đối tượng cơ sở dữ liệu. Họ có thể xác định quy tắc lọc dữ liệu trên Lake Formation để kiểm soát quyền truy cập dữ liệu ở cấp hàng và cấp cột. Các quy tắc FGAC này đảm bảo rằng hồ dữ liệu được bảo mật và đáp ứng các quy định bắt buộc về quyền riêng tư dữ liệu.
  • hudi-bảng-pii-vai trò – Điều này được sử dụng bởi người dùng kỹ thuật. Người dùng kỹ thuật có khả năng thực hiện các truy vấn du hành thời gian và gia tăng trên cả Sao chép khi ghi (CoW) và Hợp nhất khi đọc (MoR). Họ cũng có đặc quyền truy cập dữ liệu PII dựa trên bất kỳ dấu thời gian nào.
  • hudi-bảng-không-pii-vai trò – Điều này được sử dụng bởi các nhà phân tích dữ liệu. Quyền truy cập dữ liệu của nhà phân tích dữ liệu được điều chỉnh bởi các quy tắc được ủy quyền của FGAC do quản trị viên hồ dữ liệu kiểm soát. Chúng không hiển thị trên các cột chứa dữ liệu PII như tên và địa chỉ. Ngoài ra, họ không thể truy cập các hàng dữ liệu không đáp ứng một số điều kiện nhất định. Ví dụ: người dùng chỉ có thể truy cập các hàng dữ liệu thuộc về quốc gia của họ.

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

Bạn có thể tải xuống ba sổ ghi chép được sử dụng trong bài viết này từ Repo GitHub.

Trước khi triển khai giải pháp, hãy đảm bảo bạn có những điều sau:

Hoàn tất các bước sau để thiết lập quyền của bạn:

  1. Đăng nhập vào tài khoản AWS của bạn bằng người dùng IAM quản trị viên.

Đảm bảo rằng bạn đang ở trongus-east-1Khu vực.

  1. Tạo nhóm S3 trong us-east-1 Khu vực (ví dụ:emr-fgac-hudi-us-east-1-<ACCOUNT ID>).

Tiếp theo, chúng tôi kích hoạt Lake Formation bằng cách thay đổi mô hình cấp phép mặc định.

  1. Đăng nhập vào bảng điều khiển Lake Formation với tư cách là người dùng quản trị viên.
  2. Chọn Cài đặt Danh mục dữ liệu Dưới Quản trị trong khung điều hướng.
  3. Theo Quyền mặc định cho cơ sở dữ liệu và bảng mới được tạo, bỏ chọn Chỉ sử dụng kiểm soát truy cập IAM cho cơ sở dữ liệu mớiChỉ sử dụng kiểm soát truy cập IAM cho các bảng mới trong cơ sở dữ liệu mới.
  4. Chọn Lưu.

Cài đặt Danh mục dữ liệu

Ngoài ra, bạn cần thu hồi IAMAllowedPrincipals trên các tài nguyên (cơ sở dữ liệu và bảng) được tạo nếu bạn khởi động Lake Formation với tùy chọn mặc định.

Cuối cùng, chúng tôi tạo cặp khóa cho Amazon EMR.

  1. Trên bảng điều khiển Amazon EC2, hãy chọn Cặp khóa trong khung điều hướng.
  2. Chọn Tạo cặp khóa.
  3. Trong Họ tên, nhập tên (ví dụemr-fgac-hudi-keypair).
  4. Chọn Tạo cặp khóa.

Tạo cặp khóa

Cặp khóa được tạo (đối với bài đăng này, emr-fgac-hudi-keypair.pem) sẽ lưu vào máy tính cục bộ của bạn.

Tiếp theo, chúng ta tạo một Đám mây AWS9 môi trường phát triển tương tác (IDE).

  1. Trên bảng điều khiển AWS Cloud9, hãy chọn Môi trường trong khung điều hướng.
  2. Chọn Tạo môi trường.
  3. Trong Họ tên¸ nhập tên (ví dụ:emr-fgac-hudi-env).
  4. Giữ các cài đặt khác làm mặc định.

Môi trường Cloud9

  1. Chọn Tạo.
  2. Khi IDE đã sẵn sàng, hãy chọn Mở mở nó ra.

môi trường cloud9

  1. Trong IDE AWS Cloud9, trên Tập tin menu, chọn Tải lên tệp cục bộ.

Tải lên tệp cục bộ

  1. Tải lên tệp cặp khóa (emr-fgac-hudi-keypair.pem).
  2. Chọn dấu cộng và chọn Nhà ga mới.

thiết bị đầu cuối mới

  1. Trong terminal, nhập các dòng lệnh sau:
#Create encryption certificates for EMR in transit encryption
openssl req -x509 
-newkey rsa:1024 
-keyout privateKey.pem 
-out certificateChain.pem 
-days 365 
-nodes 
-subj '/C=US/ST=Washington/L=Seattle/O=MyOrg/OU=MyDept/CN=*.compute.internal'
cp certificateChain.pem trustedCertificates.pem

# Zip certificates
zip -r -X my-certs.zip certificateChain.pem privateKey.pem trustedCertificates.pem

# Upload the certificates zip file to S3 bucket
# Replace <ACCOUNT ID> with your AWS account ID
aws s3 cp ./my-certs.zip s3://emr-fgac-hudi-us-east-1-<ACCOUNT ID>/my-certs.zip

Lưu ý rằng mã ví dụ là bằng chứng về khái niệm chỉ nhằm mục đích trình diễn. Đối với các hệ thống sản xuất, hãy sử dụng cơ quan chứng nhận (CA) đáng tin cậy để cấp chứng chỉ. tham khảo Cung cấp chứng chỉ mã hóa dữ liệu khi truyền bằng mã hóa Amazon EMR để biết thêm chi tiết.

Triển khai giải pháp thông qua AWS CloudFormation

Chúng tôi cung cấp một Hình thành đám mây AWS mẫu tự động thiết lập các dịch vụ và thành phần sau:

  • Bộ chứa S3 dành cho hồ dữ liệu. Nó chứa tập dữ liệu TPC-DS mẫu.
  • Cụm EMR có cấu hình bảo mật và DNS công cộng được bật.
  • Các vai trò IAM thời gian chạy EMR với các quyền chi tiết của Lake Formation:
    • -hudi-db-creator-vai trò – Vai trò này được sử dụng để tạo cơ sở dữ liệu và bảng Apache Hudi.
    • -hudi-table-pii-role – Vai trò này cung cấp quyền truy vấn tất cả các cột của bảng Hudi, bao gồm cả các cột có PII.
    • -hudi-table-non-pii-role – Vai trò này cung cấp quyền truy vấn các bảng Hudi đã lọc các cột PII theo Lake Formation.
  • Các vai trò thực thi của SageMaker Studio cho phép người dùng đảm nhận các vai trò thời gian chạy EMR tương ứng của họ.
  • Các tài nguyên mạng như VPC, mạng con và nhóm bảo mật.

Hoàn thành các bước sau để triển khai tài nguyên:

  1. Chọn Tạo ngăn xếp nhanh chóng để khởi chạy ngăn xếp CloudFormation.
  2. Trong Tên ngăn xếp, nhập tên ngăn xếp (ví dụ:rsv2-emr-hudi-blog).
  3. Trong Ec2KeyCặp, nhập tên cặp khóa của bạn.
  4. Trong Thời gian chờ không hoạt động, hãy nhập thời gian chờ không hoạt động cho cụm EMR để tránh phải trả tiền cho cụm khi cụm đó không được sử dụng.
  5. Trong Ban đầuS3Nhóm, hãy nhập tên vùng lưu trữ S3 mà bạn đã tạo để lưu tệp .zip chứng chỉ mã hóa Amazon EMR.
  6. Trong S3CertsZip, hãy nhập URI S3 của tệp .zip chứng chỉ mã hóa Amazon EMR.

Mẫu CloudFormation

  1. Chọn Tôi xác nhận rằng AWS CloudFormation có thể tạo tài nguyên IAM với tên tùy chỉnh.
  2. Chọn Tạo ngăn xếp.

Quá trình triển khai ngăn xếp CloudFormation mất khoảng 10 phút.

Thiết lập Lake Formation để tích hợp Amazon EMR

Hoàn thành các bước sau để thiết lập Lake Formation:

  1. Trên bảng điều khiển Lake Formation, hãy chọn Cài đặt tích hợp ứng dụng Dưới Quản trị trong khung điều hướng.
  2. Chọn Cho phép các công cụ bên ngoài lọc dữ liệu ở các vị trí Amazon S3 đã đăng ký với Lake Formation.
  3. Chọn Amazon EMR cho Giá trị thẻ phiên.
  4. Nhập ID tài khoản AWS của bạn cho ID tài khoản AWS.
  5. Chọn Lưu.

LF - Cài đặt tích hợp ứng dụng

  1. Chọn Cơ sở dữ liệu Dưới Danh mục dữ liệu trong khung điều hướng.
  2. Chọn Tạo cơ sở dữ liệu.
  3. Trong Họ tên, nhập mặc định.
  4. Chọn Tạo cơ sở dữ liệu.

LF - tạo cơ sở dữ liệu

  1. Chọn Quyền của hồ dữ liệu Dưới Quyền trong khung điều hướng.
  2. Chọn Cấp.
  3. Chọn Người dùng IAM và vai trò.
  4. Chọn vai trò IAM của bạn.
  5. Trong Cơ sở dữ liệu, chọn mặc định.
  6. Trong Quyền cơ sở dữ liệu, lựa chọn Mô tả.
  7. Chọn Cấp.

LF - Cấp quyền truy cập dữ liệu

Sao chép tệp Hudi JAR sang Amazon EMR HDFS

Đến sử dụng Hudi với sổ ghi chép Jupyter, bạn cần hoàn tất các bước sau cho cụm EMR, bao gồm sao chép tệp Hudi JAR từ thư mục cục bộ Amazon EMR sang bộ lưu trữ HDFS của nó, để bạn có thể đặt cấu hình phiên Spark để sử dụng Hudi:

  1. Cho phép lưu lượng SSH gửi đến (cổng 22).
  2. Sao chép giá trị cho DNS công cộng của nút chính (ví dụ: ec2-XXX-XXX-XXX-XXX.compute-1.amazonaws.com) từ cụm EMR Tổng kết phần.

Tóm tắt cụm EMR

  1. Quay lại thiết bị đầu cuối AWS Cloud9 trước đó mà bạn đã sử dụng để tạo cặp khóa EC2.
  2. Chạy lệnh sau để SSH vào nút chính EMR. Thay thế trình giữ chỗ bằng tên máy chủ DNS EMR của bạn:
chmod 400 emr-fgac-hudi-keypair.pem
ssh -i emr-fgac-hudi-keypair.pem hadoop@ec2-XXX-XXX-XXX-XXX.compute-1.amazonaws.com

  1. Chạy lệnh sau để sao chép tệp Hudi JAR sang HDFS:
hdfs dfs -mkdir -p /apps/hudi/lib
hdfs dfs -copyFromLocal /usr/lib/hudi/hudi-spark-bundle.jar /apps/hudi/lib/hudi-spark-bundle.jar

Tạo cơ sở dữ liệu và bảng Hudi trong Lake Formation

Bây giờ chúng ta đã sẵn sàng tạo cơ sở dữ liệu và bảng Hudi với FGAC được vai trò thời gian chạy EMR kích hoạt. Các Vai trò thời gian chạy EMR là vai trò IAM mà bạn có thể chỉ định khi gửi công việc hoặc truy vấn tới cụm EMR.

Cấp quyền cho người tạo cơ sở dữ liệu

Trước tiên, hãy cấp quyền cho người tạo cơ sở dữ liệu Lake Formation<STACK-NAME>-hudi-db-creator-role:

  1. Đăng nhập vào tài khoản AWS của bạn với tư cách quản trị viên.
  2. Trên bảng điều khiển Lake Formation, hãy chọn Vai trò và nhiệm vụ quản trị Dưới Quản trị trong khung điều hướng.
  3. Xác nhận rằng người dùng đăng nhập AWS của bạn đã được thêm làm quản trị viên hồ dữ liệu.
  4. Trong tạp chí Người tạo cơ sở dữ liệu phần, chọn Cấp.
  5. Trong Người dùng IAM và vai trò, chọn<STACK-NAME>-hudi-db-creator-role.
  6. Trong Quyền đối với danh mục, lựa chọn Tạo cơ sở dữ liệu.
  7. Chọn Cấp.

Đăng ký vị trí hồ dữ liệu

Tiếp theo, hãy đăng ký vị trí hồ dữ liệu S3 trong Lake Formation:

  1. Trên bảng điều khiển Lake Formation, hãy chọn Vị trí hồ dữ liệu Dưới Quản trị trong khung điều hướng.
  2. Chọn Đăng ký vị trí.
  3. Trong Đường dẫn Amazon S3, Chọn Xem và chọn nhóm hồ dữ liệu S3. (<STACK_NAME>s3bucket-XXXXXXX) được tạo từ ngăn xếp CloudFormation.
  4. Trong Vai trò IAM, chọn<STACK-NAME>-hudi-db-creator-role.
  5. Trong Chế độ cho phép, lựa chọn Hồ hình thành.
  6. Chọn Đăng ký vị trí.

LF - Đăng ký địa điểm

Cấp quyền vị trí dữ liệu

Tiếp theo, chúng ta cần cấp<STACK-NAME>-hudi-db-creator-rolequyền vị trí dữ liệu:

  1. Trên bảng điều khiển Lake Formation, hãy chọn Vị trí dữ liệu Dưới Quyền trong khung điều hướng.
  2. Chọn Cấp.
  3. Trong Người dùng IAM và vai trò, chọn<STACK-NAME>-hudi-db-creator-role.
  4. Trong Vị trí lưu trữ, nhập nhóm S3 (<STACK_NAME>-s3bucket-XXXXXXX).
  5. Chọn Cấp.

LF - Cấp quyền

Kết nối với cụm EMR

Bây giờ, hãy sử dụng sổ ghi chép Jupyter trong SageMaker Studio để kết nối với cụm EMR với vai trò thời gian chạy EMR của người tạo cơ sở dữ liệu:

  1. Trên bảng điều khiển SageMaker, chọn Tên miền trong khung điều hướng.
  2. Chọn miền<STACK-NAME>-Studio-EMR-LF-Hudi.
  3. trên Khởi động menu bên cạnh hồ sơ người dùng<STACK-NAME>-hudi-db-creator, chọn Studio.

SM - Chi tiết tên miền

  1. Tải xuống sổ ghi chép rsv2-hudi-db-creator-notebook.
  2. Chọn biểu tượng tải lên.

SM Studio - Tải lên

  1. Chọn sổ ghi chép Jupyter đã tải xuống và chọn Mở.
  2. Mở sổ ghi chép đã tải lên.
  3. Trong Hình ảnh, chọn tia lửa ma thuật.
  4. Trong Hạt nhân, chọn PySpark.
  5. Để các cấu hình khác làm mặc định và chọn Chọn.

SM Studio - Thay đổi môi trường

  1. Chọn cụm để kết nối với cụm EMR.

SM Studio - kết nối cụm EMR

  1. Chọn EMR trên cụm EC2 (<STACK-NAME>-EMR-Cluster) được tạo bằng ngăn xếp CloudFormation.
  2. Chọn Kết nối.
  3. Trong Vai trò thực thi EMR, chọn<STACK-NAME>-hudi-db-creator-role.
  4. Chọn Kết nối.

Tạo cơ sở dữ liệu và bảng

Bây giờ bạn có thể làm theo các bước trong sổ ghi chép để tạo cơ sở dữ liệu và bảng Hudi. Các bước chính như sau:

  1. Khi bạn khởi động sổ ghi chép, hãy cấu hình“spark.sql.catalog.spark_catalog.lf.managed":"true"để thông báo cho Spark rằng spark_catalog được bảo vệ bởi Lake Formation.
  2. Tạo bảng Hudi bằng Spark SQL sau.
%%sql 
CREATE TABLE IF NOT EXISTS ${hudi_catalog}.${hudi_db}.${cow_table_name_sql}(
    c_customer_id string,
    c_birth_country string,
    c_customer_sk integer,
    c_email_address string,
    c_first_name string,
    c_last_name string,
    ts bigint
) USING hudi
LOCATION '${cow_table_location_sql}'
OPTIONS (
  type = 'cow',
  primaryKey = '${hudi_primary_key}',
  preCombineField = '${hudi_pre_combined_field}'
 ) 
PARTITIONED BY (${hudi_partitioin_field});

  1. Chèn dữ liệu từ bảng nguồn vào bảng Hudi.
%%sql
INSERT OVERWRITE ${hudi_catalog}.${hudi_db}.${cow_table_name_sql}
SELECT 
    c_customer_id ,  
    c_customer_sk,
    c_email_address,
    c_first_name,
    c_last_name,
    unix_timestamp(current_timestamp()) AS ts,
    c_birth_country
FROM ${src_df_view}
WHERE c_birth_country = 'HONG KONG' OR c_birth_country = 'CHINA' 
LIMIT 1000

  1. Chèn lại dữ liệu vào bảng Hudi.
%%sql
INSERT INTO ${hudi_catalog}.${hudi_db}.${cow_table_name_sql}
SELECT 
    c_customer_id ,  
    c_customer_sk,
    c_email_address,
    c_first_name,
    c_last_name,
    unix_timestamp(current_timestamp()) AS ts,
    c_birth_country
FROM ${insert_into_view}

Truy vấn các bảng Hudi thông qua Lake Formation với FGAC

Sau khi tạo cơ sở dữ liệu và bảng Hudi, bạn đã sẵn sàng truy vấn các bảng bằng cách sử dụng kiểm soát truy cập chi tiết với Lake Formation. Chúng tôi đã tạo hai loại bảng Hudi: Sao chép khi ghi (COW) và Hợp nhất khi đọc (MOR). Bảng COW lưu trữ dữ liệu ở định dạng cột (Parquet) và mỗi bản cập nhật sẽ tạo ra một phiên bản tệp mới trong quá trình ghi. Điều này có nghĩa là với mỗi bản cập nhật, Hudi sẽ ghi lại toàn bộ tệp, việc này có thể tốn nhiều tài nguyên hơn nhưng mang lại hiệu suất đọc nhanh hơn. Mặt khác, MOR được giới thiệu cho các trường hợp COW có thể không tối ưu, đặc biệt đối với khối lượng công việc có nhiều thao tác ghi hoặc thay đổi. Trong bảng MOR, mỗi khi có bản cập nhật, Hudi chỉ ghi hàng cho bản ghi đã thay đổi, điều này giúp giảm chi phí và cho phép ghi có độ trễ thấp. Tuy nhiên, hiệu suất đọc có thể chậm hơn so với bảng COW.

Cấp quyền truy cập bảng

Chúng tôi sử dụng vai trò IAM<STACK-NAME>-hudi-table-pii-roleđể truy vấn Hudi COW và MOR chứa các cột PII. Trước tiên, chúng tôi cấp quyền truy cập bảng thông qua Lake Formation:

  1. Trên bảng điều khiển Lake Formation, hãy chọn Quyền của hồ dữ liệu Dưới Quyền trong khung điều hướng.
  2. Chọn Cấp.
  3. Chọn<STACK-NAME>-hudi-table-pii-rolecho Người dùng IAM và vai trò.
  4. Chọnrsv2_blog_hudi_db_1cơ sở dữ liệu cho Cơ sở dữ liệu.
  5. Trong Bàn, hãy chọn bốn bảng Hudi bạn đã tạo trong sổ ghi chép Jupyter.

LF - Cấp quyền truy cập dữ liệu

  1. Trong Quyền bảng, lựa chọn Chọn.
  2. Chọn Cấp.

LF - quyền bảng

Truy vấn cột PII

Bây giờ bạn đã sẵn sàng chạy sổ ghi chép để truy vấn các bảng Hudi. Hãy làm theo các bước tương tự như phần trước để chạy sổ ghi chép trong SageMaker Studio:

  1. Trên bảng điều khiển SageMaker, điều hướng đến<STACK-NAME>-Studio-EMR-LF-Hudimiền.
  2. trên Khởi động menu bên cạnh<STACK-NAME>-hudi-table-readerhồ sơ người dùng, chọn Studio.
  3. Tải sổ ghi chép đã tải xuống lên rsv2-hudi-table-pii-reader-notebook.
  4. Mở sổ ghi chép đã tải lên.
  5. Lặp lại các bước thiết lập sổ ghi chép và kết nối với cùng một cụm EMR nhưng sử dụng vai trò<STACK-NAME>-hudi-table-pii-role.

Trong giai đoạn hiện tại, cụm EMR hỗ trợ FGAC cần truy vấn cột thời gian cam kết của Hudi để thực hiện các truy vấn gia tăng và di chuyển thời gian. Nó không hỗ trợ cú pháp “dấu thời gian kể từ” của Spark và Spark.read(). Chúng tôi đang tích cực nỗ lực kết hợp hỗ trợ cho cả hai hành động trong các bản phát hành Amazon EMR trong tương lai có bật FGAC.

Bây giờ bạn có thể làm theo các bước trong sổ ghi chép. Sau đây là một số bước nổi bật:

  1. Chạy truy vấn ảnh chụp nhanh.
%%sql 
SELECT c_birth_country, count(*) FROM ${hudi_catalog}.${hudi_db}.${cow_table_name_sql} GROUP BY c_birth_country;

  1. Chạy một truy vấn gia tăng.
incremental_df = spark.sql(f"""
SELECT * FROM {HUDI_CATALOG}.{HUDI_DATABASE}.{COW_TABLE_NAME_SQL} WHERE _hoodie_commit_time >= {commit_ts[-1]}
""")

incremental_df.createOrReplaceTempView("incremental_view")

%%sql
SELECT 
    c_birth_country, 
    count(*) 
FROM incremental_view
GROUP BY c_birth_country;

  1. Chạy truy vấn du hành thời gian.
%%sql
SELECT
    c_birth_country, COUNT(*) as count
FROM ${hudi_catalog}.${hudi_db}.${cow_table_name_sql}
WHERE _hoodie_commit_time IN
(
    SELECT DISTINCT _hoodie_commit_time FROM ${hudi_catalog}.${hudi_db}.${cow_table_name_sql} ORDER BY _hoodie_commit_time LIMIT 1 
)
GROUP BY c_birth_country

  1. Chạy các truy vấn bảng thời gian thực và được tối ưu hóa cho việc đọc MOR.
%%sql
SELECT
    a.email_label,
    count(*)
FROM (
    SELECT
        CASE
            WHEN c_email_address = 'UNKNOWN' THEN 'UNKNOWN'
            ELSE 'NOT_UNKNOWN'
        END AS email_label
    FROM ${hudi_catalog}.${hudi_db}.${mor_table_name_sql}_ro
    WHERE c_birth_country = 'HONG KONG'
) a
GROUP BY a.email_label;

%%sql
SELECT *  
FROM ${hudi_catalog}.${hudi_db}.${mor_table_name_sql}_ro
WHERE 
    c_birth_country = 'INDIA' OR c_first_name = 'MASKED'

Truy vấn các bảng Hudi bằng bộ lọc dữ liệu cấp cột và cấp hàng

Chúng tôi sử dụng vai trò IAM<STACK-NAME>-hudi-table-non-pii-roleđể truy vấn các bảng Hudi. Vai trò này không được phép truy vấn bất kỳ cột nào chứa PII. Chúng tôi sử dụng bộ lọc dữ liệu cấp cột và cấp hàng của Lake Formation để triển khai kiểm soát truy cập chi tiết:

  1. Trên bảng điều khiển Lake Formation, hãy chọn Bộ lọc dữ liệu Dưới Danh mục dữ liệu trong khung điều hướng.
  2. Chọn Tạo bộ lọc mới.
  3. Trong Tên bộ lọc dữ liệu, đi vàocustomer-pii-filter.
  4. Chọnrsv2_blog_hudi_db_1cho Cơ sở dữ liệu mục tiêu.
  5. Chọnrsv2_blog_hudi_mor_sql_dl_customer_1cho Bảng mục tiêu.
  6. Chọn Loại trừ các cột và chọnc_customer_id,c_email_addressc_last_namecột.
  7. đăng ký hạng mục thic_birth_country != 'HONG KONG'cho Biểu thức bộ lọc hàng.
  8. Chọn Tạo bộ lọc.

LF - tạo bộ lọc dữ liệu

  1. Chọn Quyền của hồ dữ liệu Dưới Quyền trong khung điều hướng.
  2. Chọn Cấp.
  3. Chọn<STACK-NAME>-hudi-table-non-pii-rolecho Người dùng IAM và vai trò.
  4. Chọnrsv2_blog_hudi_db_1cho Cơ sở dữ liệu.
  5. Chọnrsv2_blog_hudi_mor_sql_dl_tpc_customer_1cho Bàn.
  6. Chọncustomer-pii-filtercho Bộ lọc dữ liệu.
  7. Trong Quyền lọc dữ liệu, lựa chọn Chọn.
  8. Chọn Cấp.

LF - Cấp quyền truy cập dữ liệu

Hãy làm theo các bước tương tự để chạy sổ ghi chép trong SageMaker Studio:

  1. Trên bảng điều khiển SageMaker, điều hướng đến miềnStudio-EMR-LF-Hudi.
  2. trên Khởi động thực đơn chohudi-table-readerhồ sơ người dùng, chọn Studio.
  3. Tải sổ ghi chép đã tải xuống lên rsv2-hudi-table-non-pii-reader-notebook Và chọn Mở.
  4. Lặp lại các bước thiết lập sổ ghi chép và kết nối với cùng một cụm EMR nhưng chọn vai trò<STACK-NAME>-hudi-table-non-pii-role.

Bây giờ bạn có thể làm theo các bước trong sổ ghi chép. Từ kết quả truy vấn, bạn có thể thấy FGAC thông qua bộ lọc dữ liệu Lake Formation đã được áp dụng. Vai trò không thể nhìn thấy cột PIIc_customer_id,c_last_namec_email_address. Ngoài ra, các hàng từHONG KONGđã được lọc.

kết quả truy vấn được lọc

Làm sạch

Sau khi bạn thử nghiệm xong giải pháp, chúng tôi khuyên bạn nên dọn dẹp tài nguyên bằng các bước sau để tránh những chi phí không mong muốn:

  1. Tắt ứng dụng SageMaker Studio cho hồ sơ người dùng.

Cụm EMR sẽ tự động bị xóa sau khi giá trị thời gian chờ không hoạt động.

  1. Xóa Hệ thống tệp đàn hồi Amazon Khối lượng (Amazon EFS) đã được tạo cho miền.
  2. Làm trống các thùng S3 được tạo bởi ngăn xếp CloudFormation.
  3. Trên bảng điều khiển AWS CloudFormation, hãy xóa ngăn xếp.

Kết luận

Trong bài đăng này, chúng tôi đã sử dụng Apachi Hudi, một loại bảng OTF, để minh họa tính năng mới này nhằm thực thi kiểm soát truy cập chi tiết trên Amazon EMR. Bạn có thể xác định các quyền chi tiết trong Lake Formation cho các bảng OTF và áp dụng chúng thông qua truy vấn Spark SQL trên cụm EMR. Bạn cũng có thể sử dụng các tính năng của hồ dữ liệu giao dịch như chạy truy vấn ảnh chụp nhanh, truy vấn gia tăng, du hành thời gian và truy vấn DML. Xin lưu ý rằng tính năng mới này bao gồm tất cả các bảng OTF.

Tính năng này được triển khai bắt đầu từ bản phát hành Amazon EMR 6.15 ở tất cả các phiên bản Vùng nơi Amazon EMR có sẵn. Với việc tích hợp Amazon EMR với Lake Formation, bạn có thể tự tin quản lý và xử lý dữ liệu lớn, khai thác thông tin chi tiết và hỗ trợ đưa ra quyết định sáng suốt đồng thời duy trì tính bảo mật và quản trị dữ liệu.

Để tìm hiểu thêm, hãy tham khảo Kích hoạt Lake Formation với Amazon EMR và vui lòng liên hệ với Kiến trúc sư giải pháp AWS của bạn, họ có thể hỗ trợ bạn trong hành trình dữ liệu của mình.


Lưu ý

Raymond LạiRaymond Lại là Kiến trúc sư giải pháp cấp cao, chuyên đáp ứng nhu cầu của khách hàng doanh nghiệp lớn. Chuyên môn của ông là hỗ trợ khách hàng di chuyển các hệ thống và cơ sở dữ liệu phức tạp của doanh nghiệp sang AWS, xây dựng nền tảng kho dữ liệu doanh nghiệp và hồ dữ liệu. Raymond xuất sắc trong việc xác định và thiết kế các giải pháp cho các trường hợp sử dụng AI/ML, đồng thời anh đặc biệt tập trung vào các giải pháp AWS Serverless và thiết kế Kiến trúc hướng sự kiện.

Bân vương, Tiến sĩ, là Kiến trúc sư giải pháp chuyên gia phân tích cấp cao tại AWS, có hơn 12 năm kinh nghiệm trong ngành ML, đặc biệt tập trung vào quảng cáo. Anh ấy có chuyên môn về xử lý ngôn ngữ tự nhiên (NLP), hệ thống đề xuất, thuật toán ML đa dạng và hoạt động ML. Anh ấy rất đam mê việc áp dụng ML/DL và các kỹ thuật dữ liệu lớn để giải quyết các vấn đề trong thế giới thực.

Aditya Shah là Kỹ sư phát triển phần mềm tại AWS. Anh ấy quan tâm đến Cơ sở dữ liệu và công cụ kho dữ liệu, đồng thời đã nghiên cứu về tối ưu hóa hiệu suất, tuân thủ bảo mật và tuân thủ ACID cho các công cụ như Apache Hive và Apache Spark.

giai điệu dương là Kiến trúc sư giải pháp dữ liệu lớn cấp cao cho Amazon EMR tại AWS. Cô ấy là một nhà lãnh đạo phân tích giàu kinh nghiệm làm việc với khách hàng của AWS để cung cấp hướng dẫn thực hành tốt nhất và tư vấn kỹ thuật nhằm hỗ trợ họ thành công trong việc chuyển đổi dữ liệu. Các lĩnh vực cô ấy quan tâm là khung nguồn mở và tự động hóa, kỹ thuật dữ liệu và DataOps.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img