Zephyrnet-logo

Introductie van native ondersteuning voor Apache Hudi, Delta Lake en Apache Iceberg op AWS Glue voor Apache Spark, deel 2: AWS Glue Studio Visual Editor

Datum:

In de eerste post van deze serie, we hebben beschreven hoe AWS lijm voor Apache Spark werkt met Apache Hudi, Linux Foundation Delta Lake en Apache Iceberg datasets-tabellen met behulp van de native ondersteuning van die data lake-indelingen. Deze native ondersteuning vereenvoudigt het lezen en schrijven van uw gegevens voor deze datalake-frameworks, zodat u uw datalakes gemakkelijker op een transactieconsistente manier kunt bouwen en onderhouden. Met deze functie is het niet meer nodig om een ​​afzonderlijke connector te installeren en zijn er minder configuratiestappen nodig om deze frameworks te gebruiken in AWS Glue voor Apache Spark-taken.

Met deze data lake-frameworks kunt u gegevens efficiënter opslaan en kunnen toepassingen sneller toegang krijgen tot uw gegevens. In tegenstelling tot eenvoudigere gegevensbestandsindelingen zoals Apache Parquet, CSV en JSON, die big data kunnen opslaan, organiseren data lake-frameworks gedistribueerde big data-bestanden in tabelstructuren die basisconstructies van databases op data lakes mogelijk maken.

Voortbordurend op de functionaliteit die we hebben aangekondigd op AWS re:Invent 2022, ondersteunt AWS Glue nu native Hudi, Delta Lake en Iceberg via de visuele editor van AWS Glue Studio. Als u liever AWS Glue voor Apache Spark-taken schrijft met behulp van een visuele tool, kunt u nu elk van deze drie data lake-frameworks als bron of doel kiezen via een grafische gebruikersinterface (GUI) zonder aangepaste code.

Zelfs zonder eerdere ervaring met het gebruik van Hudi, Delta Lake of Iceberg, kunt u gemakkelijk typische use cases bereiken. In dit bericht laten we zien hoe u gegevens die zijn opgeslagen in Hudi kunt opnemen met behulp van de visuele editor van AWS Glue Studio.

Voorbeeld scenario

Om de visuele editor-ervaring te demonstreren, introduceert dit bericht de Wereldwijd historisch klimatologisch netwerk dagelijks (GHCN-D) gegevensset. De gegevens zijn openbaar toegankelijk via een Amazon eenvoudige opslagservice (Amazon S3) emmer. Voor meer informatie, zie de Register van Open Data op AWS. U kunt ook meer leren in Visualiseer meer dan 200 jaar wereldwijde klimaatgegevens met behulp van Amazon Athena en Amazon QuickSight.

De Amazon S3-locatie s3://noaa-ghcn-pds/csv/by_year/ heeft alle waarnemingen van 1763 tot heden georganiseerd in CSV-bestanden, één bestand voor elk jaar. Het volgende blok toont een voorbeeld van hoe de records eruit zien:

ID,DATE,ELEMENT,DATA_VALUE,M_FLAG,Q_FLAG,S_FLAG,OBS_TIME
AE000041196,20220101,TAVG,204,H,,S,
AEM00041194,20220101,TAVG,211,H,,S,
AEM00041217,20220101,TAVG,209,H,,S,
AEM00041218,20220101,TAVG,207,H,,S,
AE000041196,20220102,TAVG,226,H,,S,
...
AE000041196,20221231,TMAX,243,,,S,
AE000041196,20221231,PRCP,0,D,,S,
AE000041196,20221231,TAVG,202,H,,S,

De records hebben velden zoals ID, DATE, ELEMENT en meer. Elke combinatie van ID, DATE en ELEMENT vertegenwoordigt een uniek record in deze dataset. Bijvoorbeeld de plaat met ID as AE000041196, ELEMENT as TAVG en DATE as 20220101 is uniek.

In deze zelfstudie gaan we ervan uit dat de bestanden elke dag worden bijgewerkt met nieuwe records en dat we alleen de laatste record per primaire sleutel willen opslaan (ID en ELEMENT) om de nieuwste momentopnamegegevens bevraagbaar te maken. Een typische benadering is om een ​​INSERT uit te voeren voor alle historische gegevens en de laatste records in query's te berekenen; dit kan echter extra overhead veroorzaken bij alle query's. Als u alleen de meest recente records wilt analyseren, kunt u beter een UPSERT (bijwerken en invoegen) uitvoeren op basis van de primaire sleutel en DATE veld in plaats van alleen een INSERT om duplicaten te voorkomen en een enkele bijgewerkte rij met gegevens te behouden.

Voorwaarden

Om door te gaan met deze zelfstudie, moet u van tevoren de volgende AWS-bronnen maken:

Verwerk een Hudi-dataset in de visuele editor van AWS Glue Studio

Laten we een AWS Glue-taak schrijven om dagelijkse records in 2022 te lezen en de nieuwste momentopname in de Hudi-tabel op uw S3-bucket te schrijven met behulp van UPSERT. Voer de volgende stappen uit:

  1. Open AWS-lijmstudio.
  2. Kies Vacatures.
  3. Kies Visueel met een bron en doel.
  4. Voor bron en doelwit, kiezen Amazon S3, kies dan creëren.

Er verschijnt een nieuwe visuele taakconfiguratie. De volgende stap is het configureren van de gegevensbron om een ​​voorbeeldgegevensset te lezen:

  1. Onder Visual, kiezen Gegevensbron – S3-bucket.
  2. Onder Knooppunt eigenschappenvoor S3-brontypeselecteer S3 locatie.
  3. Voor S3-URL, ga naar binnen s3://noaa-ghcn-pds/csv/by_year/2022.csv.

De gegevensbron is geconfigureerd.

databron

De volgende stap is het configureren van het gegevensdoel om gegevens op te nemen in Apache Hudi op uw S3-bucket:

  1. Kies Gegevensdoel – S3-bucket.
  2. Onder Eigenschappen van gegevensdoel - S3voor Formaat, kiezen Apache Hudi.
  3. Voor Hudi-tabelnaam, ga naar binnen ghcn.
  4. Voor Hudi-opslagtype, kiezen Kopiëren op schrijven.
  5. Voor Hudi-schrijfbewerking, kiezen opsteken.
  6. Voor Hudi-recordsleutelvelden, kiezen ID.
  7. Voor Hudi Precombine-sleutelveld, kiezen DATE.
  8. Voor Compressietype, kies GZIP.
  9. Voor S3 Doellocatie, ga naar binnen s3://<Your S3 bucket name>/<Your S3 bucket prefix>/hudi_native/ghcn/. (Geef de naam en het voorvoegsel van uw S3-bucket op.)

Configureer de taak om een ​​tabeldefinitie te maken in de AWS Glue-gegevenscatalogus om het gemakkelijk te maken om de voorbeeldgegevens te ontdekken en deze ook bevraagbaar te maken vanuit Athena:

  1. Voor Update-opties voor gegevenscatalogusselecteer Maak een tabel in de gegevenscatalogus en werk bij volgende uitvoeringen het schema bij en voeg nieuwe partities toe.
  2. Voor Database, kiezen hudi_native.
  3. Voor Tafel naam, ga naar binnen ghcn.
  4. Voor Partitiesleutels – optioneel, kiezen ELEMENT.

Nu is uw taak voor gegevensintegratie volledig in de visuele editor geschreven. Laten we één resterende instelling over de IAM-rol toevoegen en vervolgens de taak uitvoeren:

  1. Onder Details van de baanvoor IAM-rol, kies uw IAM-rol.
  2. Kies Bespaar, kies dan lopen.

gegevensdoel

  1. Navigeer naar de Runs tabblad om de voortgang van de taak bij te houden en te wachten tot deze is voltooid.

baan run

Vraag de tafel met Athena

Nu de taak met succes de Hudi-tabel heeft gemaakt, kunt u de tabel opvragen via verschillende engines, waaronder Amazone Athene, Amazon EMR en Amazon Roodverschuivingsspectrum, naast AWS Glue voor Apache Spark.

Voer de volgende stappen uit om te zoeken via Athena:

  1. Open de query-editor op de Athena-console.
  2. Voer in de query-editor de volgende SQL in en kies lopen:
SELECT * FROM "hudi_native"."ghcn" limit 10;

De volgende schermafbeelding toont het queryresultaat.
athena-query1

Laten we diep in de tabel duiken om te begrijpen hoe de gegevens worden opgenomen en ons concentreren op de records met ID='AE000041196′.

  1. Voer de volgende query uit om u te concentreren op de zeer specifieke voorbeeldrecords ID='AE000041196':
SELECT * FROM "hudi_native"."ghcn" WHERE ID='AE000041196';

De volgende schermafbeelding toont het queryresultaat.
athena-query2

Het originele bronbestand 2022.csv heeft historische records voor record ID='USW00012894' oppompen van 20220101 naar 20221231, maar het queryresultaat toont slechts vier records, één record per ELEMENT bij de laatste momentopname van de dag 20221230 or 20221231. Omdat we de UPSERT-schrijfoptie gebruikten bij het schrijven van gegevens, hebben we het ID-veld geconfigureerd als een Hudi-recordsleutelveld, het DATE veld als Hudi precombine veld, en de ELEMENT veld als partitiesleutelveld. Wanneer twee records dezelfde sleutelwaarde hebben, kiest Hudi degene met de grootste waarde voor het precombine-veld. Toen de taak gegevens opnam, vergeleek het alle waarden in het DATE veld voor elk paar ID en ELEMENT, en koos vervolgens het record met de grootste waarde in de DATE veld.

Volgens het voorgaande resultaat konden we de nieuwste momentopname van alle gegevens van 2022 opnemen. Laten we nu een UPSERT doen van de nieuwe 2023-gegevens om de records in de doel-Hudi-tabel te overschrijven.

  1. Ga terug naar de AWS Glue Studio-console, wijzig de bron S3-locatie naar s3://noaa-ghcn-pds/csv/by_year/2023.csv, sla de taak op en voer deze uit.

upsert-gegevensbron

  1. Voer dezelfde Athena-query uit vanaf de Athena-console.

athena-query3
Nu zie je dat de vier records zijn bijgewerkt met de nieuwe records in 2023.

Als u nog meer toekomstige records heeft, werkt deze aanpak goed om nieuwe records in te voegen op basis van de Hudi-recordsleutel en Hudi-precombinatiesleutel.

Opruimen

Nu naar de laatste stap, het opruimen van de bronnen:

  1. De AWS Glue-database verwijderen hudi_native.
  2. Verwijder de AWS Glue-tabel ghcn.
  3. Verwijder de S3-objecten eronder s3://<Your S3 bucket name>/<Your S3 bucket prefix>/hudi_native/ghcn2022/.

Conclusie

Dit bericht liet zien hoe Hudi-datasets kunnen worden verwerkt met behulp van de visuele editor van AWS Glue Studio. Met de visuele editor van AWS Glue Studio kunt u taken schrijven terwijl u profiteert van data lake-indelingen en zonder dat u daar expertise voor nodig heeft. Als u opmerkingen of feedback heeft, kunt u deze in de opmerkingen achterlaten.


Over de auteurs

Noritaka Sekiyama is een Principal Big Data Architect in het AWS Glue-team. Hij is verantwoordelijk voor het bouwen van software-artefacten om klanten te helpen. In zijn vrije tijd fietst hij graag met zijn nieuwe racefiets.

Scott lang is een Front End Engineer in het AWS Glue-team. Hij is verantwoordelijk voor het implementeren van nieuwe functies in AWS Glue Studio. In zijn vrije tijd houdt hij ervan om met vrienden om te gaan en deel te nemen aan verschillende buitenactiviteiten.

Sean Ma is een Principal Product Manager in het AWS Glue-team. Hij heeft meer dan 18 jaar ervaring in het innoveren en leveren van zakelijke producten die de kracht van data voor gebruikers ontsluiten. Naast zijn werk houdt Sean van duiken en universiteitsvoetbal.

spot_img

Laatste intelligentie

spot_img