Недолго думая я решил воспользоваться облачным сервисом Google Cloud Dataproc ( https://cloud.google.com/dataproc/ ), который позволяет быстро настроить готовый кластер и запускать на нем задачи для Spark. Сразу надо сказать, что этот сервис платный, однако по программе Free Trial ( https://cloud.google.com/free-trial/ ) можно получить 300 долларов и таким образом поработать с Dataproc бесплатно (лично я свои бесплатные 300 долларов давно упустил, поэтому мне это всё стоило реальных денег). В бесплатной версии, правда, стоит ограничение в 8 виртуальных ядер, но и такой мини-кластер пригодится тем, у кого нет своего мощного домашнего компьютера.
Создать и настроить проект не составило труда (инструкции начинаются здесь: https://cloud.google.com/dataproc/setup-project ). Затем я создал bucket -- это место в Google Cloud Storage, где хранятся файлы проекта -- и залил туда данные для нашей задачи trainGraph и demography в папку sna_data (работать с bucket можно через веб-интерфейс или при помощи gsutil). Таким образом у меня получился URI gs://sna-hackaton-trunin/sna_data/, который надо использовать в качестве параметра задачи Baseline (sna_hackaton_trunin -- это уникальный ID моего бакета). Также залил туда собранный JAR файл gs://sna-hackaton-trunin/baseline_2.10-1.0.jar
При создании кластера я выбрал конфигурацию из 3 нод (master + 2 worker) на железе n1-standard-8 -- это четырехядерный Intel Xeon E5 с Hyper-Threading и 30Gb памяти. Можно было бы сэкономить и взять n1-highcpu-8 с 7.2Gb памяти, которой бы хватило для Baseline, но в тот момент я еще не думал о счёте... Дефолтная квота составляет 24 виртуальных ядра на кластер, поэтому такая конфигурация является максимальной. Если нужно больше -- надо запрашивать увеличение квоты. Все параметры моей конфигурации на скриншоте.
Задача запускается из веб интерфейса: указывается кластер, job type Spark, в сlass path и main jar прописываем ранее залитый в облако gs://sna-hackaton-trunin/baseline_2.10-1.0.jar, а в argument -- путь к нашим данным в облаке gs://sna-hackaton-trunin/sna_data/. Жмем submit и ждем три с половиной часа -- столько времент в моем случае работал Baseline (в случае использования Trial версии с ограничением в 8 ядер ждать придется дольше). Все временные файлы, включая счетчики общих друзей и конечный результат prediction сохраняются в нашем бакете в облаке, откуда их можно вытащить при помощи gsutil и переиспользовать в дальнейшем, чтобы не вычислять заново. После завершения вычислений нужно обязательно зайти в раздел VM instances на странице Compute Engine ( https://console.cloud.google.com/compute/instances ) и остановить работающие ноды -- иначе плата за их работу продолжит взыматься, даже если никакие Spark задачи не них не выполняются. Я не сразу это понял, и это стоило мне лишних 20 баксов.
Насчет стоимости сервиса... Крупный баннер на главной странице Dataproc обещает 1 цент за виртуальное ядро в час, но мелким шрифтом написано, что эта стоимость будет добавляться к обычной стоимости работы с виртуальными машинами и хранения данных, то есть в сумме выходит значительно дороже. Вот для примера скриншот счета за все мои эксперименты -- можете сами прикинуть, во сколько обойдется один запуск Baseline, учитывая что для этого нужно 3.5 часа работы трех нод n1-standard-8, то есть суммарно 630 минут.
https://blogs.msdn.microsoft.com/arsen/2016/02/09/resolving-spark-1-6-0-java-lang-nullpointerexception-not-found-value-sqlcontext-error-when-running-spark-shell-on-windows-10-64-bit/ Еще несколько распространенных проблем:
...Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев