Në këtë postim ne do të vazhdojmë të punojmë për parashikimin e lidhjeve me grupin e të dhënave Twitch: ne do të eksportojmë të dhënat e grafikut nga grupi Neptune DB në një kovë S3 duke përdorur mjetin e eksportit të neptunit të ofruar nga AWS. Ne do të zgjedhim profilin 'neptune_ml' kur të krijojmë detyrën e eksportit të të dhënave dhe programi do të krijojë skedarin 'training-data-configuration.json' që do ta përdorim më vonë në linjë. Të dhënat e eksportuara do të jenë gati për kodimin e veçorive dhe përpunimin e të dhënave, që është hapi tjetër që kërkohet për parashikimin e lidhjes.
Lexoni këtu pjesën 1.
Ne fillojmë me të dhënat e grafikut që kemi në Neptun DB pasi ngarkojmë listat e kulmeve dhe skajeve duke përdorur API-në e ngarkimit të masës Neptune (siç përshkruhet në Pjesën 1 të këtij udhëzuesi).
Kulmet përfaqësojnë përdoruesit. Të gjitha kulmet përmbajnë të njëjtin grup vetish, dhe një kulm i vetëm duket kështu:
{<T.id: 1>: '153', <T.label: 4>: 'user', 'days': 1629, 'mature': True, 'views': 3615, 'partner': False}
Të gjitha skajet kanë të njëjtën etiketë ('ndjek'), çdo skaj lidh 2 përdorues. Një skaj i vetëm duket kështu:
{<T.id: 1>: '0', <T.label: 4>: 'follows', <Direction.IN: 'IN'>: {<T.id: 1>: '255', <T.label: 4>: 'user'}, <Direction.OUT: 'OUT'>: {<T.id: 1>: '6194', <T.label: 4>: 'user'}}
Qëllimi ynë është të eksportojmë të dhënat në mënyrë që të mund të përdoren në pjesën tjetër të tubacionit tonë të të dhënave: parapërpunimi dhe kodimi i veçorive.
Ne do të përdorim mjetin e eksportit të neptunit të ofruar nga AWS për të eksportuar të dhëna nga baza e të dhënave. Për të lejuar aksesin e shërbimeve në DB, ne do ta ekzekutojmë atë në një shembull EC2 brenda VPC ku është grupi DB i Neptunit. Programi do t'i marrë të dhënat nga DB, do t'i ruajë në ruajtje lokale (një vëllim EBS) dhe më pas do të ngarkojë të dhënat e eksportuara në S3.
Megjithëse AWS ofron një shabllon të Cloudformation që vendos një API private brenda VPC-së tuaj për të lejuar që procesi i eksportit të fillojë me një kërkesë HTTP, ne nuk do të përqendrohemi në këtë këtë herë. Meqenëse qëllimi ynë është të demonstrojmë se si funksionon tubacioni i të dhënave (dhe jo të konfigurojmë një API), ne thjesht do të përdorim konsolën e shembullit EC2 për të bashkëvepruar me mjetin e eksportit të neptunit. Meqë ra fjala, ato komanda të tastierës mund të automatizohen me AWS Systems Manager Run Command dhe Hapi Funksionet.
Le të krijojmë shembullin EC2 ku do të ekzekutojmë neptun-export. Për AMI, ne zgjedhim Ubuntu 24.04 LTS. Ne duhet të sigurohemi që grupi i Neptunit është i arritshëm nga shembulli EC2, kështu që ne do të krijojmë shembullin në të njëjtin VPC ku është grupi i Neptunit dhe do të konfigurojmë grupet e sigurisë për të lejuar trafikun e rrjetit midis shembullit dhe grupit. Ne gjithashtu duhet të bashkëngjisim një vëllim EBS me madhësi të mjaftueshme për të përmbajtur të dhënat e eksportuara. Për grupin e të dhënave që po punojmë, mjafton një vëllim prej 8 GB.
Ndërsa shembulli po fillon, ne duhet të krijojmë një rol IAM që lejon hyrjen e shkrimit në kovën e destinacionit S3, si dhe disa veprime RDS, siç tregohet në politikën më poshtë. Ndërsa deklarata e parë e politikës është e detyrueshme, e dyta nevojitet vetëm nëse eksportoni të dhëna nga një grup i klonuar. Eksportimi i të dhënave nga grupimet e klonuara do të diskutohet më vonë në këtë postim.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequiredPart", "Effect": "Allow", "Action": [ "rds:ListTagsForResource", "rds:DescribeDBInstances", "rds:DescribeDBClusters" ], "Resource": "*" }, { "Sid": "OptionalPartOnlyRequiredForExportingFromClonedCluster", "Effect": "Allow", "Action": [ "rds:AddTagsToResource", "rds:DescribeDBClusters", "rds:DescribeDBInstances", "rds:ListTagsForResource", "rds:DescribeDBClusterParameters", "rds:DescribeDBParameters", "rds:ModifyDBParameterGroup", "rds:ModifyDBClusterParameterGroup", "rds:RestoreDBClusterToPointInTime", "rds:DeleteDBInstance", "rds:DeleteDBClusterParameterGroup", "rds:DeleteDBParameterGroup", "rds:DeleteDBCluster", "rds:CreateDBInstance", "rds:CreateDBClusterParameterGroup", "rds:CreateDBParameterGroup" ], "Resource": "*" } ] }
Ju mund të lejoni qasjen vetëm në grupin e synuar (në vend të të gjitha grupimeve) duke redaktuar fushën "Burimet".
Roli duhet të ketë gjithashtu një politikë besimi që lejon EC2 të marrë rolin:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Pasi shembulli EC2 dhe roli të jenë gati, ne do t'ia bashkëngjisim rolin shembullit.
Më pas, ne duhet të instalojmë mjetin e eksportit të neptunit në shembull. Për ta bërë këtë, ne do të hyjmë në instancë dhe do të përdorim këto komanda për të instaluar JDK 8 dhe për të shkarkuar programin:
sudo apt update -y sudo apt install -y openjdk-8-jdk curl -O https://s3.amazonaws.com/aws-neptune-customer-samples/neptune-export/bin/neptune-export.jar
Tani që kemi përgatitur shembullin EC2, kovën e destinacionit S3 dhe kemi bashkangjitur rolin IAM që lejon hyrjen e shkrimit në kovën e destinacionit S3 në shembull, mund të fillojmë eksportimin e të dhënave. Ne do të përdorim këtë komandë për të nisur procesin, duke siguruar parametrat e kërkuar si një objekt JSON:
java -jar /home/ubuntu/neptune-export.jar nesvc \ --root-path /home/ubuntu/neptune-export \ --json '{ "command": "export-pg", "outputS3Path" : "s3://YOUR_TARGET_S3_BUCKET/neptune-export", "params": { "endpoint" : "YOUR_CLUSTER_ENDPOINT", "profile": "neptune_ml" } }'
Ne kemi përdorur vetëm parametrat e kërkuar këtu, por ju mund ta zgjeroni lehtësisht konfigurimin. Ju mund të zgjidhni se cilën pjesë të grafikut të eksportoni duke përdorur parametrin 'filtër': mund të zgjidhni nyjet, skajet dhe vetitë e tyre.
Nëse jeni duke eksportuar të dhëna nga një bazë të dhënash e drejtpërdrejtë, mund të përdorni parametrat " cloneCluster " dhe " cloneClusterReplicaCount " për ta bërë programin neptue-export të marrë një fotografi të bazës së të dhënave, të krijojë një grup të ri Neptun nga ajo fotografi, të vendosë kopje leximi dhe t'i përdorë ato për të eksportuar të dhënat. Duke bërë këtë, mund të siguroheni që baza e të dhënave të drejtpërdrejta të mos ndikohet nga ngarkesa shtesë nga eksportimi i të dhënave.
Lista e plotë e parametrave mund të gjendet këtu ( https://docs.aws.amazon.com/neptune/latest/userguide/export-parameters.html ).
Kur procesi i eksportit përfundon, neptun-export printon disa statistika duke përfshirë numrin e kulmeve dhe skajeve:
Source: Nodes: 7126 Edges: 70648 Export: Nodes: 7126 Edges: 70648 Properties: 28504 Details: Nodes: user: 7126 |_ days {propertyCount=7126, minCardinality=1, maxCardinality=1, recordCount=7126, dataTypeCounts=[Integer:7126]} |_ mature {propertyCount=7126, minCardinality=1, maxCardinality=1, recordCount=7126, dataTypeCounts=[Boolean:7126]} |_ views {propertyCount=7126, minCardinality=1, maxCardinality=1, recordCount=7126, dataTypeCounts=[Integer:7126]} |_ partner {propertyCount=7126, minCardinality=1, maxCardinality=1, recordCount=7126, dataTypeCounts=[Boolean:7126]} Edges: (user)-follows-(user): 70648
Dhe më pas ngarkon të dhënat e eksportuara në S3.
Le të shohim skedarët që krijohen në kovën e synuar S3:
Drejtoritë "nyjet" dhe "skajet" përmbajnë skedarë CSV me listat e nyjeve dhe skajeve që janë të ngjashme me atë që kemi përdorur në Pjesën 1 kur ngarkuam të dhëna. Për grafikët e mëdhenj, ka shumë skedarë, por grupi ynë i të dhënave është i vogël dhe ka vetëm një skedar në çdo drejtori. Ekziston edhe skedari train-data-configuration.json që do ta modifikojmë dhe përdorim në hapin tjetër të procesit tonë.
Nëse jeni duke bërë një eksportim një herë, tani është e sigurt të fshini shembullin EC2 dhe volumin EBS, pasi vetëm skedarët në kovën e synuar S3 do të përdoren në hapin tjetër. Përndryshe, thjesht mund të ndaloni shembullin EC2 për të shmangur tarifimin për kohën e papunë (do të tarifoheni përsëri për ruajtjen EBS nëse nuk e fshini atë).
Në këtë pikë ne kemi të dhënat e grafikut në S3 në formatin që mund të përdoret në hapin tjetër të procesit dhe jemi gati të bëjmë kodimin e veçorive dhe përpunimin e të dhënave, të cilat do të diskutohen në postimin tonë të ardhshëm.