Այս գրառման մեջ մենք կշարունակենք աշխատել Twitch տվյալների բազայի հետ կապի կանխատեսման վրա. մենք կարտահանենք գրաֆիկի տվյալները Neptune DB կլաստերից դեպի S3 դույլ՝ օգտագործելով AWS-ի կողմից տրամադրված neptune-export օգտակար ծրագիրը: Մենք կընտրենք «neptune_ml» պրոֆիլը, երբ ստեղծենք տվյալների արտահանման առաջադրանքը, և կոմունալ ծրագիրը կստեղծի «training-data-configuration.json» ֆայլը, որը մենք հետագայում կօգտագործենք խողովակաշարում: Արտահանված տվյալները պատրաստ կլինեն գործառույթների կոդավորման և տվյալների մշակման համար, ինչը հաջորդ քայլն է, որը անհրաժեշտ է հղումների կանխատեսման համար:
1-ին մասը կարդացեք այստեղ ։
Մենք սկսում ենք գրաֆիկական տվյալներից, որոնք մենք ունենք Neptune DB-ում, գագաթների և եզրերի ցուցակները վերբեռնելուց հետո, օգտագործելով Neptune Bulk Loader API-ն (ինչպես նկարագրված է այս ուղեցույցի 1-ին մասում):
Գագաթները ներկայացնում են օգտվողներին: Բոլոր գագաթները պարունակում են հատկությունների նույն շարքը, և մեկ գագաթն ունի հետևյալ տեսքը.
{<T.id: 1>: '153', <T.label: 4>: 'user', 'days': 1629, 'mature': True, 'views': 3615, 'partner': False}
Բոլոր եզրերն ունեն նույն պիտակը («հետևում է»), յուրաքանչյուր ծայրը կապում է 2 օգտագործողի: Մեկ եզրն ունի հետևյալ տեսքը.
{<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'}}
Մեր նպատակն է արտահանել տվյալները, որպեսզի դրանք կարողանան օգտագործվել մեր տվյալների խողովակաշարի հաջորդ մասում՝ նախնական մշակում և գործառույթների կոդավորում:
Մենք կօգտագործենք AWS-ի կողմից տրամադրված neptune-export ծրագիրը տվյալների բազայից տվյալների արտահանման համար: Կոմունալ ծառայությանը մուտք դեպի DB թույլ տալու համար մենք այն կգործարկենք EC2 օրինակով VPC-ի ներսում, որտեղ գտնվում է Neptune DB կլաստերը: Կոմունալ ծրագիրը կստանա տվյալները DB-ից, կպահի դրանք տեղական պահեստում (EBS ծավալ), այնուհետև կվերբեռնի արտահանված տվյալները S3:
Չնայած AWS-ը տրամադրում է Cloudformation ձևանմուշ, որը տեղադրում է մասնավոր API ձեր VPC-ի ներսում՝ թույլ տալու արտահանման գործընթացը սկսել HTTP հարցումով, մենք այս անգամ չենք կենտրոնանա դրա վրա: Քանի որ մեր նպատակն է ցույց տալ, թե ինչպես է աշխատում տվյալների խողովակաշարը (և ոչ թե ստեղծել API), մենք պարզապես կօգտագործենք EC2 օրինակի վահանակը՝ նեպտուն-արտահանման օգտակար ծառայության հետ փոխգործակցելու համար: Ի դեպ, կոնսոլի այդ հրամանները կարող են ավտոմատացվել AWS Systems Manager Run Command-ի և Step Functions-ի միջոցով:
Եկեք ստեղծենք EC2 օրինակը, որի վրա մենք կգործարկենք նեպտուն-արտահանումը: AMI-ի համար մենք ընտրում ենք Ubuntu 24.04 LTS: Մենք պետք է համոզվենք, որ Neptune կլաստերը հասանելի է EC2 օրինակից, այնպես որ մենք կստեղծենք օրինակը նույն VPC-ում, որտեղ գտնվում է Neptune կլաստերը, և մենք կկազմաձևենք անվտանգության խմբերը, որպեսզի թույլ տան ցանցային տրաֆիկը օրինակի և կլաստերի միջև: Մենք նաև պետք է կցենք բավարար չափի EBS ծավալ՝ արտահանվող տվյալները պարունակելու համար: Տվյալների հավաքածուի համար, որի վրա մենք աշխատում ենք, բավական է 8 ԳԲ ծավալը:
Մինչ օրինակը սկսվում է, մենք պետք է ստեղծենք IAM դեր, որը թույլ է տալիս գրելու մուտք դեպի նպատակակետ S3 դույլ, ինչպես նաև որոշ RDS գործողություններ, ինչպես ցույց է տրված ստորև ներկայացված քաղաքականության մեջ: Թեև քաղաքականության առաջին հայտարարությունը պարտադիր է, երկրորդը անհրաժեշտ է միայն այն դեպքում, եթե դուք տվյալներ արտահանում եք կլոնավորված կլաստերից: Կլոնավորված կլաստերներից տվյալների արտահանումը կքննարկվի ավելի ուշ այս գրառման մեջ:
{ "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": "*" } ] }
Դուք կարող եք թույլ տալ մուտք գործել միայն թիրախային կլաստերի (բոլոր կլաստերների փոխարեն)՝ խմբագրելով «Ռեսուրս» դաշտը:
Դերը պետք է ունենա նաև վստահության քաղաքականություն, որը թույլ կտա EC2-ին ստանձնել այդ դերը.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Երբ EC2 օրինակը և դերը պատրաստ լինեն, մենք դերը կկցենք օրինակին:
Հաջորդը, մենք պետք է օրինակի վրա տեղադրենք neptune-export ծրագիրը: Դա անելու համար մենք մուտք գործենք օրինակ և կօգտագործենք այս հրամանները JDK 8-ը տեղադրելու և կոմունալ ծրագիրը ներբեռնելու համար.
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
Այժմ, երբ մենք պատրաստել ենք EC2 օրինակը՝ նպատակակետ S3 դույլը, և IAM-ին կցել ենք այն դերը, որը թույլ է տալիս մուտք գործել դեպի նպատակակետ S3 դույլ, մենք կարող ենք սկսել տվյալների արտահանումը: Մենք կօգտագործենք այս հրամանը՝ գործընթացը սկսելու համար՝ ապահովելով անհրաժեշտ պարամետրերը որպես 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" } }'
Մենք այստեղ օգտագործել ենք միայն պահանջվող պարամետրերը, բայց դուք հեշտությամբ կարող եք ընդլայնել կազմաձևը: Դուք կարող եք ընտրել, թե գրաֆիկի որ մասն եք արտահանում, օգտագործելով «ֆիլտր» պարամետրը. կարող եք ընտրել հանգույցներ, եզրեր և դրանց հատկությունները:
Եթե դուք տվյալներ եք արտահանում կենդանի տվյալների բազայից, կարող եք օգտագործել « cloneCluster » և « cloneClusterReplicaCount » պարամետրերը, որպեսզի neptue-export utility-ը նկարի տվյալների բազան, ստեղծի նոր Նեպտունի կլաստեր այդ նկարից, տեղակայի կարդալու կրկնօրինակները և օգտագործի դրանք տվյալների արտահանման համար: Դրանով դուք կարող եք համոզվել, որ տվյալների արտահանման լրացուցիչ բեռը չի ազդի կենդանի տվյալների բազայի վրա:
Պարամետրերի ամբողջական ցանկը կարող եք գտնել այստեղ ( https://docs.aws.amazon.com/neptune/latest/userguide/export-parameters.html ):
Երբ արտահանման գործընթացն ավարտված է, neptune-export-ը տպում է որոշ վիճակագրություն, ներառյալ գագաթների և եզրերի քանակը.
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
Եվ հետո այն բեռնում է արտահանված տվյալները S3:
Եկեք նայենք այն ֆայլերին, որոնք ստեղծվում են թիրախային S3 դույլով.
«Հանգույցներ» և «եզրեր» գրացուցակները պարունակում են CSV ֆայլեր՝ հանգույցների և եզրերի ցուցակներով, որոնք նման են այն բանին, ինչ մենք օգտագործել ենք Մաս 1-ում, երբ տվյալները վերբեռնել ենք: Մեծ գրաֆիկների համար կան մի քանի ֆայլեր, բայց մեր տվյալների հավաքածուն փոքր է, և յուրաքանչյուր գրացուցակում կա ընդամենը մեկ ֆայլ: Կա նաև training-data-configuration.json ֆայլը, որը մենք կխմբագրենք և կօգտագործենք մեր գործընթացի հաջորդ քայլում:
Եթե դուք կատարում եք մեկանգամյա արտահանում, ապա այժմ ապահով է ջնջել EC2 օրինակը և EBS ծավալը, քանի որ հաջորդ քայլում կօգտագործվեն միայն թիրախային S3 դույլի ֆայլերը: Հակառակ դեպքում, դուք կարող եք պարզապես դադարեցնել EC2 օրինակը, որպեսզի խուսափեք պարապ ժամանակի համար գանձվելուց (դուք դեռ կգանձեք EBS պահեստավորման համար, քանի դեռ չեք ջնջել այն):
Այս պահին մենք ունենք գրաֆիկի տվյալները S3-ում այն ձևաչափով, որը կարող է օգտագործվել գործընթացի հաջորդ քայլում, և մենք պատրաստ ենք կատարել գործառույթների կոդավորում և տվյալների մշակում, որոնք կքննարկվեն մեր հաջորդ գրառման մեջ: