Во оваа објава ќе продолжиме да работиме на предвидување на врски со базата на податоци Twitch: ќе ги извеземе податоците од графиконот од кластерот Neptune DB во кофа S3 користејќи ја алатката за извоз на нептун обезбедена од AWS. Ќе го избереме профилот „neptune_ml“ кога ќе ја креираме задачата за извоз на податоци, а алатката ќе ја создаде датотеката „training-data-configuration.json“ што ќе ја користиме подоцна во нафтоводот. Извезените податоци ќе бидат подготвени за кодирање на функции и обработка на податоци, што е следниот чекор потребен за предвидување на врската.
Прочитајте го првиот дел овде .
Започнуваме со податоците од графиконот што ги имаме во 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 за извоз на податоци од базата на податоци. За да дозволиме услужната програма да пристапи до 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. Треба да се увериме дека кластерот Нептун е достапен од примерокот EC2, така што ќе ја создадеме инстанцата во истиот VPC каде што е кластерот Нептун и ќе ги конфигурираме безбедносните групи да дозволуваат мрежниот сообраќај помеѓу инстанцата и кластерот. Исто така, треба да прикачиме волумен на EBS со доволна големина за да ги содржи извезените податоци. За сетот на податоци на кој работиме, доволно е волумен од 8 GB.
Додека инстанцата започнува, треба да создадеме улога на 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 и улогата се подготвени, ќе ја прикачиме улогата на примерокот.
Следно, треба да ја инсталираме алатката за извоз на нептун на примерокот. За да го направиме тоа, ќе се најавиме во примерокот и ќе ги користиме овие команди за да инсталираме 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 да направи слика од базата на податоци, да создаде нов кластер на Нептун од таа слика, да распореди реплики за читање и да ги користи за извоз на податоците. Со тоа, можете да бидете сигурни дека живата база на податоци не е засегната од дополнителното оптоварување од извезувањето на податоците.
Целосната листа на параметри може да се најде овде ( 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 во формат што може да се користи во следниот чекор од процесот, и подготвени сме да направиме кодирање на функции и обработка на податоци, за што ќе се дискутира во нашиот следен пост.