View a markdown version of this page

Erste Schritte mit Amazon EMR Data Quality - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erste Schritte mit Amazon EMR Data Quality

In diesem Abschnitt werden Sie Schritt für Schritt durch die vollständige Durchführung Ihrer ersten Amazon EMR Data Quality-Bewertung geführt: die Berechtigungen, die Ihre Amazon EMR Spark-Anwendung benötigt, und eine exemplarische Vorgehensweise, bei der ein DQDL-Regelsatz mit einem DataFrame auf Amazon EMR verglichen wird und das Ergebnis abgerufen wird.

Voraussetzungen

IAM-Berechtigungen

Die IAM-Rolle, die Ihr Amazon EMR Spark-Workload annimmt — das dem Cluster zugeordnete EC2-Instance-Profil oder eine Runtime-Rolle pro Schritt — muss die folgenden Berechtigungen gewähren, um Data Quality auszuführen und Ergebnisse zu veröffentlichen.

Action Bei Bedarf
glue:PublishDataQuality Um jede Bewertung in AWS Glue Data Quality zu veröffentlichen, damit Sie den Verlauf einsehen, Läufe vergleichen und Anomalieerkennung als Feed nutzen können. Die Veröffentlichung ist standardmäßig aktiviert (enableDataQualityResultsPublishingistTrue). Erteilen Sie diese Erlaubnis, sofern Sie sich nicht ausdrücklich abmelden, indem Sie die Option auf False setzen.
glue:AccessDataQualityRuntimeConfiguration Um die Veröffentlichungskonfiguration vom Dienst abzurufen, wenn die Bibliothek die Veröffentlichung initialisiert. Erforderlich, wenn das Publizieren aktiviert ist. Andernfalls deaktiviert die Bibliothek das Publizieren im Hintergrund für die Ausführung.
cloudwatch:PutMetricData Zur Übermittlung von Pass-and-Fail-Metriken pro Lauf an Amazon CloudWatch für Dashboards und Alarme. Nur erforderlich, wenn Sie auf einstellenenableDataQualityCloudWatchMetrics. True
glue:GetTable, glue:GetDatabase Um Metadaten von Katalogtabellen zu lesen. Erforderlich, wenn die Eingabe aus einer AWS Glue-Datenkatalogtabelle gelesen DataFrame wird oder wenn die Anwendung erfolgreich ist, publishToDataCatalogTarget sodass der Service den Lauf einer bestimmten Katalogtabelle zuordnen kann.
glue:GetDataQualityRuleset Um einen gespeicherten Regelsatz aus dem AWS Glue-Datenkatalog abzurufen. Nur erforderlich, wenn Ihr Spark-Skript einen Regelsatz aus dem Katalog lädt, anstatt DQDL inline zu definieren. Siehe Abrufen eines gespeicherten Regelsatzes aus dem AWS Glue Data Catalog.

Die folgende Inline-Richtlinie gewährt die Mindestberechtigungen, die für die Veröffentlichung von Datenqualitätsergebnissen aus einer Amazon EMR Spark-Anwendung erforderlich sind.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GlueDataQuality", "Effect": "Allow", "Action": [ "glue:PublishDataQuality", "glue:AccessDataQualityRuntimeConfiguration" ], "Resource": "*" } ] }

Führen Sie Ihre erste Evaluierung durch

  1. Erstellen Sie einen Amazon EMR-Cluster oder eine Amazon EMR-Applikation. Verwenden Sie Version emr-spark-8.1.0 oder höher auf Amazon EMR auf EC2, Amazon EMR auf EKS oder Amazon EMR Serverless. Fügen Sie eine Rolle hinzu, die über die unter aufgeführten Berechtigungen verfügt. IAM-Berechtigungen

    Um beispielsweise einen Amazon EMR auf einem EC2-Cluster zu erstellen, führen Sie folgenden Befehl aus:

    aws emr create-cluster --release-label emr-spark-8.1.0 \ --applications Name=Spark \ --region us-east-1 \ --name My_Spark_DataQuality_Cluster \ --log-uri s3://amzn-s3-demo-bucket/ \ --instance-type m5.xlarge \ --instance-count 2 \ --service-role EMR_DefaultRole_V2 \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0
  2. Definieren Sie einen Regelsatz und bewerten Sie ihn. Das folgende PySpark Skript definiert einen Regelsatz in DQDL, wertet ihn anhand eines DataFrame aus und gibt das Ergebnis pro Regel aus.

    from pyspark.sql import SparkSession from awsdataquality.transforms import EvaluateDataQuality spark = SparkSession.builder.appName("dq-example").getOrCreate() df = spark.read.parquet("s3://amzn-s3-demo-bucket/orders/") ruleset = """ Rules = [ RowCount > 1000, IsComplete "order_id", IsUnique "order_id", ColumnValues "status" in ["PLACED", "SHIPPED", "CANCELED"], Mean "order_total" between 10 and 500 ] """ results = EvaluateDataQuality.apply( frame=df, ruleset=ruleset, publishing_options={ "dataQualityEvaluationContext": "orders_daily", "enableDataQualityResultsPublishing": True, }, ) results.show(truncate=False)

    Das results DataFrame enthält eine Zeile pro Regel mit den folgenden Spalten:Rule,, undOutcome. FailureReason EvaluatedMetrics Zeilen mit einem „Outcomevon“ Failed enthalten den beobachteten Wert inFailureReason.

  3. Reichen Sie den Antrag ein. Reichen Sie das Skript genauso ein, wie Sie jede andere Spark-Anwendung für Ihren Amazon EMR-Bereitstellungsmodus einreichen.

    Amazon EMR on EC2
    aws emr add-steps --cluster-id j-1234567890ABC \ --steps Type=Spark,Name="dq-example",ActionOnFailure=CONTINUE,Args=[s3://amzn-s3-demo-bucket/scripts/dq_example.py]
    Amazon EMR on EKS
    aws emr-containers start-job-run \ --virtual-cluster-id <virtual-cluster-id> \ --name dq-example \ --execution-role-arn <execution-role-arn> \ --release-label emr-spark-8.1.0 \ --job-driver '{ "sparkSubmitJobDriver": { "entryPoint": "s3://amzn-s3-demo-bucket/scripts/dq_example.py" } }'
    Amazon EMR Serverless
    aws emr-serverless start-job-run \ --application-id <application-id> \ --execution-role-arn <execution-role-arn> \ --name dq-example \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://amzn-s3-demo-bucket/scripts/dq_example.py" } }'
  4. Rufen Sie das Ergebnis ab. Wenn die Anwendung abgeschlossen ist, listen Sie den Lauf auf und rufen Sie seine Details mit den AWS Glue Data Quality APIs oder dem AWS CLI ab. Wenn Ihre Anwendung auch publishToDataCatalogTarget mit einem DatabaseName und festlegtTableName, wird der Lauf auf der Registerkarte Datenqualität dieser Katalogtabelle in der AWS Glue-Konsole angezeigt (sieheErgebnisse anzeigen in der AWS Konsole Glue). Verwenden Sie andernfalls die API oder AWS CLI um den Lauf abzurufen.

    aws glue list-data-quality-results-v2 --max-results 5 aws glue get-data-quality-result-v2 --result-id <result-id>

    Um die Liste auf Ausführungen eines bestimmten Datensatzes einzugrenzen, übergeben Sie den DatensatzEvaluationContext, den Ihre Anwendung verwendet hat (z. B.orders_daily)ListDataQualityStatistics. Wenn Ihre Anwendung aus einer AWS Glue-Datenkatalogtabelle liest, können Sie zusätzlich list-data-quality-results-v2 nach filternDataSource.GlueTable.

Abrufen eines gespeicherten Regelsatzes aus dem AWS Glue Data Catalog

Anstatt Ihren Regelsatz direkt in jedem Spark-Skript zu definieren, können Sie einen Regelsatz einmal im AWS Glue-Datenkatalog erstellen und ihn zur Laufzeit aus Ihrer Amazon EMR Spark-Anwendung abrufen. Auf diese Weise können Sie einen Regelsatz an einem Ort versionieren und ihn für Amazon EMR Spark-Workloads, AWS Glue ETL-Jobs und Evaluierungen gemeinsam nutzen.

  1. Erstellen Sie den Regelsatz in AWS Glue. Erstellen und speichern Sie den Regelsatz mithilfe eines der folgenden Pfade:

  2. Gewähren Sie der Spark-Workload-Rolle Zugriff. Fügen Sie glue:GetDataQualityRuleset die Rolle hinzu, die Ihre Amazon EMR Spark-Anwendung einnimmt.

  3. Rufen Sie den Regelsatz in Ihrem Spark-Skript ab. Rufen Sie GetDataQualityRuleset mit boto3 auf, extrahieren Sie das Ruleset Feld und übergeben Sie die DQDL-Zeichenfolge an. EvaluateDataQuality.apply

    import boto3 from awsdataquality.transforms import EvaluateDataQuality glue = boto3.client("glue") response = glue.get_data_quality_ruleset(Name="orders_quality") ruleset = response["Ruleset"] results = EvaluateDataQuality.apply( frame=df, ruleset=ruleset, publishing_options={ "dataQualityEvaluationContext": "orders_daily", "enableDataQualityResultsPublishing": True, }, )