Đơn giản hóa và tăng tốc các ứng dụng Apache Spark trên dữ liệu Amazon Redshift với tích hợp Amazon Redshift cho Apache Spark

Đơn giản hóa và tăng tốc các ứng dụng Apache Spark trên dữ liệu Amazon Redshift với tích hợp Amazon Redshift cho Apache Spark

Nút nguồn: 2597866

Khách hàng sử dụng Amazon RedShift để chạy các phân tích kinh doanh quan trọng của họ trên hàng petabyte dữ liệu có cấu trúc và bán cấu trúc. Apache Spark là một khung phổ biến mà bạn có thể sử dụng để xây dựng ứng dụng cho các trường hợp sử dụng như ETL (trích xuất, chuyển đổi và tải), phân tích tương tác và máy học (ML). Apache Spark cho phép bạn xây dựng các ứng dụng bằng nhiều ngôn ngữ, chẳng hạn như Java, Scala và Python, bằng cách truy cập dữ liệu trong kho dữ liệu Amazon Redshift của bạn.

Tích hợp Amazon Redshift cho Apache Spark giúp các nhà phát triển xây dựng và chạy các ứng dụng Apache Spark trên dữ liệu Amazon Redshift một cách liền mạch. Các nhà phát triển có thể sử dụng các dịch vụ ML và phân tích AWS như Amazon EMR, Keo AWSAmazon SageMaker để dễ dàng xây dựng các ứng dụng Apache Spark đọc và ghi vào kho dữ liệu Amazon Redshift của họ. Bạn có thể làm như vậy mà không ảnh hưởng đến hiệu suất của các ứng dụng hoặc tính nhất quán trong giao dịch của dữ liệu của bạn.

Trong bài đăng này, chúng tôi thảo luận về lý do tại sao tích hợp Amazon Redshift cho Apache Spark lại quan trọng và hiệu quả đối với phân tích và ML. Ngoài ra, chúng tôi thảo luận về các trường hợp sử dụng tích hợp Amazon Redshift với Apache Spark để thúc đẩy tác động kinh doanh. Cuối cùng, chúng tôi hướng dẫn bạn qua các ví dụ từng bước về cách sử dụng trình kết nối AWS chính thức này trong ứng dụng Apache Spark.

Tích hợp Amazon Redshift cho Apache Spark

Tích hợp Amazon Redshift cho Apache Spark giảm thiểu quá trình thiết lập trình kết nối spark-redshift rườm rà và thường là thủ công (phiên bản cộng đồng) và rút ngắn thời gian cần thiết để chuẩn bị cho các nhiệm vụ phân tích và ML. Bạn chỉ cần chỉ định kết nối đến kho dữ liệu của mình và bạn có thể bắt đầu làm việc với dữ liệu Amazon Redshift từ các ứng dụng dựa trên Apache Spark của mình trong vòng vài phút.

Bạn có thể sử dụng một số chức năng đẩy xuống cho các hoạt động như sắp xếp, tổng hợp, giới hạn, nối và chức năng vô hướng để chỉ dữ liệu liên quan được chuyển từ kho dữ liệu Amazon Redshift của bạn sang ứng dụng Apache Spark tiêu thụ. Điều này cho phép bạn cải thiện hiệu suất của các ứng dụng của bạn. Quản trị viên Amazon Redshift có thể dễ dàng xác định SQL được tạo từ các ứng dụng dựa trên Spark. Trong bài đăng này, chúng tôi chỉ ra cách bạn có thể tìm ra SQL được tạo bởi công việc Apache Spark.

Hơn nữa, tích hợp Amazon Redshift cho Apache Spark sử dụng định dạng tệp Parquet khi sắp xếp dữ liệu trong một thư mục tạm thời. Amazon Redshift sử dụng câu lệnh UNLOAD SQL để lưu trữ dữ liệu tạm thời này trên Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3). Ứng dụng Apache Spark truy xuất kết quả từ thư mục tạm thời (được lưu trữ ở định dạng tệp Parquet), giúp cải thiện hiệu suất.

Bạn cũng có thể giúp ứng dụng của mình an toàn hơn bằng cách sử dụng Quản lý truy cập và nhận dạng AWS (IAM) thông tin xác thực để kết nối với Amazon Redshift.

Tích hợp Amazon Redshift cho Apache Spark được xây dựng dựa trên trình kết nối spark-redshift (phiên bản cộng đồng) và nâng cao hiệu suất và bảo mật, giúp bạn đạt được hiệu suất ứng dụng nhanh hơn tới 10 lần.

Các trường hợp sử dụng để tích hợp Amazon Redshift với Apache Spark

Đối với trường hợp sử dụng của chúng tôi, lãnh đạo của công ty dựa trên sản phẩm muốn biết doanh số bán hàng của từng sản phẩm trên nhiều thị trường. Khi doanh số bán hàng của công ty dao động mạnh, việc theo dõi doanh số bán hàng trên nhiều thị trường đã trở thành một thách thức đối với ban lãnh đạo. Tuy nhiên, doanh số bán hàng tổng thể đang giảm và ban lãnh đạo công ty muốn tìm ra thị trường nào không hoạt động để họ có thể nhắm mục tiêu vào các thị trường này cho các chiến dịch khuyến mãi.

Để bán hàng trên nhiều thị trường, dữ liệu bán hàng của sản phẩm như đơn đặt hàng, giao dịch và dữ liệu vận chuyển có sẵn trên Amazon S3 trong kho dữ liệu. Nhóm kỹ thuật dữ liệu có thể sử dụng Apache Spark với Amazon EMR hoặc AWS Glue để phân tích dữ liệu này trong Amazon S3.

Dữ liệu kiểm kê có sẵn trong Amazon Redshift. Tương tự, nhóm kỹ thuật dữ liệu có thể phân tích dữ liệu này với Apache Spark bằng công việc Amazon EMR hoặc AWS Glue bằng cách sử dụng tích hợp Amazon Redshift cho Apache Spark để thực hiện các phép tổng hợp và chuyển đổi. Tập dữ liệu được tổng hợp và chuyển đổi có thể được lưu trữ trở lại vào Amazon Redshift bằng cách sử dụng tích hợp Amazon Redshift cho Apache Spark.

Việc sử dụng khung phân tán như Apache Spark với tích hợp Amazon Redshift cho Apache Spark có thể cung cấp khả năng hiển thị trên hồ dữ liệu và kho dữ liệu để tạo thông tin chi tiết về bán hàng. Những thông tin chi tiết này có thể được cung cấp cho các bên liên quan trong doanh nghiệp và nhóm người dùng doanh nghiệp trong Amazon Redshift để đưa ra các quyết định sáng suốt nhằm chạy các chương trình khuyến mại được nhắm mục tiêu cho các phân khúc thị trường có doanh thu thấp.

Ngoài ra, chúng ta có thể sử dụng tích hợp Amazon Redshift với Apache Spark trong các trường hợp sử dụng sau:

  • Một khách hàng của Amazon EMR hoặc AWS Glue đang chạy các công việc Apache Spark muốn chuyển đổi dữ liệu và ghi dữ liệu đó vào Amazon Redshift như một phần trong quy trình ETL của họ
  • Một khách hàng ML sử dụng Apache Spark với SageMaker cho kỹ thuật tính năng để truy cập và chuyển đổi dữ liệu trong Amazon Redshift
  • Khách hàng của Amazon EMR, AWS Glue hoặc SageMaker sử dụng Apache Spark để phân tích dữ liệu tương tác với dữ liệu trên Amazon Redshift từ sổ ghi chép

Ví dụ về tích hợp Amazon Redshift cho Apache Spark trong ứng dụng Apache Spark

Trong bài đăng này, chúng tôi trình bày các bước để kết nối Amazon Redshift từ Amazon EMR trên Đám mây điện toán đàn hồi Amazon (Amazon EC2), Amazon EMR không có máy chủvà AWS Glue bằng tập lệnh chung. Trong mã mẫu sau đây, chúng tôi tạo một báo cáo hiển thị doanh số hàng quý cho năm 2008. Để thực hiện điều đó, chúng tôi kết hợp hai bảng Amazon Redshift bằng cách sử dụng Apache Spark DataFrame, chạy một thao tác đẩy xuống vị từ, tổng hợp và sắp xếp dữ liệu, đồng thời ghi dữ liệu đã chuyển đổi dữ liệu trở lại Amazon Redshift. Kịch bản sử dụng PySpark

Tập lệnh sử dụng Xác thực dựa trên IAM cho Amazon Redshift. Các vai trò IAM được sử dụng bởi Amazon EMR và AWS Glue phải có quyền thích hợp để xác thực Amazon Redshift và quyền truy cập vào bộ chứa S3 để lưu trữ dữ liệu tạm thời.

Chính sách ví dụ sau cho phép vai trò IAM gọi GetClusterCredentials hoạt động:

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": "arn:aws:redshift:<aws_region_name>:xxxxxxxxxxxx:dbuser:*/temp_*" }
}

Chính sách ví dụ sau cho phép truy cập vào bộ chứa S3 để lưu trữ dữ liệu tạm thời:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::<s3_bucket_name>" } ]
}

Kịch bản hoàn chỉnh như sau:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col # Initiate Apache Spark session
spark = SparkSession .builder .appName("SparkRedshiftConnector") .enableHiveSupport() .getOrCreate() # Set connection options for Amazon Redshift
jdbc_iam_url = "jdbc:redshift:iam://redshift-spark-connector-1.xxxxxxxxxxx.<aws_region_name>.redshift.amazonaws.com:5439/sample_data_dev"
temp_dir = 's3://<s3_bucket_name>/redshift-temp-dir/'
aws_role = 'arn:aws:iam::xxxxxxxxxxxx:role/redshift-s3' # Set query group for the query. More details on Amazon Redshift WLM https://docs.aws.amazon.com/redshift/latest/dg/cm-c-executing-queries.html
queryGroup = "emr-redshift"
jdbc_iam_url_withQueryGroup = jdbc_iam_url+'?queryGroup='+queryGroup # Set User name for the query
userName = 'awsuser'
jdbc_iam_url_withUserName = jdbc_iam_url_withQueryGroup+';user='+userName # Define the Amazon Redshift context
redshiftOptions = { "url": jdbc_iam_url_withUserName, "tempdir": temp_dir, "aws_iam_role" : aws_role
} # Create the sales DataFrame from Amazon Redshift table using io.github.spark_redshift_community.spark.redshift class
sales_df = ( spark.read .format("io.github.spark_redshift_community.spark.redshift") .options(**redshiftOptions) .option("dbtable", "tickit.sales") .load()
) # Create the date Data Frame from Amazon Redshift table
date_df = ( spark.read .format("io.github.spark_redshift_community.spark.redshift") .options(**redshiftOptions) .option("dbtable", "tickit.date") .load()
) # Assign a Data Frame to the above output which will be written back to Amazon Redshift
output_df= sales_df.join(date_df, sales_df.dateid == date_df.dateid, 'inner').where( col("year") == 2008).groupBy("qtr").sum("qtysold").select( col("qtr"), col("sum(qtysold)")).sort(["qtr"], ascending=[1]).withColumnRenamed("sum(qtysold)","total_quantity_sold") # Display the output
output_df.show() ## Lets drop the queryGroup for easy validation of push down queries
# Set User name for the query
userName = 'awsuser'
jdbc_iam_url_withUserName = jdbc_iam_url+'?user='+userName # Define the Amazon Redshift context
redshiftWriteOptions = { "url": jdbc_iam_url_withUserName, "tempdir": temp_dir, "aws_iam_role" : aws_role
} # Write the Data Frame back to Amazon Redshift
output_df.write .format("io.github.spark_redshift_community.spark.redshift") .mode("overwrite") .options(**redshiftWriteOptions) .option("dbtable", "tickit.test") .save()

Nếu bạn định sử dụng tập lệnh trước trong môi trường của mình, hãy đảm bảo rằng bạn thay thế các giá trị cho các biến sau bằng các giá trị thích hợp cho môi trường của mình: jdbc_iam_url, temp_diraws_role.

Trong phần tiếp theo, chúng tôi sẽ hướng dẫn các bước chạy tập lệnh này để tổng hợp tập dữ liệu mẫu có sẵn trong Amazon Redshift.

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

Trước khi chúng tôi bắt đầu, hãy đảm bảo đáp ứng các điều kiện tiên quyết sau:

Triển khai tài nguyên bằng AWS CloudFormation

Hoàn thành các bước sau để triển khai ngăn xếp CloudFormation:

  1. Đăng nhập vào Bảng điều khiển quản lý AWS, sau đó khởi chạy ngăn xếp CloudFormation:
    BDB-2063-khởi chạy-đám mây-thông tin-ngăn xếp

Quý vị cũng có thể tải xuống mẫu CloudFormation để tạo các tài nguyên được đề cập trong bài đăng này thông qua cơ sở hạ tầng dưới dạng mã (IaC). Sử dụng mẫu này khi khởi chạy ngăn xếp CloudFormation mới.

  1. Cuộn xuống cuối trang để chọn Tôi xác nhận rằng AWS CloudFormation có thể tạo tài nguyên IAM Dưới Khả năng, sau đó chọn Tạo ngăn xếp.

Quá trình tạo ngăn xếp mất 15–20 phút để hoàn thành. Mẫu CloudFormation tạo các tài nguyên sau:

    • Một Amazon VPC với các mạng con, bảng định tuyến và cổng NAT cần thiết
    • Một nhóm S3 có tên redshift-spark-databucket-xxxxxxx (lưu ý rằng xxxxxxx là một chuỗi ngẫu nhiên để tạo tên nhóm duy nhất)
    • Một cụm Amazon Redshift với dữ liệu mẫu được tải bên trong cơ sở dữ liệu dev và người dùng chính redshiftmasteruser. Đối với mục đích của bài đăng trên blog này, redshiftmasteruser với quyền quản trị được sử dụng. Tuy nhiên, nên sử dụng người dùng có quyền kiểm soát truy cập chi tiết trong môi trường sản xuất.
    • Một vai trò IAM sẽ được sử dụng cho Amazon Redshift với khả năng yêu cầu thông tin đăng nhập tạm thời từ cơ sở dữ liệu nhà phát triển của cụm Amazon Redshift
    • Phòng thu âm Amazon EMR với các vai trò IAM cần thiết
    • Amazon EMR phát hành phiên bản 6.9.0 trên cụm EC2 với các vai trò IAM cần thiết
    • Bản phát hành ứng dụng Amazon EMR Serverless phiên bản 6.9.0
    • Kết nối AWS Glue và tác vụ AWS Glue phiên bản 4.0
    • A Máy tính xách tay Jupyter để chạy bằng Amazon EMR Studio bằng Amazon EMR trên cụm EC2
    • Tập lệnh PySpark để chạy bằng Amazon EMR Studio và Amazon EMR Serverless
  1. Sau khi tạo ngăn xếp hoàn tất, hãy chọn tên ngăn xếp redshift-spark và điều hướng đến Kết quả đầu ra

Chúng tôi sử dụng các giá trị đầu ra này sau trong bài đăng này.

Trong các phần tiếp theo, chúng tôi trình bày các bước tích hợp Amazon Redshift cho Apache Spark từ Amazon EMR trên Amazon EC2, Amazon EMR Serverless và AWS Glue.

Sử dụng tích hợp Amazon Redshift với Apache Spark trên Amazon EMR trên EC2

Kể từ phiên bản phát hành Amazon EMR 6.9.0 trở lên, trình kết nối sử dụng tích hợp Amazon Redshift cho Apache Spark và trình điều khiển Amazon Redshift JDBC đều khả dụng cục bộ trên Amazon EMR. Các tập tin này được đặt dưới /usr/share/aws/redshift/ danh mục. Tuy nhiên, trong các phiên bản trước của Amazon EMR, cộng đồng phiên bản của spark-redshift kết nối có sẵn

Ví dụ sau đây cho thấy cách kết nối Amazon Redshift bằng nhân PySpark thông qua một Phòng thu âm Amazon EMR sổ tay. Ngăn xếp CloudFormation đã tạo Amazon EMR Studio, Amazon EMR trên cụm EC2 và sổ ghi chép Jupyter có sẵn để chạy. Để xem qua ví dụ này, hãy hoàn thành các bước sau:

  1. Tải xuống sổ ghi chép Jupyter có sẵn trong nhóm S3 cho bạn:
    • Trong kết quả đầu ra của ngăn xếp CloudFormation, hãy tìm giá trị cho EMRStudioNotebook, điều này sẽ chỉ ra redshift-spark-emr.ipynb máy tính xách tay có sẵn trong thùng S3.
    • Chọn liên kết hoặc mở liên kết trong tab mới bằng cách sao chép URL cho sổ ghi chép.
    • Sau khi bạn mở liên kết, hãy tải xuống sổ ghi chép bằng cách chọn Tải về, sẽ lưu tệp cục bộ trên máy tính của bạn.
  1. Truy cập Amazon EMR Studio bằng cách chọn hoặc sao chép liên kết được cung cấp trong đầu ra ngăn xếp CloudFormation cho khóa EMRStudioURL.
  2. Trong ngăn dẫn hướng, chọn Không gian làm việc.
  3. Chọn Tạo không gian làm việc.
  4. Ví dụ: cung cấp tên cho Không gian làm việc redshift-spark.
  5. Mở rộng Cấu hình nâng cao phần và chọn Đính kèm Không gian làm việc vào cụm EMR.
  6. Theo Gắn vào cụm EMR, chọn cụm EMR có tên emrCluster-Redshift-Spark.
  7. Chọn Tạo không gian làm việc.
  8. Sau khi Không gian làm việc Amazon EMR Studio được tạo và ở trạng thái Đính kèm, bạn có thể truy cập Không gian làm việc bằng cách chọn tên của Không gian làm việc.

Điều này sẽ mở Không gian làm việc trong một tab mới. Lưu ý rằng nếu có trình chặn cửa sổ bật lên, bạn có thể phải cho phép Không gian làm việc mở hoặc tắt trình chặn cửa sổ bật lên.

Trong Không gian làm việc của Amazon EMR Studio, chúng tôi hiện tải lên sổ ghi chép Jupyter mà chúng tôi đã tải xuống trước đó.

  1. Chọn Tải lên để duyệt qua hệ thống tệp cục bộ của bạn và tải lên sổ ghi chép Jupyter (redshift-spark-emr.ipynb).
  2. Chọn (nháy đúp) vào redshift-spark-emr.ipynb notebook trong Không gian làm việc để mở sổ ghi chép.

Sổ ghi chép cung cấp thông tin chi tiết về các nhiệm vụ khác nhau mà nó thực hiện. Lưu ý rằng trong phần Xác định các biến để kết nối với cụm Amazon Redshift, bạn không cần cập nhật các giá trị cho jdbc_iam_url, temp_diraws_role bởi vì chúng được AWS CloudFormation cập nhật cho bạn. AWS CloudFormation cũng đã thực hiện các bước được đề cập trong Điều kiện tiên quyết phần của cuốn sổ.

Bây giờ bạn có thể bắt đầu chạy sổ ghi chép.

  1. Chạy các ô riêng lẻ bằng cách chọn chúng rồi chọn Play.

Bạn cũng có thể sử dụng tổ hợp phím của Shift + Enter or Ca+Quay lại. Ngoài ra, bạn có thể chạy tất cả các ô bằng cách chọn Chạy tất cả các ô trên chạy đơn.

  1. Tìm thao tác đẩy xuống vị ngữ được thực hiện trên cụm Amazon Redshift bằng tích hợp Amazon Redshift cho Apache Spark.

Chúng tôi cũng có thể xem dữ liệu tạm thời được lưu trữ trên Amazon S3 ở định dạng Parquet được tối ưu hóa. Đầu ra có thể được nhìn thấy từ việc chạy ô trong phần Nhận truy vấn cuối cùng được thực thi trên Amazon Redshift.

  1. Để xác thực bảng được tạo bởi tác vụ từ Amazon EMR trên Amazon EC2, hãy điều hướng đến bảng điều khiển Amazon Redshift và chọn cụm redshift-spark-redshift-cluster trên Bảng điều khiển cụm được cung cấp .
  2. Trong các chi tiết cụm, trên Dữ liệu truy vấn menu, chọn Truy vấn trong trình chỉnh sửa truy vấn v2.
  3. Chọn cụm trong ngăn điều hướng và kết nối với cụm Amazon Redshift khi cụm này yêu cầu xác thực.
  4. Chọn Thông tin đăng nhập tạm thời.
  5. Trong Cơ sở dữ liệu, đi vào dev.
  6. Trong Tên người dùng, đi vào redshiftmasteruser.
  7. Chọn Lưu.
  8. Trong ngăn điều hướng, mở rộng cụm redshift-spark-redshift-cluster, mở rộng cơ sở dữ liệu nhà phát triển, mở rộng tickitvà mở rộng Bàn để liệt kê tất cả các bảng bên trong lược đồ tickit.

Bạn nên tìm bảng test_emr.

  1. Chọn (nhấp chuột phải) vào bảng test_emr, sau đó chọn Chọn bảng để truy vấn bảng.
  2. Chọn chạy để chạy câu lệnh SQL.

Sử dụng tích hợp Amazon Redshift với Apache Spark trên Amazon EMR Serverless

Bản phát hành Amazon EMR phiên bản 6.9.0 trở lên cũng cung cấp tích hợp Amazon Redshift cho Apache Spark JAR (do Amazon Redshift quản lý) và Amazon Redshift JDBC JAR cục bộ trên Amazon EMR Serverless. Các tập tin này được đặt dưới /usr/share/aws/redshift/ danh mục. Trong ví dụ sau, chúng tôi sử dụng tập lệnh Python có sẵn trong bộ chứa S3 bởi ngăn xếp CloudFormation mà chúng tôi đã tạo trước đó.

  1. Trong các kết quả đầu ra của ngăn xếp CloudFormation, hãy ghi lại giá trị cho EMRServerlessExecutionScript, là vị trí của tập lệnh Python trong bộ chứa S3.
  2. Cũng lưu ý giá trị cho EMRServerlessJobExecutionRole, là vai trò IAM được sử dụng để chạy công việc Amazon EMR Serverless.
  3. Truy cập Amazon EMR Studio bằng cách chọn hoặc sao chép liên kết được cung cấp trong đầu ra ngăn xếp CloudFormation cho khóa EMRStudioURL.
  4. Chọn Ứng dụng Dưới Không có máy chủ trong khung điều hướng.

Bạn sẽ tìm thấy một ứng dụng EMR được tạo bởi ngăn xếp CloudFormation có tên emr-spark-redshift.

  1. Chọn tên ứng dụng để gửi một công việc.
  2. Chọn gửi công việc.
  3. Theo Chi tiết công việc, Cho Họ tên, hãy nhập tên có thể nhận dạng cho công việc.
  4. Trong Vai trò thời gian chạy, hãy chọn vai trò IAM mà bạn đã lưu ý từ đầu ra ngăn xếp CloudFormation trước đó.
  5. Trong vị trí tập lệnh, cung cấp đường dẫn đến tập lệnh Python mà bạn đã lưu ý trước đó từ đầu ra ngăn xếp CloudFormation.
  6. Mở rộng phần Thuộc tính tia lửa và chọn Chỉnh sửa trong văn bản
  7. Nhập giá trị sau vào hộp văn bản, cung cấp đường dẫn đến redshift-connector, trình điều khiển JDBC của Amazon Redshift, spark-avro JAR và minimal-json Tệp JAR:
    --jars /usr/share/aws/redshift/jdbc/RedshiftJDBC.jar,/usr/share/aws/redshift/spark-redshift/lib/spark-redshift.jar,/usr/share/aws/redshift/spark-redshift/lib/spark-avro.jar,/usr/share/aws/redshift/spark-redshift/lib/minimal-json.jar

  8. Chọn gửi công việc.
  9. Đợi công việc hoàn thành và trạng thái chạy hiển thị dưới dạng Sự thành công.
  10. Điều hướng đến trình chỉnh sửa truy vấn Amazon Redshift để xem bảng đã được tạo thành công hay chưa.
  11. Kiểm tra các truy vấn kéo xuống được chạy cho nhóm truy vấn Amazon Redshift emr-serverless-redshift. Bạn có thể chạy câu lệnh SQL sau đối với cơ sở dữ liệu dev:
    SELECT query_text FROM SYS_QUERY_HISTORY WHERE query_label = 'emr-serverless-redshift' ORDER BY start_time DESC LIMIT 1

Bạn có thể thấy truy vấn đẩy xuống và kết quả trả về được lưu trữ ở định dạng tệp Parquet trên Amazon S3.

Sử dụng tích hợp Amazon Redshift với Apache Spark trên AWS Glue

Bắt đầu với AWS Glue phiên bản 4.0 trở lên, các công việc Apache Spark kết nối với Amazon Redshift có thể sử dụng tích hợp Amazon Redshift cho trình điều khiển Apache Spark và Amazon Redshift JDBC. Các tác vụ AWS Glue hiện tại đã sử dụng Amazon Redshift làm nguồn hoặc đích có thể được nâng cấp lên AWS Glue 4.0 để tận dụng trình kết nối mới này. Mẫu CloudFormation được cung cấp cùng với bài đăng này tạo ra các tài nguyên AWS Glue sau:

  • Kết nối AWS Glue cho Amazon Redshift – Kết nối để thiết lập kết nối từ AWS Glue đến Amazon Redshift bằng cách sử dụng tích hợp Amazon Redshift cho Apache Spark
  • Vai trò IAM gắn liền với công việc AWS Glue – Vai trò IAM để quản lý quyền chạy tác vụ AWS Glue
  • Công việc Keo AWS – Tập lệnh cho công việc AWS Glue thực hiện các phép biến đổi và tổng hợp bằng cách sử dụng tích hợp Amazon Redshift cho Apache Spark

Ví dụ sau sử dụng kết nối AWS Glue gắn với tác vụ AWS Glue với PySpark và bao gồm các bước sau:

  1. Trên bảng điều khiển AWS Glue, hãy chọn Kết nối trong khung điều hướng.
  2. Theo Kết nối, hãy chọn kết nối AWS Glue cho Amazon Redshift được tạo bởi mẫu CloudFormation.
  3. Xác minh các chi tiết kết nối.

Giờ đây, bạn có thể sử dụng lại kết nối này trong một công việc hoặc trên nhiều công việc.

  1. trên Kết nối trang, hãy chọn công việc AWS Glue được tạo bởi ngăn xếp CloudFormation bên dưới công việc của bạnhoặc truy cập công việc AWS Glue bằng cách sử dụng URL được cung cấp cho khóa GlueJob trong đầu ra ngăn xếp CloudFormation.
  2. Truy cập và xác minh tập lệnh cho tác vụ AWS Glue.
  3. trên Chi tiết công việc tab, đảm bảo rằng Phiên bản keo được thiết lập để Keo 4.0.

Điều này đảm bảo rằng công việc sử dụng phiên bản mới nhất redshift-spark kết nối.

  1. Mở rộng Thuộc tính nâng cao và trong Kết nối phần này, hãy xác minh rằng kết nối do ngăn xếp CloudFormation tạo đã được đính kèm.
  2. Xác minh các tham số công việc đã thêm cho công việc AWS Glue. Các giá trị này cũng có sẵn trong đầu ra cho ngăn xếp CloudFormation.
  3. Chọn Lưu và sau đó chạy.

Bạn có thể xem trạng thái của công việc đang chạy trên chạy tab.

  1. Sau khi chạy công việc thành công, bạn có thể xác minh đầu ra của bảng kiểm tra keo được tạo bởi công việc AWS Glue.
  2. Chúng tôi kiểm tra các truy vấn đẩy xuống chạy cho nhóm truy vấn Amazon Redshift glue-redshift. Bạn có thể chạy câu lệnh SQL sau đối với cơ sở dữ liệu dev:
    SELECT query_text FROM SYS_QUERY_HISTORY WHERE query_label = 'glue-redshift' ORDER BY start_time DESC LIMIT 1

Các phương pháp hay nhất

Hãy ghi nhớ các thực hành tốt nhất sau đây:

  • Cân nhắc sử dụng tích hợp Amazon Redshift cho Apache Spark từ Amazon EMR thay vì sử dụng redshift-spark trình kết nối (phiên bản cộng đồng) cho công việc Apache Spark mới của bạn.
  • Nếu bạn có các công việc Apache Spark hiện có bằng cách sử dụng redshift-spark trình kết nối (phiên bản dành cho cộng đồng), hãy cân nhắc nâng cấp chúng để sử dụng tích hợp Amazon Redshift cho Apache Spark
  • Tích hợp Amazon Redshift cho Apache Spark tự động áp dụng truy vấn đẩy xuống vị ngữ và truy vấn để tối ưu hóa hiệu suất. Chúng tôi khuyên bạn nên sử dụng các chức năng được hỗ trợ (autopushdown) trong truy vấn của bạn. Tích hợp Amazon Redshift cho Apache Spark sẽ chuyển hàm này thành truy vấn SQL và chạy truy vấn trong Amazon Redshift. Việc tối ưu hóa này dẫn đến dữ liệu cần thiết được truy xuất, vì vậy Apache Spark có thể xử lý ít dữ liệu hơn và có hiệu suất tốt hơn.
    • Cân nhắc sử dụng các chức năng kéo xuống tổng hợp như avg, count, max, minsum để lấy dữ liệu đã lọc để xử lý dữ liệu.
    • Cân nhắc sử dụng toán tử đẩy xuống Boolean như in, isnull, isnotnull, contains, endswithstartswith để lấy dữ liệu đã lọc để xử lý dữ liệu.
    • Cân nhắc sử dụng các toán tử kéo xuống logic như and, ornot (Hoặc !) để truy xuất dữ liệu đã lọc để xử lý dữ liệu.
  • Bạn nên chuyển một vai trò IAM bằng tham số aws_iam_role để xác thực Amazon Redshift từ ứng dụng Apache Spark của bạn trên Amazon EMR hoặc AWS Glue. Vai trò IAM phải có các quyền cần thiết để truy xuất thông tin xác thực IAM tạm thời nhằm xác thực với Amazon Redshift như được hiển thị trong phần “Ví dụ về tích hợp Amazon Redshift cho Apache Spark trong ứng dụng Apache Spark” của blog này.
  • Với tính năng này, bạn không phải duy trì tên người dùng và mật khẩu Amazon Redshift của mình trong trình quản lý bí mật và cơ sở dữ liệu Amazon Redshift.
  • Amazon Redshift sử dụng câu lệnh SQL UNLOAD để lưu trữ dữ liệu tạm thời này trên Amazon S3. Ứng dụng Apache Spark truy xuất kết quả từ thư mục tạm thời (được lưu trữ ở định dạng tệp Parquet). Thư mục tạm thời này trên Amazon S3 không được dọn dẹp tự động và do đó có thể làm tăng thêm chi phí. Chúng tôi khuyên bạn nên sử dụng Chính sách vòng đời của Amazon S3 để xác định quy tắc lưu giữ cho bộ chứa S3.
  • Bạn nên bật Ghi nhật ký kiểm tra Amazon Redshift để ghi thông tin về các kết nối và hoạt động của người dùng trong cơ sở dữ liệu của bạn.
  • Bạn nên bật Mã hóa khi nghỉ ngơi của Amazon Redshift để mã hóa dữ liệu của bạn khi Amazon Redshift ghi dữ liệu đó vào trung tâm dữ liệu của mình và giải mã dữ liệu đó cho bạn khi bạn truy cập.
  • Bạn nên nâng cấp lên AWS Glue v4.0 trở lên để sử dụng tích hợp Amazon Redshift cho Apache Spark, có sẵn ngay khi mở hộp. Nâng cấp lên phiên bản AWS Glue này sẽ tự động sử dụng tính năng này.
  • Bạn nên nâng cấp lên Amazon EMR v6.9.0 trở lên để sử dụng tích hợp Amazon Redshift cho Apache Spark. Bạn không cần phải quản lý rõ ràng bất kỳ trình điều khiển hoặc tệp JAR nào.
  • Cân nhắc sử dụng sổ ghi chép Amazon EMR Studio để tương tác với dữ liệu Amazon Redshift trong ứng dụng Apache Spark của bạn.
  • Cân nhắc sử dụng AWS Glue Studio để tạo tác vụ Apache Spark bằng giao diện trực quan. Bạn cũng có thể chuyển sang viết mã Apache Spark bằng Scala hoặc PySpark trong AWS Glue Studio.

Làm sạch

Hoàn thành các bước sau để dọn dẹp các tài nguyên được tạo như một phần của mẫu CloudFormation để đảm bảo rằng bạn không bị tính phí cho các tài nguyên nếu bạn không còn sử dụng chúng nữa:

  1. Dừng ứng dụng Amazon EMR Serverless:
    • Truy cập Amazon EMR Studio bằng cách chọn hoặc sao chép liên kết được cung cấp trong đầu ra ngăn xếp CloudFormation cho khóa EMRStudioURL.
    • Chọn Ứng dụng Dưới Không có máy chủ trong khung điều hướng.

Bạn sẽ tìm thấy một ứng dụng EMR được tạo bởi ngăn xếp CloudFormation có tên emr-spark-redshift.

    • Nếu trạng thái ứng dụng hiển thị là Đã dừng, bạn có thể chuyển sang các bước tiếp theo. Tuy nhiên, nếu trạng thái ứng dụng là Đã bắt đầu, hãy chọn tên ứng dụng, sau đó chọn Dừng ứng dụngDừng ứng dụng một lần nữa để xác nhận.
  1. Xóa không gian làm việc Amazon EMR Studio:
    • Truy cập Amazon EMR Studio bằng cách chọn hoặc sao chép liên kết được cung cấp trong đầu ra ngăn xếp CloudFormation cho khóa EMRStudioURL.
    • Chọn Không gian làm việc trong khung điều hướng.
    • Chọn Không gian làm việc mà bạn đã tạo và chọn Xóa bỏ, sau đó chọn Xóa bỏ một lần nữa để xác nhận.
  2. Xóa ngăn xếp CloudFormation:
    • Trên bảng điều khiển AWS CloudFormation, điều hướng đến ngăn xếp mà bạn đã tạo trước đó.
    • Chọn tên ngăn xếp rồi chọn Xóa bỏ để xóa ngăn xếp và xóa các tài nguyên được tạo như một phần của bài đăng này.
    • Trên màn hình xác nhận, chọn Xóa ngăn xếp.

Kết luận

Trong bài đăng này, chúng tôi đã giải thích cách bạn có thể sử dụng tích hợp Amazon Redshift cho Apache Spark để xây dựng và triển khai các ứng dụng với Amazon EMR trên Amazon EC2, Amazon EMR Serverless và AWS Glue để tự động áp dụng đẩy xuống vị từ và truy vấn nhằm tối ưu hóa hiệu suất truy vấn cho dữ liệu trong Amazon Dịch chuyển đỏ. Bạn nên sử dụng tích hợp Amazon Redshift cho Apache Spark để có kết nối liền mạch và an toàn với Amazon Redshift từ Amazon EMR hoặc AWS Glue của bạn.

Sau đây là những gì một số khách hàng của chúng tôi nói về tích hợp Amazon Redshift dành cho Apache Spark:

“Chúng tôi trao quyền cho các kỹ sư của mình để xây dựng các ứng dụng và đường dẫn dữ liệu của họ với Apache Spark bằng Python và Scala. Chúng tôi muốn có một giải pháp phù hợp giúp đơn giản hóa các hoạt động cũng như cung cấp nhanh hơn và hiệu quả hơn cho khách hàng của mình và đó là những gì chúng tôi nhận được với tích hợp Amazon Redshift mới cho Apache Spark.”

—Tư vấn Huron

“GE Aerospace sử dụng phân tích AWS và Amazon Redshift để cung cấp thông tin chuyên sâu quan trọng về kinh doanh giúp đưa ra các quyết định kinh doanh quan trọng. Với sự hỗ trợ tự động sao chép từ Amazon S3, chúng tôi có thể xây dựng các đường dẫn dữ liệu đơn giản hơn để di chuyển dữ liệu từ Amazon S3 sang Amazon Redshift. Điều này tăng tốc khả năng truy cập dữ liệu của các nhóm sản phẩm dữ liệu của chúng tôi và cung cấp thông tin chi tiết cho người dùng cuối. Chúng tôi dành nhiều thời gian hơn để gia tăng giá trị thông qua dữ liệu và ít thời gian hơn cho việc tích hợp.”

—GE Hàng không vũ trụ

“Trọng tâm của chúng tôi là cung cấp quyền truy cập dữ liệu tự phục vụ cho tất cả người dùng của chúng tôi tại Goldman Sachs. Thông qua Legend, nền tảng quản trị và quản lý dữ liệu nguồn mở của chúng tôi, chúng tôi cho phép người dùng phát triển các ứng dụng tập trung vào dữ liệu và rút ra những hiểu biết sâu sắc dựa trên dữ liệu khi chúng tôi cộng tác trong ngành dịch vụ tài chính. Với tích hợp Amazon Redshift dành cho Apache Spark, nhóm nền tảng dữ liệu của chúng tôi sẽ có thể truy cập dữ liệu Amazon Redshift với các bước thủ công tối thiểu, cho phép ETL không cần mã. họ thu thập thông tin đầy đủ và kịp thời. Chúng tôi hy vọng sẽ thấy sự cải thiện hiệu suất của các ứng dụng và bảo mật được cải thiện vì giờ đây người dùng của chúng tôi có thể dễ dàng truy cập vào dữ liệu mới nhất trong Amazon Redshift.”

—Goldman Sachs


Về các tác giả

Gagan Brahmi là Chuyên gia cao cấp Kiến trúc sư giải pháp tập trung vào phân tích dữ liệu lớn và nền tảng AI/ML tại Amazon Web Services. Gagan có hơn 18 năm kinh nghiệm trong lĩnh vực công nghệ thông tin. Anh ấy giúp khách hàng thiết kế kiến ​​trúc và xây dựng các giải pháp dựa trên đám mây có khả năng mở rộng, hiệu quả và bảo mật cao trên AWS. Khi rảnh rỗi, anh dành thời gian cho gia đình và khám phá những địa điểm mới.

Vivek Gautam là Kiến trúc sư dữ liệu có chuyên môn về kho dữ liệu tại AWS Professional Services. Anh ấy làm việc với các khách hàng doanh nghiệp đang xây dựng các sản phẩm dữ liệu, nền tảng phân tích và giải pháp trên AWS. Khi không xây dựng và thiết kế các hồ dữ liệu, Vivek là một người đam mê ẩm thực, người cũng thích khám phá các điểm đến du lịch mới và đi bộ đường dài.

Naresh Gautam là một nhà lãnh đạo Phân tích dữ liệu và AI/ML tại AWS với 20 năm kinh nghiệm, người thích giúp khách hàng thiết kế các giải pháp phân tích dữ liệu và AI/ML có tính sẵn sàng cao, hiệu suất cao và tiết kiệm chi phí để trao quyền cho khách hàng trong việc ra quyết định dựa trên dữ liệu . Trong thời gian rảnh rỗi, anh ấy thích thiền và nấu ăn.

Người đẹp Sharifi là Kỹ sư phát triển phần mềm trong nhóm trình điều khiển Amazon Redshift, nơi ông lãnh đạo quá trình phát triển Tích hợp Amazon Redshift với trình kết nối Apache Spark. Ông có hơn 20 năm kinh nghiệm xây dựng các nền tảng dựa trên dữ liệu trong nhiều ngành. Khi rảnh rỗi, anh ấy thích dành thời gian cho gia đình và lướt sóng.

Dấu thời gian:

Thêm từ Dữ liệu lớn AWS