Как да експортирате целия Blockchain Ethereum в CSV за 2 часа за 10 долара

В предишната си статия Експорт и анализ на Ethereum Blockchain въведох инструмента Ethereum ETL и предоставих стъпка по стъпка инструкции за експортиране на данни от Ethereum в CSV файлове и анализирането им в Amazon Athena и QuickSight (прочетете също Ethereum Blockchain в Google BigQuery).

В тази статия ще ви покажа как да използвате AWS Data Pipeline и AWS AutoScaling за паралелизиране на процеса на експортиране до десетки и стотици инстанции и намаляване на времето за експортиране до часове или дори минути, като същевременно поддържате разходите ниски благодарение на EC2 Spot Instances.

Целият процес е разделен на 4 стъпки:

  • Увеличаване на AWS границите
  • Подготовка на персонализиран AMI
  • Създаване на тръбопровод за данни
  • Създаване на група за автоматично мащабиране

Увеличаване на AWS граници

AWS поддържа лимити за обслужване на всеки акаунт, за да помогне за гарантиране на наличността на AWS ресурси, както и за свеждане до минимум на рисковете за фактуриране за нови клиенти. Някои лимити на услуги се повишават автоматично с течение на времето, докато използвате AWS, въпреки че повечето AWS услуги изискват лимитът да се увеличава ръчно. Този процес може да отнеме няколко часа или дни.

За тази задача ще трябва да увеличите:

  • Обекти на лимит на тръбопровод в тръбопровод за данни: 1000. Трябва да го увеличите само ако искате да експортирате повече от 4 милиона блока в един тръбопровод.
  • Примери за място на EC2: 100. Ако акаунтът ви е нов, те ще го увеличат само до 20 или по-малко.

Можете да намерите подробни инструкции как да увеличите лимитите тук https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html

Подготовка на персонализиран AMI

Изискванията за персонализиран AMI за тръбопровод за данни са изброени тук https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-custom-ami.html:

Ако използвате Ubuntu, ще трябва да създадете акаунт с име ec2-потребител, като следвате тези инструкции https://aws.amazon.com/premiumsupport/knowledge-center/new-user-accounts-linux-instance/.

Вие също ще трябва да добавите ec2-потребител към файла sudoers. Отворете прозореца на терминала и въведете:

sudo visudo

В долната част на файла въведете следното:

ec2-потребител ALL = (ALL) NOPASSWD: ALL

Няколко проверки, свързани с Ethereum ETL:

  • Уверете се, че python 3.5 или по-висока версия е инсталиран в системата и python3 двоичен е в PATH.
  • клонирайте Ethereum ETL към / home / ec2-потребител / ethereum-etl
> git клониране https://github.com/medvedev1088/ethereum-etl
> cd ethereum-etl
> pip3 install -r изисквания.txt
  • Уверете се, че geth изтегли блоковете, които искате да експортирате:
> geth прикачване
> et.синсиране
{
  текущ блок: 5583296,
  най-висок блок: 5583377,
  известниСтати: 65750401,
  издърпаниСтати: 65729512,
  startBlock: 5268399
}
  • Уверете се, че geth е стартиран при стартиране. Най-простият начин е да го добавите към crontab:
> ехо "nohup geth --cache = 1024 &"> ~ / geth / start.sh
> кронтаб -е
@reboot /home/ec2-user/geth/start.sh >> / home / ec2-потребител / geth / crontab.log 2> & 1
  • Изтеглете и конфигурирайте DataPipeline TaskRunner. Инструкциите можете да намерите тук https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-how-task-runner-user-managed.html

След като изтеглите jar файла, създайте ~ / 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: //  / task-runner / logs --задачи 1 &

файлът на ententials.json трябва да съдържа вашия достъп и секретен ключ за акаунта, който има достъп до кофата S3:

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

Добавете го в crontab:

кронтаб -е
@reboot /home/ec2-user/task-runner/start.sh >> / home / ec2-user / task-runner / crontab.log 2> & 1
  • Създайте нов AMI и запомнете неговия идентификационен номер. Той ще бъде използван в следващата стъпка.

Създаване на тръбопровод за данни

За създаването на тръбопровода използвах Troposphere https://github.com/cloudtools/troposphere, която е библиотека на Python за създаване на описания на AWS CloudFormation.

  • Клонен ефириев тръбопровод за износ:
> git клониране https://github.com/medvedev1088/ethereum-export-pipeline
> cd ethereum-export-pipeline
  • Редактирайте файла config.py и модифицирайте блоковите диапазони, които искате да експортирате. По подразбиране първите 5 милиона блока ще бъдат експортирани:
  • Генериране на файл с шаблон на CloudFormation:
> python3 create_export_pipeline_template.py --output export_pipeline.template
  • Влезте в конзолата CloudFormation в региона на N.Virginia https://console.aws.amazon.com/cloudformation/home?region=us-east-1
  • Създайте нов стек, като посочите генерирания файл export_pipeline.template. Ще трябва да промените името на кофата, където ще се качват CSV файлове. По желание можете да персонализирате полето Command, напр. можете да премахнете части от скрипта, ако трябва само да експортирате блокове, транзакции или ERC20 преводи.
  • Влезте в конзолата Data Pipeline в N.Virginia https://console.aws.amazon.com/datapipeline/home и се уверете, че тръбопроводът е създаден. Можете да го видите в архитектурния изглед.

След като създадете тръбопровода, работниците ще чакат да започнат дейностите.

Създаване на група за автоматично мащабиране

  • Влезте в конзолата за автоматично скалиране във вашия регион https://console.aws.amazon.com/ec2/autoscaling/home
  • Създайте конфигурация за стартиране:
  • Изберете AMI, който сте създали на предишната стъпка.
  • Изберете тип инстанция t2.medium. (Както AusIV отбеляза тук https://www.reddit.com/r/ethdev/comments/8oyjz8/how_to_export_the_entire_ethereum_blockchain_to/ c5.large може да е по-добър избор, уведомете ме, ако сте го пробвали)
  • На страницата с подробности за конфигурацията поставете отметка в квадратчето Искане на инстанции на място и посочете максималната цена, която сте готови да платите. Също така ви показва текущата спот цена за избрания тип екземпляр. Цената на Spot беше 3 пъти по-ниска от цената по поръчка по времето, когато създадох ASG.
  • Изберете групата за сигурност и продължете с съветника за създаване.
  • Създайте група за автоматично мащабиране:
  • Изберете Конфигурация за стартиране, която сте създали на предишната стъпка.
  • Укажете размера на групата - колко екземпляра искате да експортирате CSV паралелно.
  • Продължете с съветника.

След като ASG е създаден, можете да го видите как стартира нови екземпляри в раздела История на активността:

Можете да проверите дали Data Pipeline започва да изпълнява дейностите по екземплярите в страницата с подробности за изпълнението в конзолата Data Pipeline, като ви предоставя всички подробности и регистрационни файлове:

Всеки екземпляр ще изпълнява 10 дейности наведнъж, за съжаление този номер не е адаптивен.

CSV файловете ще бъдат в кофата S3, която сте посочили при създаването на тръбопровода.

Ще трябва ръчно да премахнете групата за автоматично мащабиране и стека от данни за тръбопровода след приключване на процеса.

Може да искате да конвертирате CSV файлове в паркет, за да оптимизирате изпълнението на заявките. Можете да намерите инструкциите тук: Преобразуване на Ethereum ETL файлове в паркет

Прочетете също:

  • Как да запитвате баланси за всички адреси на Ethereum в BigQuery
  • Известия Ethereum в реално време за всички безплатно
  • Ethereum в BigQuery: как изградихме този набор от данни
  • Следвайте ни в Twitter: https://twitter.com/EthereumETL