ลดความซับซ้อนและเพิ่มความเร็วของแอปพลิเคชัน Apache Spark บนข้อมูล Amazon Redshift ด้วยการผสานรวม Amazon Redshift สำหรับ Apache Spark

ลดความซับซ้อนและเพิ่มความเร็วของแอปพลิเคชัน Apache Spark บนข้อมูล Amazon Redshift ด้วยการผสานรวม Amazon Redshift สำหรับ Apache Spark

โหนดต้นทาง: 2597866

ลูกค้าใช้ อเมซอน Redshift เพื่อเรียกใช้การวิเคราะห์ที่สำคัญต่อธุรกิจบนเพตะไบต์ของข้อมูลที่มีโครงสร้างและกึ่งโครงสร้าง Apache Spark เป็นเฟรมเวิร์กยอดนิยมที่คุณสามารถใช้สร้างแอปพลิเคชันสำหรับกรณีการใช้งาน เช่น ETL (แยก แปลง และโหลด) การวิเคราะห์เชิงโต้ตอบ และการเรียนรู้ของเครื่อง (ML) Apache Spark ช่วยให้คุณสร้างแอปพลิเคชันในภาษาต่างๆ เช่น Java, Scala และ Python โดยการเข้าถึงข้อมูลในคลังข้อมูล Amazon Redshift ของคุณ

การผสานรวม Amazon Redshift สำหรับ Apache Spark ช่วยให้นักพัฒนาสร้างและเรียกใช้แอปพลิเคชัน Apache Spark บนข้อมูล Amazon Redshift ได้อย่างราบรื่น นักพัฒนาสามารถใช้ AWS analytics และบริการ ML เช่น อเมซอน EMR, AWS กาวและ อเมซอน SageMaker เพื่อสร้างแอปพลิเคชัน Apache Spark ที่อ่านและเขียนไปยังคลังข้อมูล Amazon Redshift ได้อย่างง่ายดาย คุณสามารถทำได้โดยไม่กระทบต่อประสิทธิภาพของแอปพลิเคชันหรือความสอดคล้องในการทำธุรกรรมของข้อมูล

ในโพสต์นี้ เราจะอภิปรายว่าทำไมการรวม Amazon Redshift สำหรับ Apache Spark จึงมีความสำคัญและมีประสิทธิภาพสำหรับการวิเคราะห์และ ML นอกจากนี้ เรายังพูดถึงกรณีการใช้งานที่ใช้การรวม Amazon Redshift กับ Apache Spark เพื่อขับเคลื่อนผลกระทบทางธุรกิจ สุดท้ายนี้ เราจะแนะนำตัวอย่างทีละขั้นตอนเกี่ยวกับวิธีใช้ตัวเชื่อมต่อ AWS อย่างเป็นทางการนี้ในแอปพลิเคชัน Apache Spark

การรวม Amazon Redshift สำหรับ Apache Spark

การผสานรวม Amazon Redshift สำหรับ Apache Spark ช่วยลดขั้นตอนที่ยุ่งยากและมักดำเนินการด้วยตนเองในการตั้งค่าตัวเชื่อมต่อ spark-redshift (รุ่นชุมชน) และลดเวลาที่ต้องใช้ในการเตรียมการวิเคราะห์และงาน ML คุณจะต้องระบุการเชื่อมต่อกับคลังข้อมูลของคุณ และคุณสามารถเริ่มทำงานกับข้อมูล Amazon Redshift จากแอปพลิเคชันที่ใช้ Apache Spark ได้ภายในไม่กี่นาที

คุณสามารถใช้ความสามารถแบบเลื่อนลงได้หลายอย่างสำหรับการดำเนินการ เช่น ฟังก์ชันการเรียงลำดับ การรวม การจำกัด การรวม และสเกลาร์ เพื่อให้ย้ายเฉพาะข้อมูลที่เกี่ยวข้องจากคลังข้อมูล Amazon Redshift ไปยังแอปพลิเคชัน Apache Spark ที่ใช้ สิ่งนี้ทำให้คุณสามารถปรับปรุงประสิทธิภาพของแอปพลิเคชันของคุณได้ ผู้ดูแลระบบ Amazon Redshift สามารถระบุ SQL ที่สร้างจากแอปพลิเคชันที่ใช้ Spark ได้อย่างง่ายดาย ในโพสต์นี้ เราจะแสดงวิธีที่คุณสามารถค้นหา SQL ที่สร้างโดยงาน Apache Spark

นอกจากนี้ การผสานรวม Amazon Redshift สำหรับ Apache Spark ยังใช้รูปแบบไฟล์ Parquet เมื่อจัดเตรียมข้อมูลในไดเร็กทอรีชั่วคราว Amazon Redshift ใช้คำสั่ง UNLOAD SQL เพื่อจัดเก็บข้อมูลชั่วคราวนี้ บริการจัดเก็บข้อมูลอย่างง่ายของ Amazon (อเมซอน S3). แอปพลิเคชัน Apache Spark ดึงผลลัพธ์จากไดเร็กทอรีชั่วคราว (จัดเก็บในรูปแบบไฟล์ Parquet) ซึ่งปรับปรุงประสิทธิภาพ

คุณยังสามารถช่วยให้แอปพลิเคชันของคุณปลอดภัยยิ่งขึ้นได้โดยใช้ AWS Identity และการจัดการการเข้าถึง ข้อมูลประจำตัว (IAM) เพื่อเชื่อมต่อกับ Amazon Redshift

การผสานรวม Amazon Redshift สำหรับ Apache Spark ถูกสร้างขึ้นที่ด้านบนของตัวเชื่อมต่อ spark-redshift (รุ่นชุมชน) และเพิ่มประสิทธิภาพและความปลอดภัย ช่วยให้คุณได้รับประสิทธิภาพของแอปพลิเคชันเร็วขึ้นสูงสุด 10 เท่า

กรณีการใช้งานสำหรับการรวม Amazon Redshift กับ Apache Spark

สำหรับกรณีการใช้งานของเรา ผู้นำของบริษัทที่อิงตามผลิตภัณฑ์ต้องการทราบยอดขายของผลิตภัณฑ์แต่ละรายการในตลาดต่างๆ เนื่องจากยอดขายของบริษัทผันผวนตลอดเวลา จึงกลายเป็นความท้าทายสำหรับผู้นำในการติดตามยอดขายในหลายตลาด อย่างไรก็ตาม ยอดขายโดยรวมกำลังลดลง และผู้บริหารของบริษัทต้องการทราบว่าตลาดใดไม่มีประสิทธิภาพ เพื่อที่จะสามารถกำหนดเป้าหมายไปยังตลาดเหล่านี้สำหรับแคมเปญส่งเสริมการขาย

สำหรับการขายในหลายตลาด ข้อมูลการขายผลิตภัณฑ์ เช่น คำสั่งซื้อ ธุรกรรม และข้อมูลการจัดส่งมีอยู่ใน Amazon S3 ใน Data Lake ทีมวิศวกรรมข้อมูลสามารถใช้ Apache Spark กับ Amazon EMR หรือ AWS Glue เพื่อวิเคราะห์ข้อมูลนี้ใน Amazon S3

ข้อมูลสินค้าคงคลังมีอยู่ใน Amazon Redshift ในทำนองเดียวกัน ทีมวิศวกรรมข้อมูลสามารถวิเคราะห์ข้อมูลนี้ด้วย Apache Spark โดยใช้ Amazon EMR หรืองาน AWS Glue โดยใช้การผสานรวม Amazon Redshift สำหรับ Apache Spark เพื่อดำเนินการรวมและการแปลง ชุดข้อมูลที่รวมและแปลงแล้วสามารถจัดเก็บกลับเข้าไปใน Amazon Redshift โดยใช้การรวม Amazon Redshift สำหรับ Apache Spark

การใช้เฟรมเวิร์กแบบกระจาย เช่น Apache Spark ร่วมกับการผสานรวม Amazon Redshift สำหรับ Apache Spark สามารถให้การมองเห็นทั่วทั้ง Data Lake และคลังข้อมูลเพื่อสร้างข้อมูลเชิงลึกด้านการขาย ข้อมูลเชิงลึกเหล่านี้สามารถให้บริการแก่ผู้มีส่วนได้ส่วนเสียทางธุรกิจและกลุ่มผู้ใช้ทางธุรกิจใน Amazon Redshift เพื่อทำการตัดสินใจอย่างชาญฉลาดเพื่อดำเนินการส่งเสริมการขายที่ตรงเป้าหมายสำหรับกลุ่มตลาดที่มีรายได้น้อย

นอกจากนี้ เราสามารถใช้การรวม Amazon Redshift กับ Apache Spark ในกรณีการใช้งานต่อไปนี้:

  • ลูกค้า Amazon EMR หรือ AWS Glue ที่รันงาน Apache Spark ต้องการแปลงข้อมูลและเขียนข้อมูลนั้นลงใน Amazon Redshift โดยเป็นส่วนหนึ่งของไปป์ไลน์ ETL
  • ลูกค้า ML ใช้ Apache Spark กับ SageMaker สำหรับวิศวกรรมฟีเจอร์เพื่อเข้าถึงและแปลงข้อมูลใน Amazon Redshift
  • ลูกค้า Amazon EMR, AWS Glue หรือ SageMaker ใช้ Apache Spark สำหรับการวิเคราะห์ข้อมูลเชิงโต้ตอบด้วยข้อมูลบน Amazon Redshift จากโน้ตบุ๊ก

ตัวอย่างการรวม Amazon Redshift สำหรับ Apache Spark ในแอปพลิเคชัน Apache Spark

ในโพสต์นี้ เราจะแสดงขั้นตอนในการเชื่อมต่อ Amazon Redshift จาก Amazon EMR บน อเมซอน อีลาสติก คอมพิวท์ คลาวด์ (อเมซอน อีซี2), Amazon EMR ไร้เซิร์ฟเวอร์และ AWS Glue โดยใช้สคริปต์ทั่วไป ในโค้ดตัวอย่างต่อไปนี้ เราสร้างรายงานที่แสดงยอดขายรายไตรมาสสำหรับปี 2008 ในการทำเช่นนั้น เรารวมตาราง Amazon Redshift สองตารางโดยใช้ Apache Spark DataFrame รันการเลื่อนลงของเพรดิเคต รวมและจัดเรียงข้อมูล และเขียนการแปลง ข้อมูลกลับไปที่ Amazon Redshift สคริปต์ใช้ PySpark

สคริปต์ใช้ การรับรองความถูกต้องตาม IAM สำหรับ Amazon Redshift. บทบาท IAM ที่ใช้โดย Amazon EMR และ AWS Glue ควรมีสิทธิ์ที่เหมาะสมในการรับรองความถูกต้องของ Amazon Redshift และเข้าถึงบัคเก็ต S3 สำหรับการจัดเก็บข้อมูลชั่วคราว

นโยบายตัวอย่างต่อไปนี้อนุญาตให้บทบาท IAM เรียกใช้ GetClusterCredentials การดำเนินงาน:

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

นโยบายตัวอย่างต่อไปนี้อนุญาตให้เข้าถึงบัคเก็ต S3 เพื่อจัดเก็บข้อมูลชั่วคราว:

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

สคริปต์ที่สมบูรณ์มีดังนี้:

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()

หากคุณวางแผนที่จะใช้สคริปต์ก่อนหน้าในสภาพแวดล้อมของคุณ ตรวจสอบให้แน่ใจว่าคุณได้แทนที่ค่าสำหรับตัวแปรต่อไปนี้ด้วยค่าที่เหมาะสมสำหรับสภาพแวดล้อมของคุณ: jdbc_iam_url, temp_dirและ aws_role.

ในหัวข้อถัดไป เราจะแนะนำขั้นตอนในการเรียกใช้สคริปต์นี้เพื่อรวมชุดข้อมูลตัวอย่างที่มีให้ใช้งานใน Amazon Redshift

เบื้องต้น

ก่อนที่เราจะเริ่มต้น ตรวจสอบให้แน่ใจว่าเป็นไปตามข้อกำหนดเบื้องต้นต่อไปนี้:

ปรับใช้ทรัพยากรโดยใช้ AWS CloudFormation

ทำตามขั้นตอนต่อไปนี้เพื่อปรับใช้ CloudFormation stack:

  1. เข้าสู่ระบบเพื่อ คอนโซลการจัดการ AWSจากนั้นเปิด CloudFormation stack:
    BDB-2063-เปิดตัว-cloudformation-stack

คุณยังสามารถ ดาวน์โหลดเทมเพลต CloudFormation เพื่อสร้างทรัพยากรที่กล่าวถึงในโพสต์นี้ผ่านโครงสร้างพื้นฐานในรูปแบบโค้ด (IaC) ใช้เทมเพลตนี้เมื่อเปิด CloudFormation stack ใหม่

  1. เลื่อนลงไปด้านล่างสุดของหน้าเพื่อเลือก ฉันรับทราบว่า AWS CloudFormation อาจสร้างทรัพยากร IAM ภายใต้ ความสามารถในการแล้วเลือก สร้าง stack.

กระบวนการสร้างสแต็กจะใช้เวลา 15–20 นาทีจึงจะเสร็จสมบูรณ์ เทมเพลต CloudFormation สร้างทรัพยากรต่อไปนี้:

    • Amazon VPC ที่มีเครือข่ายย่อย ตารางเส้นทาง และเกตเวย์ NAT ที่จำเป็น
    • บัคเก็ต S3 ที่มีชื่อ redshift-spark-databucket-xxxxxxx (โปรดทราบว่า xxxxxxx เป็นสตริงสุ่มเพื่อทำให้ชื่อบัคเก็ตไม่ซ้ำกัน)
    • คลัสเตอร์ Amazon Redshift ที่มีข้อมูลตัวอย่างโหลดอยู่ภายในฐานข้อมูล dev และผู้ใช้หลัก redshiftmasteruser. สำหรับจุดประสงค์ของโพสต์บล็อกนี้ redshiftmasteruser มีการใช้สิทธิ์ระดับผู้ดูแลระบบ อย่างไรก็ตาม ขอแนะนำให้ใช้ผู้ใช้ที่มีการควบคุมการเข้าถึงแบบละเอียดในสภาพแวดล้อมการผลิต
    • บทบาท IAM ที่จะใช้สำหรับ Amazon Redshift พร้อมความสามารถในการร้องขอข้อมูลรับรองชั่วคราวจากฐานข้อมูลผู้พัฒนาของคลัสเตอร์ Amazon Redshift
    • อเมซอน EMR สตูดิโอ ด้วยบทบาท IAM ที่จำเป็น
    • Amazon EMR เผยแพร่เวอร์ชัน 6.9.0 บนคลัสเตอร์ EC2 ที่มีบทบาท IAM ที่จำเป็น
    • แอปพลิเคชัน Amazon EMR Serverless รุ่น 6.9.0
    • การเชื่อมต่อ AWS Glue และงาน AWS Glue เวอร์ชัน 4.0
    • A สมุดบันทึก Jupyter เพื่อเรียกใช้โดยใช้ Amazon EMR Studio โดยใช้ Amazon EMR บนคลัสเตอร์ EC2
    • สคริปต์ PySpark เพื่อเรียกใช้โดยใช้ Amazon EMR Studio และ Amazon EMR Serverless
  1. หลังจากสร้างสแต็กเสร็จแล้ว ให้เลือกชื่อสแต็ก redshift-spark และไปที่ Outputs

เราใช้ค่าผลลัพธ์เหล่านี้ในภายหลังในโพสต์นี้

ในส่วนถัดไป เราจะแสดงขั้นตอนสำหรับการรวม Amazon Redshift สำหรับ Apache Spark จาก Amazon EMR บน Amazon EC2, Amazon EMR Serverless และ AWS Glue

ใช้การรวม Amazon Redshift กับ Apache Spark บน Amazon EMR บน EC2

เริ่มตั้งแต่ Amazon EMR รีลีสเวอร์ชัน 6.9.0 ขึ้นไป ตัวเชื่อมต่อที่ใช้การรวม Amazon Redshift สำหรับ Apache Spark และไดรเวอร์ Amazon Redshift JDBC มีให้ใช้งานในเครื่องบน Amazon EMR ไฟล์เหล่านี้อยู่ภายใต้ /usr/share/aws/redshift/ ไดเรกทอรี อย่างไรก็ตาม ใน Amazon EMR เวอร์ชันก่อนหน้า ชุมชน รุ่นของ spark-redshift ตัวเชื่อมต่อ สามารถใช้ได้

ตัวอย่างต่อไปนี้แสดงวิธีเชื่อมต่อ Amazon Redshift โดยใช้เคอร์เนล PySpark ผ่าน อเมซอน EMR สตูดิโอ สมุดบันทึก. สแต็ก CloudFormation สร้าง Amazon EMR Studio, Amazon EMR บนคลัสเตอร์ EC2 และโน้ตบุ๊ก Jupyter ที่พร้อมใช้งาน หากต้องการดูตัวอย่างนี้ ให้ทำตามขั้นตอนต่อไปนี้:

  1. ดาวน์โหลดสมุดบันทึก Jupyter ที่มีอยู่ในบัคเก็ต S3 สำหรับคุณ:
    • ในเอาต์พุตสแต็ก CloudFormation ให้มองหาค่าสำหรับ EMRStudioNotebookซึ่งควรชี้ไปที่ redshift-spark-emr.ipynb โน้ตบุ๊กที่มีอยู่ในบัคเก็ต S3
    • เลือกลิงก์หรือเปิดลิงก์ในแท็บใหม่โดยคัดลอก URL สำหรับโน้ตบุ๊ก
    • หลังจากที่คุณเปิดลิงก์แล้ว ให้ดาวน์โหลดสมุดบันทึกโดยเลือก ดาวน์โหลดซึ่งจะบันทึกไฟล์ไว้ในเครื่องคอมพิวเตอร์ของคุณ
  1. เข้าถึง Amazon EMR Studio โดยเลือกหรือคัดลอกลิงก์ที่ให้ไว้ในเอาต์พุตสแต็ก CloudFormation สำหรับคีย์ EMRStudioURL.
  2. ในบานหน้าต่างนำทาง เลือก พื้นที่ทำงาน.
  3. Choose สร้างพื้นที่ทำงาน.
  4. ระบุชื่อสำหรับพื้นที่ทำงาน เช่น redshift-spark.
  5. ขยาย การกำหนดค่าขั้นสูง และเลือก แนบพื้นที่ทำงานกับคลัสเตอร์ EMR.
  6. ภายใต้ แนบไปกับคลัสเตอร์ EMRให้เลือกคลัสเตอร์ EMR ที่มีชื่อ emrCluster-Redshift-Spark.
  7. Choose สร้างพื้นที่ทำงาน.
  8. หลังจากสร้าง Amazon EMR Studio Workspace และอยู่ในสถานะแนบแล้ว คุณจะสามารถเข้าถึงพื้นที่ทำงานได้โดยเลือกชื่อพื้นที่ทำงาน

สิ่งนี้ควรเปิดพื้นที่ทำงานในแท็บใหม่ โปรดทราบว่าหากคุณมีตัวบล็อกป๊อปอัป คุณอาจต้องอนุญาตให้ Workspace เปิดหรือปิดใช้งานตัวบล็อกป๊อปอัป

ใน Amazon EMR Studio Workspace ตอนนี้เราอัปโหลดสมุดบันทึก Jupyter ที่เราดาวน์โหลดไว้ก่อนหน้านี้

  1. Choose อัพโหลด เพื่อเรียกดูระบบไฟล์ในเครื่องของคุณและอัปโหลดสมุดบันทึก Jupyter (redshift-spark-emr.ipynb).
  2. เลือก (ดับเบิลคลิก) ที่ redshift-spark-emr.ipynb โน้ตบุ๊กภายในพื้นที่ทำงานเพื่อเปิดโน้ตบุ๊ก

สมุดบันทึกให้รายละเอียดของงานต่างๆ ที่ทำอยู่ โปรดทราบว่าในส่วน กำหนดตัวแปรเพื่อเชื่อมต่อกับคลัสเตอร์ Amazon Redshiftคุณไม่จำเป็นต้องอัปเดตค่าสำหรับ jdbc_iam_url, temp_dirและ aws_role เนื่องจากสิ่งเหล่านี้ได้รับการอัปเดตสำหรับคุณโดย AWS CloudFormation AWS CloudFormation ได้ดำเนินการตามขั้นตอนที่กล่าวถึงใน เบื้องต้น ส่วนของสมุดบันทึก

ตอนนี้คุณสามารถเริ่มใช้งานโน้ตบุ๊กได้แล้ว

  1. เรียกใช้แต่ละเซลล์โดยเลือกเซลล์เหล่านั้นแล้วเลือก เล่น.

คุณยังสามารถใช้คีย์ผสมของ Shift + Enter or เปลี่ยน + กลับ. หรือคุณสามารถเรียกใช้เซลล์ทั้งหมดได้โดยเลือก เรียกใช้ทุกเซลล์ บน วิ่ง เมนู

  1. ค้นหาการดำเนินการขยายเพรดิเคตที่ดำเนินการบนคลัสเตอร์ Amazon Redshift โดยการผสานรวม Amazon Redshift สำหรับ Apache Spark

เรายังสามารถดูข้อมูลชั่วคราวที่จัดเก็บไว้ใน Amazon S3 ในรูปแบบ Parquet ที่ปรับให้เหมาะสม ผลลัพธ์สามารถดูได้จากการเรียกใช้เซลล์ในส่วน รับการสืบค้นล่าสุดที่ดำเนินการบน Amazon Redshift.

  1. ในการตรวจสอบตารางที่สร้างโดยงานจาก Amazon EMR บน Amazon EC2 ให้ไปที่คอนโซล Amazon Redshift และเลือกคลัสเตอร์ redshift-spark-redshift-cluster บน แดชบอร์ดคลัสเตอร์ที่เตรียมใช้งาน หน้า.
  2. ในรายละเอียดของคลัสเตอร์ บน ข้อมูลแบบสอบถาม เมนูให้เลือก แบบสอบถามในตัวแก้ไขแบบสอบถาม v2.
  3. เลือกคลัสเตอร์ในบานหน้าต่างนำทางและเชื่อมต่อกับคลัสเตอร์ Amazon Redshift เมื่อร้องขอการตรวจสอบสิทธิ์
  4. เลือก ข้อมูลประจำตัวชั่วคราว.
  5. สำหรับ ฐานข้อมูลป้อน dev.
  6. สำหรับ ชื่อผู้ใช้ป้อน redshiftmasteruser.
  7. Choose ลด.
  8. ในบานหน้าต่างนำทาง ขยายคลัสเตอร์ redshift-spark-redshift-clusterขยายฐานข้อมูล dev ขยาย tickitและขยาย ตาราง เพื่อแสดงรายการตารางทั้งหมดภายในสคีมา tickit.

คุณควรหาตาราง test_emr.

  1. เลือก (คลิกขวา) ตาราง test_emrแล้วเลือก เลือกตาราง เพื่อสอบถามตาราง
  2. Choose วิ่ง เพื่อเรียกใช้คำสั่ง SQL

ใช้การรวม Amazon Redshift กับ Apache Spark บน Amazon EMR Serverless

Amazon EMR รีลีสเวอร์ชัน 6.9.0 ขึ้นไปมีการผสานรวม Amazon Redshift สำหรับ Apache Spark JARs (จัดการโดย Amazon Redshift) และ Amazon Redshift JDBC JAR ภายในเครื่องบน Amazon EMR Serverless เช่นกัน ไฟล์เหล่านี้อยู่ภายใต้ /usr/share/aws/redshift/ ไดเรกทอรี ในตัวอย่างต่อไปนี้ เราใช้สคริปต์ Python ที่มีอยู่ในบัคเก็ต S3 โดยสแต็ก CloudFormation ที่เราสร้างไว้ก่อนหน้านี้

  1. ในเอาต์พุตสแต็ก CloudFormation ให้จดบันทึกค่าสำหรับ EMRServerlessExecutionScriptซึ่งเป็นตำแหน่งของสคริปต์ Python ในบัคเก็ต S3
  2. สังเกตค่าสำหรับ EMRServerlessJobExecutionRoleซึ่งเป็นบทบาท IAM ที่จะใช้กับการเรียกใช้งาน Amazon EMR Serverless
  3. เข้าถึง Amazon EMR Studio โดยเลือกหรือคัดลอกลิงก์ที่ให้ไว้ในเอาต์พุตสแต็ก CloudFormation สำหรับคีย์ EMRStudioURL.
  4. Choose การใช้งาน ภายใต้ serverless ในบานหน้าต่างนำทาง

คุณจะพบแอปพลิเคชัน EMR ที่สร้างโดย CloudFormation stack พร้อมชื่อ emr-spark-redshift.

  1. เลือกชื่อใบสมัครเพื่อส่งงาน
  2. Choose ส่งงาน.
  3. ภายใต้ รายละเอียดงานสำหรับ Nameป้อนชื่อที่ระบุได้สำหรับงาน
  4. สำหรับ บทบาทรันไทม์ให้เลือกบทบาท IAM ที่คุณบันทึกไว้จากเอาต์พุตสแต็ก CloudFormation ก่อนหน้านี้
  5. สำหรับ ตำแหน่งสคริปต์ระบุเส้นทางไปยังสคริปต์ Python ที่คุณบันทึกไว้ก่อนหน้านี้จากเอาต์พุตสแต็ก CloudFormation
  6. ขยายส่วน คุณสมบัติของประกายไฟ และเลือก แก้ไขในข้อความ
  7. ป้อนค่าต่อไปนี้ในกล่องข้อความ ซึ่งระบุเส้นทางไปยัง redshift-connectorไดรเวอร์ Amazon Redshift JDBC spark-avro จาร์ และ minimal-json ไฟล์ 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. Choose ส่งงาน.
  9. รอให้งานเสร็จสมบูรณ์และสถานะการรันจะแสดงเป็น ความสำเร็จ.
  10. ไปที่ตัวแก้ไขแบบสอบถามของ Amazon Redshift เพื่อดูว่าสร้างตารางสำเร็จหรือไม่
  11. ตรวจสอบการสืบค้นแบบเลื่อนลงที่รันสำหรับกลุ่มการสอบถาม Amazon Redshift emr-serverless-redshift. คุณสามารถรันคำสั่ง SQL ต่อไปนี้กับฐานข้อมูลได้ dev:
    SELECT query_text FROM SYS_QUERY_HISTORY WHERE query_label = 'emr-serverless-redshift' ORDER BY start_time DESC LIMIT 1

คุณจะเห็นว่าข้อความค้นหาแบบขยายลงและผลลัพธ์ที่ส่งคืนถูกจัดเก็บในรูปแบบไฟล์ Parquet บน Amazon S3

ใช้การรวม Amazon Redshift กับ Apache Spark บน AWS Glue

เริ่มต้นด้วย AWS Glue เวอร์ชัน 4.0 ขึ้นไป งาน Apache Spark ที่เชื่อมต่อกับ Amazon Redshift สามารถใช้การผสานรวม Amazon Redshift สำหรับไดรเวอร์ Apache Spark และ Amazon Redshift JDBC งาน AWS Glue ที่มีอยู่ซึ่งใช้ Amazon Redshift เป็นแหล่งที่มาหรือเป้าหมายอยู่แล้วสามารถอัปเกรดเป็น AWS Glue 4.0 เพื่อใช้ประโยชน์จากตัวเชื่อมต่อใหม่นี้ เทมเพลต CloudFormation ที่มาพร้อมกับโพสต์นี้สร้างทรัพยากร AWS Glue ต่อไปนี้:

  • การเชื่อมต่อ AWS Glue สำหรับ Amazon Redshift – การเชื่อมต่อเพื่อสร้างการเชื่อมต่อจาก AWS Glue ไปยัง Amazon Redshift โดยใช้การรวม Amazon Redshift สำหรับ Apache Spark
  • บทบาท IAM ที่แนบกับงาน AWS Glue – บทบาท IAM ในการจัดการสิทธิ์ในการเรียกใช้งาน AWS Glue
  • งานกาว AWS – สคริปต์สำหรับงาน AWS Glue ที่ดำเนินการแปลงและรวมโดยใช้การรวม Amazon Redshift สำหรับ Apache Spark

ตัวอย่างต่อไปนี้ใช้การเชื่อมต่อ AWS Glue ที่แนบกับงาน AWS Glue ด้วย PySpark และมีขั้นตอนต่อไปนี้:

  1. บนคอนโซล AWS Glue ให้เลือก การเชื่อมต่อ ในบานหน้าต่างนำทาง
  2. ภายใต้ การเชื่อมต่อให้เลือกการเชื่อมต่อ AWS Glue สำหรับ Amazon Redshift ที่สร้างโดยเทมเพลต CloudFormation
  3. ตรวจสอบรายละเอียดการเชื่อมต่อ

ตอนนี้คุณสามารถใช้การเชื่อมต่อนี้ซ้ำได้ภายในงานหรือหลายงาน

  1. เกี่ยวกับ เชื่อมต่อ หน้า เลือกงาน AWS Glue ที่สร้างโดย CloudFormation stack ภายใต้ งานของคุณหรือเข้าถึงงาน AWS Glue โดยใช้ URL ที่ให้ไว้สำหรับคีย์ GlueJob ในเอาต์พุตสแต็ก CloudFormation
  2. เข้าถึงและตรวจสอบสคริปต์สำหรับงาน AWS Glue
  3. เกี่ยวกับ รายละเอียดงาน แท็บ ตรวจสอบให้แน่ใจว่า รุ่นกาว ถูกตั้งค่าเป็น กาว 4.0.

เพื่อให้แน่ใจว่างานใช้ล่าสุด redshift-spark เชื่อมต่อ

  1. แสดง คุณสมบัติขั้นสูง และใน การเชื่อมต่อ ให้ตรวจสอบว่าการเชื่อมต่อที่สร้างโดยสแต็ก CloudFormation แนบอยู่
  2. ตรวจสอบพารามิเตอร์งานที่เพิ่มสำหรับงาน AWS Glue ค่าเหล่านี้ยังมีอยู่ในเอาต์พุตสำหรับ CloudFormation stack
  3. Choose ลด แล้วก็ วิ่ง.

คุณสามารถดูสถานะของการรันงานได้ที่ วิ่ง แถบ

  1. หลังจากการเรียกใช้งานเสร็จสมบูรณ์ คุณสามารถตรวจสอบผลลัพธ์ของกาวทดสอบตารางที่สร้างโดยงาน AWS Glue
  2. เราตรวจสอบการสืบค้นแบบเลื่อนลงที่รันสำหรับกลุ่มการสืบค้น Amazon Redshift glue-redshift. คุณสามารถรันคำสั่ง SQL ต่อไปนี้กับฐานข้อมูลได้ dev:
    SELECT query_text FROM SYS_QUERY_HISTORY WHERE query_label = 'glue-redshift' ORDER BY start_time DESC LIMIT 1

ปฏิบัติที่ดีที่สุด

โปรดคำนึงถึงแนวทางปฏิบัติที่ดีที่สุดต่อไปนี้:

  • พิจารณาใช้การรวม Amazon Redshift สำหรับ Apache Spark จาก Amazon EMR แทนการใช้ redshift-spark ตัวเชื่อมต่อ (รุ่นชุมชน) สำหรับงาน Apache Spark ใหม่ของคุณ
  • หากคุณมีงาน Apache Spark อยู่แล้วโดยใช้ไฟล์ redshift-spark (เวอร์ชันชุมชน) ให้พิจารณาอัปเกรดเพื่อใช้การรวม Amazon Redshift สำหรับ Apache Spark
  • การผสานรวม Amazon Redshift สำหรับ Apache Spark จะใช้เพรดิเคตและการสืบค้นแบบเลื่อนลงโดยอัตโนมัติเพื่อเพิ่มประสิทธิภาพ ขอแนะนำให้ใช้ฟังก์ชันที่รองรับ (autopushdown) ในแบบสอบถามของคุณ การผสานรวม Amazon Redshift สำหรับ Apache Spark จะเปลี่ยนฟังก์ชันให้เป็นแบบสอบถาม SQL และเรียกใช้แบบสอบถามใน Amazon Redshift การเพิ่มประสิทธิภาพนี้ส่งผลให้มีการดึงข้อมูลที่จำเป็น ดังนั้น Apache Spark จึงสามารถประมวลผลข้อมูลน้อยลงและมีประสิทธิภาพดีขึ้น
    • พิจารณาใช้ฟังก์ชันการกดลงแบบรวมเช่น avg, count, max, minและ sum เพื่อดึงข้อมูลที่กรองมาประมวลผลข้อมูล
    • ลองใช้ตัวดำเนินการดันลงบูลีน เช่น in, isnull, isnotnull, contains, endswithและ startswith เพื่อดึงข้อมูลที่กรองมาประมวลผลข้อมูล
    • พิจารณาใช้ตัวดำเนินการเลื่อนลงแบบลอจิคัล เช่น and, orและ not (หรือ !) เพื่อดึงข้อมูลที่กรองแล้วสำหรับการประมวลผลข้อมูล
  • ขอแนะนำให้ส่งบทบาท IAM โดยใช้พารามิเตอร์ aws_iam_role สำหรับการรับรองความถูกต้องของ Amazon Redshift จากแอปพลิเคชัน Apache Spark บน Amazon EMR หรือ AWS Glue บทบาท IAM ควรมีสิทธิ์ที่จำเป็นในการดึงข้อมูลรับรอง IAM ชั่วคราวเพื่อตรวจสอบสิทธิ์กับ Amazon Redshift ดังที่แสดงในส่วน "ตัวอย่างสำหรับการรวม Amazon Redshift สำหรับ Apache Spark ในแอปพลิเคชัน Apache Spark" ของบล็อกนี้
  • ด้วยคุณสมบัตินี้ คุณไม่จำเป็นต้องรักษาชื่อผู้ใช้และรหัสผ่านของ Amazon Redshift ในตัวจัดการความลับและฐานข้อมูล Amazon Redshift
  • Amazon Redshift ใช้คำสั่ง UNLOAD SQL เพื่อจัดเก็บข้อมูลชั่วคราวนี้บน Amazon S3 แอปพลิเคชัน Apache Spark ดึงผลลัพธ์จากไดเร็กทอรีชั่วคราว (จัดเก็บในรูปแบบไฟล์ Parquet) ไดเร็กทอรีชั่วคราวนี้บน Amazon S3 ไม่ได้ถูกล้างข้อมูลโดยอัตโนมัติ ดังนั้นจึงอาจมีค่าใช้จ่ายเพิ่มเติม เราแนะนำให้ใช้ นโยบายวงจรชีวิตของ Amazon S3 เพื่อกำหนดกฎการเก็บรักษาสำหรับบัคเก็ต S3
  • ขอแนะนำให้เปิด การบันทึกการตรวจสอบของ Amazon Redshift เพื่อบันทึกข้อมูลเกี่ยวกับการเชื่อมต่อและกิจกรรมของผู้ใช้ในฐานข้อมูลของคุณ
  • ขอแนะนำให้เปิด การเข้ารหัส Amazon Redshift ที่เหลือ เพื่อเข้ารหัสข้อมูลของคุณตามที่ Amazon Redshift เขียนไว้ในศูนย์ข้อมูลและถอดรหัสให้คุณเมื่อคุณเข้าถึง
  • ขอแนะนำให้อัปเกรดเป็น AWS Glue v4.0 ขึ้นไปเพื่อใช้การผสานรวม Amazon Redshift สำหรับ Apache Spark ซึ่งพร้อมใช้งานทันที การอัปเกรดเป็น AWS Glue เวอร์ชันนี้จะใช้คุณลักษณะนี้โดยอัตโนมัติ
  • ขอแนะนำให้อัปเกรดเป็น Amazon EMR v6.9.0 ขึ้นไปเพื่อใช้การผสานรวม Amazon Redshift สำหรับ Apache Spark คุณไม่จำเป็นต้องจัดการไดรเวอร์หรือไฟล์ JAR ใดๆ อย่างชัดเจน
  • พิจารณาใช้สมุดบันทึก Amazon EMR Studio เพื่อโต้ตอบกับข้อมูล Amazon Redshift ในแอปพลิเคชัน Apache Spark
  • พิจารณาใช้ AWS Glue Studio เพื่อสร้างงาน Apache Spark โดยใช้อินเทอร์เฟซแบบภาพ คุณยังสามารถเปลี่ยนไปเขียนโค้ด Apache Spark ใน Scala หรือ PySpark ภายใน AWS Glue Studio

ทำความสะอาด

ทำตามขั้นตอนต่อไปนี้เพื่อล้างข้อมูลทรัพยากรที่สร้างขึ้นโดยเป็นส่วนหนึ่งของเทมเพลต CloudFormation เพื่อให้แน่ใจว่าคุณจะไม่ถูกเรียกเก็บเงินสำหรับทรัพยากรหากคุณไม่ได้ใช้งานอีกต่อไป:

  1. หยุดแอปพลิเคชัน Amazon EMR Serverless:
    • เข้าถึง Amazon EMR Studio โดยเลือกหรือคัดลอกลิงก์ที่ให้ไว้ในเอาต์พุตสแต็ก CloudFormation สำหรับคีย์ EMRStudioURL.
    • Choose การใช้งาน ภายใต้ serverless ในบานหน้าต่างนำทาง

คุณจะพบแอปพลิเคชัน EMR ที่สร้างโดย CloudFormation stack พร้อมชื่อ emr-spark-redshift.

    • หากสถานะแอปพลิเคชันแสดงเป็น Stopped คุณสามารถไปยังขั้นตอนถัดไปได้ อย่างไรก็ตาม หากสถานะแอปพลิเคชันเป็นเริ่มต้น ให้เลือกชื่อแอปพลิเคชัน จากนั้นเลือก หยุดแอปพลิเคชัน และ หยุดแอปพลิเคชัน อีกครั้งเพื่อยืนยัน
  1. ลบพื้นที่ทำงานของ Amazon EMR Studio:
    • เข้าถึง Amazon EMR Studio โดยเลือกหรือคัดลอกลิงก์ที่ให้ไว้ในเอาต์พุตสแต็ก CloudFormation สำหรับคีย์ EMRStudioURL.
    • Choose พื้นที่ทำงาน ในบานหน้าต่างนำทาง
    • เลือกพื้นที่ทำงานที่คุณสร้างขึ้นและเลือก ลบแล้วเลือก ลบ อีกครั้งเพื่อยืนยัน
  2. ลบกอง CloudFormation:
    • บนคอนโซล AWS CloudFormation ให้ไปที่สแต็กที่คุณสร้างไว้ก่อนหน้านี้
    • เลือกชื่อสแต็กแล้วเลือก ลบ เพื่อลบกองและลบทรัพยากรที่สร้างขึ้นเป็นส่วนหนึ่งของโพสต์นี้
    • ในหน้าจอยืนยัน ให้เลือก ลบ stack.

สรุป

ในโพสต์นี้ เราได้อธิบายวิธีที่คุณสามารถใช้การผสานรวม Amazon Redshift สำหรับ Apache Spark เพื่อสร้างและปรับใช้แอปพลิเคชันด้วย Amazon EMR บน Amazon EC2, Amazon EMR Serverless และ AWS Glue เพื่อใช้เพรดิเคตและการสืบค้นแบบเลื่อนลงโดยอัตโนมัติเพื่อเพิ่มประสิทธิภาพการสืบค้นข้อมูล ใน Amazon Redshift ขอแนะนำให้ใช้การรวม Amazon Redshift สำหรับ Apache Spark เพื่อการเชื่อมต่อที่ราบรื่นและปลอดภัยกับ Amazon Redshift จาก Amazon EMR หรือ AWS Glue ของคุณ

นี่คือสิ่งที่ลูกค้าของเราบางคนพูดถึงเกี่ยวกับการผสานรวม Amazon Redshift สำหรับ Apache Spark:

“เราให้อำนาจวิศวกรของเราในการสร้างไปป์ไลน์ข้อมูลและแอปพลิเคชันด้วย Apache Spark โดยใช้ Python และ Scala เราต้องการโซลูชันที่ปรับให้เหมาะกับลูกค้าซึ่งลดความซับซ้อนของการดำเนินงานและส่งมอบได้เร็วขึ้นและมีประสิทธิภาพมากขึ้นสำหรับลูกค้าของเรา และนั่นคือสิ่งที่เราได้รับจากการผสานรวม Amazon Redshift ใหม่สำหรับ Apache Spark”

—การให้คำปรึกษา Huron

“GE Aerospace ใช้การวิเคราะห์ของ AWS และ Amazon Redshift เพื่อเปิดใช้งานข้อมูลเชิงลึกทางธุรกิจที่สำคัญซึ่งขับเคลื่อนการตัดสินใจทางธุรกิจที่สำคัญ ด้วยการรองรับการคัดลอกอัตโนมัติจาก Amazon S3 เราสามารถสร้างไปป์ไลน์ข้อมูลที่ง่ายขึ้นเพื่อย้ายข้อมูลจาก Amazon S3 ไปยัง Amazon Redshift สิ่งนี้ช่วยเร่งความสามารถของทีมผลิตภัณฑ์ข้อมูลของเราในการเข้าถึงข้อมูลและให้ข้อมูลเชิงลึกแก่ผู้ใช้ปลายทาง เราใช้เวลามากขึ้นในการเพิ่มมูลค่าผ่านข้อมูลและใช้เวลาในการผสานรวมน้อยลง”

—GE การบินและอวกาศ

“จุดเน้นของเราคือการให้การเข้าถึงข้อมูลแบบบริการตนเองสำหรับผู้ใช้ทุกคนที่ Goldman Sachs ด้วย Legend ซึ่งเป็นแพลตฟอร์มการจัดการข้อมูลแบบโอเพ่นซอร์สและการกำกับดูแล เราช่วยให้ผู้ใช้สามารถพัฒนาแอปพลิเคชันที่มีข้อมูลเป็นศูนย์กลางและรับข้อมูลเชิงลึกที่ขับเคลื่อนด้วยข้อมูลในขณะที่เราทำงานร่วมกันในอุตสาหกรรมบริการทางการเงิน ด้วยการผสานรวม Amazon Redshift สำหรับ Apache Spark ทีมแพลตฟอร์มข้อมูลของเราจะสามารถเข้าถึงข้อมูล Amazon Redshift ได้ด้วยขั้นตอนแบบแมนนวลเพียงเล็กน้อย ทำให้สามารถใช้ ETL แบบไม่มีโค้ดได้ ซึ่งจะเพิ่มความสามารถของเราในการทำให้วิศวกรสามารถมุ่งเน้นไปที่การปรับปรุงเวิร์กโฟลว์ให้สมบูรณ์แบบได้ง่ายขึ้น พวกเขารวบรวมข้อมูลที่ครบถ้วนและทันเวลา เราคาดว่าจะเห็นการปรับปรุงประสิทธิภาพของแอปพลิเคชันและการรักษาความปลอดภัยที่ดีขึ้น เนื่องจากผู้ใช้ของเราสามารถเข้าถึงข้อมูลล่าสุดใน Amazon Redshift ได้อย่างง่ายดาย”

—โกลด์แมน แซคส์


เกี่ยวกับผู้เขียน

กากัน พรหมมี เป็นสถาปนิกผู้เชี่ยวชาญด้านโซลูชันอาวุโสที่เน้นการวิเคราะห์ข้อมูลขนาดใหญ่และแพลตฟอร์ม AI/ML ที่ Amazon Web Services Gagan มีประสบการณ์มากกว่า 18 ปีในด้านเทคโนโลยีสารสนเทศ เขาช่วยลูกค้าออกแบบและสร้างโซลูชันบนระบบคลาวด์ที่ปรับขนาดได้ มีประสิทธิภาพ และปลอดภัยบน AWS ในเวลาว่าง เขาใช้เวลากับครอบครัวและสำรวจสถานที่ใหม่ๆ

วิเวก โกตัม เป็นสถาปนิกข้อมูลที่มีความเชี่ยวชาญด้าน Data Lake ที่ AWS Professional Services เขาทำงานร่วมกับลูกค้าองค์กรที่สร้างผลิตภัณฑ์ข้อมูล แพลตฟอร์มการวิเคราะห์ และโซลูชันบน AWS เมื่อไม่ได้สร้างและออกแบบ Data Lake วิเวกก็เป็นผู้ชื่นชอบอาหารที่ชอบสำรวจสถานที่ท่องเที่ยวใหม่ๆ และเดินป่าด้วย

นเรศ เกาตัม เป็นผู้นำด้านการวิเคราะห์ข้อมูลและ AI/ML ที่ AWS ด้วยประสบการณ์ 20 ปี ผู้ชื่นชอบการช่วยลูกค้าออกแบบโซลูชันการวิเคราะห์ข้อมูลและ AI/ML ที่พร้อมใช้งานสูง ประสิทธิภาพสูง และคุ้มค่า เพื่อเพิ่มศักยภาพให้ลูกค้าด้วยการตัดสินใจที่ขับเคลื่อนด้วยข้อมูล . เวลาว่างชอบทำสมาธิและทำอาหาร

โบซ์ ชารีฟี เป็นวิศวกรพัฒนาซอฟต์แวร์ภายในทีมไดรเวอร์ของ Amazon Redshift ซึ่งเขาเป็นผู้นำการพัฒนาการผสานรวม Amazon Redshift กับตัวเชื่อมต่อ Apache Spark เขามีประสบการณ์มากกว่า 20 ปีในการสร้างแพลตฟอร์มที่ขับเคลื่อนด้วยข้อมูลในหลายอุตสาหกรรม ในเวลาว่าง เขาชอบใช้เวลากับครอบครัวและเล่นกระดานโต้คลื่น

ประทับเวลา:

เพิ่มเติมจาก AWS ข้อมูลขนาดใหญ่