Kuidas eksportida kogu Ethereumi plokiahelat CSV-sse 2 tunniga 10 dollari eest

Oma eelmises artiklis Ethereum Blockchaini eksportimine ja analüüsimine tutvustasin tööriista Ethereum ETL ja andsin samm-sammult juhiseid Ethereumi andmete eksportimiseks CSV-failidesse ja nende analüüsimiseks Amazon Athena ja QuickSightis (loe ka Ethereum Blockchaini Google BigQuery-s).

Selles artiklis näitan teile, kuidas kasutada AWS Data Pipeline'i ja AWS AutoScalingi eksportimisprotsessi paralleelistamiseks kümnete ja sadade eksemplaridega ning vähendada eksportimisaega tundideks või isegi minutiteks, hoides samal ajal kulud tänu EC2 Spot Instentsidele madalad.

Kogu protsess on jagatud neljaks etapiks:

  • AWS-i piiride suurendamine
  • Kohandatud AMI ettevalmistamine
  • Andmejuhtme loomine
  • Automaatse skaleerimise rühma loomine

AWS-i piiride suurendamine

AWS säilitab iga konto teenuslimiidid, et aidata tagada AWS-i ressursside saadavust ja minimeerida uute klientide arveldusriske. Mõni teenuse limiit tõuseb aja jooksul automaatselt, kui te AWS-i kasutate, kuigi enamus AWS-teenuseid nõuavad, et litsentsi suurendamist taotletakse käsitsi. See protsess võib võtta paar tundi või päeva.

Selle ülesande täitmiseks peate suurendama:

  • Objektide arv torujuhtmes torujuhtme kohta Limiit: 1000. Te peate seda suurendama ainult siis, kui soovite eksportida ühe torujuhtme kaudu rohkem kui 4 miljonit plokki.
  • EC2 kohapealsed juhtumid: 100. Kui teie konto on uus, suurendavad nad seda algul ainult 20-ni või madalamale.

Üksikasjalikud juhised limiitide suurendamiseks leiate siit: https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html

Kohandatud AMI ettevalmistamine

Data Pipeline'i jaoks kohandatud AMI nõuded on loetletud siin https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-custom-ami.html:

Kui kasutate Ubuntu, peate looma konto nimega ec2-user, järgides neid juhiseid: https://aws.amazon.com/premiumsupport/knowledge-center/new-user-accounts-linux-instance/.

Peate lisama ec2-kasutaja ka sudoers-faili. Avage terminaliaken ja tippige:

sudo visudo

Tippige faili allosas järgmine tekst:

ec2-kasutaja KÕIK = (KÕIK) NOPASSWD: KÕIK

Mõned Ethereum ETL-iga seotud kontrollid:

  • Veenduge, et süsteemi python 3.5 või uuem on installitud ja python3 binaarne on PATH-is.
  • kloon Ethereum ETL kuni / home / ec2-user / ethereum-etl
> git kloon https://github.com/medvedev1088/ethereum-etl
> cd ethereum-etl
> pip3 install -r nõuded.txt
  • Veenduge, et geth laadis alla plokid, mida soovite eksportida:
> kinnitage
> eth.syncing
{
  praegune plokk: 5583296,
  kõrgeim plokk: 5583377,
  teadaolevad riigid: 65750401,
  tõmmatud riigid: 65729512,
  algusblokk: 5268399
}
  • Veenduge, et geth on käivitamisel käivitatud. Lihtsaim viis on lisada see crontabisse:
> echo "nohup geth --cache = 1024 &"> ~ / geth / start.sh
> crontab -e
@reboot /home/ec2-user/geth/start.sh >> / home / ec2-user / geth / crontab.log 2> & 1
  • Laadige alla ja konfigureerige DataPipeline TaskRunner. Juhised leiate siit https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-how-task-runner-user-managed.html

Pärast jar-faili allalaadimist looge järgmise sisuga fail ~ / task-runner / start.sh:

nohup java -jar /home/ec2-user/task-runner/TaskRunner-1.0.jar --config /home/ec2-user/task-runner/credentials.json --workerGroup = ethereum-etl --region = us- east-1 --logUri = s3: //  / ülesande täitja / logid - ülesanded 1 ja

fail credentials.json peaks sisaldama teie juurdepääsu ja salajast võtit selle konto jaoks, millel on juurdepääs S3 kopale:

{"access-id": "MyAccessKeyID", "private-key": "MySecretAccessKey"}

Lisage see crontab:

crontab -e
@reboot /home/ec2-user/task-runner/start.sh >> / home / ec2-user / task-runner / crontab.log 2> & 1
  • Looge uus AMI ja pidage meeles selle ID. Seda kasutatakse järgmises etapis.

Andmejuhtme loomine

Torujuhtme loomiseks kasutasin Troposfääri https://github.com/cloudtools/troposphere, mis on Pythoni teek AWS CloudFormation kirjelduste loomiseks.

  • Kloonide Ethereumi eksporditoru:
> git kloon https://github.com/medvedev1088/ethereum-export-pipeline
> cd ethereum-export-pipeline
  • Redigeerige faili config.py ja muutke eksporditavaid plokivahemikke. Vaikimisi eksporditakse esimesed 5 miljonit plokki:
  • Loo CloudFormationi mallifail:
> python3 genereerima_ekspordi_pipeline_template.py - väljundi eksport_pipeline.template
  • Logige sisse CloudFormationi konsooli N.Virginia piirkonda https://console.aws.amazon.com/cloudformation/home?region=us-east-1
  • Looge uus virn, täpsustades loodud faili export_pipeline.template. Peate muutma kopa nime, kuhu CSV-failid üles laaditakse. Valikuliselt saate kohandada käsku Välja, nt. saate skripti osad eemaldada, kui peate eksportima ainult plokid, tehingud või ERC20 ülekanded.
  • Logige sisse N.Virginias asuvasse Data Pipeline'i konsooli https://console.aws.amazon.com/datapipeline/home ja veenduge, et torujuhe on loodud. Näete seda arhitektivaates.

Pärast torujuhtme loomist ootab töötajaid tegevuste käivitamine.

Automaatse skaleerimise rühma loomine

  • Logige sisse oma piirkonna AutoScalingi konsooli https://console.aws.amazon.com/ec2/autoscaling/home
  • Loo käivituskonfiguratsioon:
  • Valige eelmises etapis loodud AMI.
  • Valige t2.medium astme tüüp. (Nagu AusIV märkis siin https://www.reddit.com/r/ethdev/comments/8oyjz8/how_to_export_the_entire_ethereum_blockchain_to/ c5.large, võib olla parem valik, andke mulle sellest teada, kui olete seda proovinud)
  • Konfiguratsiooni üksikasjade lehel märkige ruut Request Spot Instances ja määrake maksimaalne hind, mida olete nõus maksma. See näitab ka valitud eksemplari tüübi hetkehinda. Spot-hind oli kolm korda madalam kui on-Demand-hind ajal, mil ma oma ASG-i lõin.
  • Valige turvarühm ja jätkake loomise viisardit.
  • Looge automaatse skaleerimise rühm:
  • Valige eelmises etapis loodud käivituskonfiguratsioon.
  • Määrake rühma suurus - mitu eksemplari soovite CSV-faile paralleelselt eksportida.
  • Jätkake viisardiga.

Kui ASG on loodud, näete seda vahekaardil Tegevuse ajalugu uute eksemplaride käivitamisel:

Võite kontrollida, kas teie Data Pipeline alustab toimingute käivitamist eksemplaride lehel Data Pipeline'i konsooli lehel Täitmise üksikasjad, pakkudes teile kõiki üksikasju ja logisid:

Iga esinemisjuht korraldab korraga 10 tegevust, kahjuks pole seda arvu kohandatav.

CSV-failid asuvad S3-ämbris, mille määrasite gaasijuhtme loomisel.

Pärast protsessi lõppu peate käsitsi eemaldama automaatse skaleerimise rühma ja Data Pipeline Stacki.

Võib-olla soovite CSV-d teisendada parkettiks, et optimeerida päringu toimimist. Juhised leiate siit: Ethereum ETL-failide teisendamine parkettiks

Loe ka:

  • Kuidas küsida BigQuery kõigi Ethereumi aadresside bilansse
  • Reaalajas toimuvad Ethereumi teated kõigile tasuta
  • Ethereum BigQuery'is: kuidas me selle andmestiku ehitasime
  • Jälgi meid Twitteris: https://twitter.com/EthereumETL