Šajā ziņā mēs turpināsim darbu pie saites prognozēšanas ar Twitch datu kopu: mēs eksportēsim diagrammas datus no Neptune DB klastera uz S3 kopu, izmantojot AWS nodrošināto neptune-export utilītu. Mēs izvēlēsimies profilu “neptune_ml”, kad veidosim datu eksportēšanas uzdevumu, un utilīta izveidos failu “training-data-configuration.json”, ko izmantosim vēlāk. Eksportētie dati būs gatavi līdzekļu kodēšanai un datu apstrādei, kas ir nākamā darbība, kas nepieciešama saišu prognozēšanai.
1. daļu lasiet šeit .
Mēs sākam ar diagrammu datiem, kas mums ir Neptune DB pēc virsotņu un malu sarakstu augšupielādes, izmantojot Neptune Bulk Loader API (kā aprakstīts šīs rokasgrāmatas 1. daļā).
Virsotnes apzīmē lietotājus. Visas virsotnes satur vienu un to pašu īpašību kopu, un viena virsotne izskatās šādi:
{<T.id: 1>: '153', <T.label: 4>: 'user', 'days': 1629, 'mature': True, 'views': 3615, 'partner': False}
Visām malām ir vienāda etiķete ('seko'), katra mala savieno 2 lietotājus. Viena mala izskatās šādi:
{<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'}}
Mūsu mērķis ir eksportēt datus, lai tos varētu izmantot nākamajā mūsu datu cauruļvada daļā: priekšapstrādē un funkciju kodēšanā.
Lai eksportētu datus no datu bāzes, mēs izmantosim AWS nodrošināto utilītu neptune-export . Lai utilīta varētu piekļūt DB, mēs to izpildīsim EC2 instancē VPC iekšpusē, kur atrodas Neptune DB klasteris. Lietderība saņems datus no DB, saglabās tos vietējā krātuvē (EBS sējumā) un pēc tam augšupielādēs eksportētos datus uz S3.
Lai gan AWS nodrošina mākoņformēšanas veidni, kas jūsu VPC izvieto privātu API, lai eksportēšanas procesu varētu sākt ar HTTP pieprasījumu, šoreiz mēs tam nepievērsīsimies. Tā kā mūsu mērķis ir parādīt, kā darbojas datu cauruļvads (nevis iestatīt API), mēs vienkārši izmantosim EC2 instances konsoli, lai mijiedarbotos ar neptune-export utilītu. Starp citu, šīs konsoles komandas var automatizēt, izmantojot AWS Systems Manager Run Command and Step Functions.
Izveidosim EC2 gadījumu, kurā darbosimies neptune-export. AMI mēs izvēlamies Ubuntu 24.04 LTS. Mums ir jāpārliecinās, ka Neptune klasteris ir sasniedzams no EC2 instances, tāpēc mēs izveidosim instanci tajā pašā VPC, kur atrodas Neptune klasteris, un konfigurēsim drošības grupas, lai atļautu tīkla trafiku starp instanci un kopu. Mums arī jāpievieno pietiekami liela EBS sējums, lai tajā būtu iekļauti eksportētie dati. Datu kopai, pie kuras strādājam, pietiek ar 8 GB apjomu.
Kamēr instancē sākas, mums ir jāizveido IAM loma, kas nodrošina rakstīšanas piekļuvi galamērķa S3 segmentam, kā arī dažas RDS darbības, kā parādīts tālāk esošajā politikā. Lai gan pirmais politikas paziņojums ir obligāts, otrais ir nepieciešams tikai tad, ja eksportējat datus no klonēta klastera. Datu eksportēšana no klonētajām kopām tiks apspriesta vēlāk šajā ziņojumā.
{ "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": "*" } ] }
Rediģējot lauku “Resurss”, varat atļaut piekļuvi tikai mērķa klasterim (nevis visām kopām).
Lomai ir jābūt arī uzticības politikai, kas ļauj EC2 uzņemties lomu:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Kad EC2 instance un loma būs gatava, mēs to pievienosim instancei.
Tālāk mums instancē jāinstalē utilīta neptune-export. Lai to izdarītu, mēs pieteiksimies instancē un izmantosim šīs komandas, lai instalētu JDK 8 un lejupielādētu utilītu:
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
Tagad, kad esam sagatavojuši EC2 instanci, galamērķa S3 segmentu, un pievienojuši IAM lomu, kas instancē ļauj rakstīt piekļuvi galamērķa S3 segmentam, mēs varam sākt datu eksportēšanu. Mēs izmantosim šo komandu, lai sāktu procesu, nodrošinot nepieciešamos parametrus kā JSON objektu:
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" } }'
Šeit mēs izmantojām tikai nepieciešamos parametrus, taču jūs varat viegli paplašināt konfigurāciju. Varat izvēlēties, kuru diagrammas daļu eksportēt, izmantojot parametru 'filtrs': varat atlasīt mezglus, malas un to īpašības.
Ja eksportējat datus no reāllaika datu bāzes, varat izmantot parametrus ' cloneCluster ' un ' cloneClusterReplicaCount ', lai utilīta neptue-export veiktu datu bāzes momentuzņēmumu, izveidotu jaunu Neptune klasteru no šī momentuzņēmuma, izvietotu lasīšanas replikas un izmantotu tos datu eksportēšanai. To darot, varat pārliecināties, ka tiešo datu bāzi neietekmē papildu slodze no datu eksportēšanas.
Pilnu parametru sarakstu var atrast šeit ( https://docs.aws.amazon.com/neptune/latest/userguide/export-parameters.html ).
Kad eksportēšanas process ir pabeigts, neptune-export izdrukā dažus statistikas datus, tostarp virsotņu un malu skaitu:
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
Un tad tas augšupielādē eksportētos datus uz S3.
Apskatīsim failus, kas tiek izveidoti mērķa S3 segmentā:
Direktoriji “mezgli” un “malas” satur CSV failus ar mezglu un malu sarakstiem, kas ir līdzīgi tam, ko izmantojām 1. daļā, augšupielādējot datus. Lieliem grafikiem ir vairāki faili, taču mūsu datu kopa ir maza, un katrā direktorijā ir tikai viens fails. Ir arī fails training-data-configuration.json , ko mēs rediģēsim un izmantosim nākamajā mūsu procesa darbībā.
Ja veicat vienreizēju eksportēšanu, tagad varat droši dzēst EC2 gadījumu un EBS sējumu, jo nākamajā darbībā tiks izmantoti tikai faili mērķa S3 segmentā. Pretējā gadījumā varat vienkārši apturēt EC2 gadījumu, lai izvairītos no maksas par dīkstāves laiku (no jums joprojām būs jāmaksā par EBS krātuvi, ja vien to neizdzēsīsit).
Šobrīd mums ir diagrammas dati S3 formātā, ko var izmantot procesa nākamajā darbībā, un mēs esam gatavi veikt funkciju kodēšanu un datu apstrādi, kas tiks apspriesta mūsu nākamajā ziņojumā.