Во. Позавчера пришли, наконец, оценки. Чему несказанно рада:
Ну и по такому случаю, наконец-то:
Как обычно, картинки кликабельны и ведут на страницы моих результатов. На всякий случай, отчёты про остальные курсы специализации - Cloud Computing Concepts
Part 1 и
Part 2,
Cloud Computing Applications и
Cloud Networking. И, если кому интересно - налейте себе напитков, откиньтесь на спинку кресла и расслабьтесь. Сейчас будет много букв про то, КАК это было.
Ну, что я могу сказать - специализация воистину ядрёна и хардкорна, начиная с самого первого курса и заканчивая вот этим самым финальным проектом. Задание на проект, если вкратце - поднять вычислительный кластер на Amazon Web Systems и обсчитать на нём данные по американским транспортным БД за 20 лет (если вкратце - статистику задержек отправления и прибытия авиарейсов). Первая часть задания - обсчитать данные пакетно, вторая - в потоковом режиме (используя результаты с первой части для верификации). И, поскольку здесь никто ничего не "разжёвывал" и никаких начальных "скелетов" кода и настроенного ПО не давал - я скажу вам, это был лютый, лютейший хардкор. Без шуток - я на Курсере много чего повидала, но это было самое трудозатратное из всего, во что я ввязывалась.
Проблема, собственно, была одна, но достаточно увесистая. И имя ей - КОММУНИКАЦИЯ. Да, вот так, болдом и капсом. Не то чтобы совсем "кошка бросила котят" и далее по тексту - но, скажем так, на прочих курсах если и делались какие-то изменения в повестке дня, то 1) они делались не в последний момент 2) о них хотя бы сообщалось каждому по электронной почте. А тут хватало ВНЕЗАПНЫХ и не очень приятных сюрпризов, о которых узнавали только по заходу на сайт.
Например, изначально программа планировалась такая: почти 3 недели на получение ништяков от Amazon, настройку Hadoop-кластера, очистку исходных данных и обсчёт их в пакетном режиме посредством самого Hadoop. Потом ещё две недели на стриминг в Storm и пакетную обработку данных в Spark. В итоге как Amazon местами протормозил (мою заявку они обработали почти за неделю, например, а у кого-то и две недели тянули резину), так и обкатка кластера тоже оказалась не всегда простым делом (как это было - раскажу чуть дальше). В общем, ВНЕЗАПНО возникавших вопросов по интеграции хватало, и на какие-то мелкие вещи убивалось неприлично много времени. Стало ясно, что в таком темпе группа оно точно не потянет.
В итоге решили сделать так: чуть увеличили срок на Hadoop, Storm убрали вообще (от меня: туда ему и дорога), а вместо него сказали запилить Spark Streaming, можно напрямую, но лучше всего - через Apache Kafka. И всё бы ничего - но об этом написали только на сайте. Нет, на почту ничего НЕ РАЗОСЛАЛИ. Мне, в общем-то, повезло - поскольку информации от преподавателей было крайне немного, я активно общалась с народом на форумах в стихийно сколотившихся study groups. Поэтому апдейты на сайте курса я худо-бедно видела. А вот те, кто были слишком заняты и работали в одиночку (я тоже так делала на немалом количестве курсов) временами обнаруживали весьма неприятные для себя сюрпризы. "КАААААК это - в Spark стриминг впилить? Было же batch processing!!!111" - практически дословная цитата с форума за неделю до сдачи второго задания. Сочувствую этому парню, честно.
По сравнению с этим приколы типа "обещать sample queries для прогона по данным в видео и отчётах, но вывесить их за день до изначального дедлайна и одновременно продлить дедлайн на неделю (а я, например, уже сделала видео по Hadoop, и переделывать его не горела желанием!) - фигня и мелочи, но я, тем не менее, слегка ругнулась на форумах, дабы получить официальный ответ, что видео переделывать не надо, достаточно включить результаты этих запросов в отчёт. В общем, хоть задачи и инфраструктура хороши и красивы, коммуникация временами действительно хромала.
Ну да ладно. Расскажу теперь о том, как эти задачи решала лично я.
Я предпочла "не искать добра от добра" и подняла с нуля четыре EC2-инстанса, на которых раскатала кластер Hadoop и Cassandra. По гайдам из интернета при понимании идеологии проекта это оказалось не так уж и сложно, меня больше пугали, что "уууу, хадуп поставить - это ж ужас". Я так скажу - ужас оно тогда, когда просто хочешь кнопочку "сделать зашибись", а вникать в YARN с его контейнерами, распределителями ресурсов, node manager-ами и application master-ами не хочешь. Но как раз матчасть того, как это всё работает, в лекциях очень даже была, так что особых проблем не вызвало. В выборе конкретного решения на Hadoop тоже не ограничивали - поэтому кто-то, как я, строил кластер сам, кто-то использовал амазоновские Elastic Map Reduce, Simple Storage Service и DynamoDB, кто-то писал на Java по туториалам, кто-то копал в сторону других языков и библиотек поверх Hadoop (я, например, видела в peer grading первой части одну работу с PyJob и ещё одну с запросами на Hive).
Сама я первую часть (Hadoop)
писала на Java "вручную" - поскольку дедлайны были весьма жёсткими, тоже решила "не искать добра от добра" и использовать то, что мне хоть как-то известно, чтобы не напороться на какие-то внезапные нюансы интеграции. На Джаву, конечно, плевалась люто - уж больно она "квадратно-гнездовая" (и, нет, я не устану это повторять) - но, опять же, мне в целях минимизации рисков хотелось основываться на имевшихся туториалах и пособиях, чтобы решить задачу в срок гарантированно. Вторую часть (Spark) - конечно же,
писала на Scala, благо и один из профессоров на CCA её советовал, и просто оно там смотрится красивым органичным решением в лучших традициях функционального программирования. По такому случаю, кстати, наконец-то дошли руки осилить
Programming in Scala - если уж я пишу не учебные задачки для автогрейдера с других курсов, а код, который реально будут смотреть люди (и который я, возможно, в будущем предъявлю как пример своего работающего проекта на этих технологиях) - в моих интересах сделать код хотя бы минимально идиоматичным и "Scala way". В общем, я считаю, учитыва всё вышенаписанное - по знаниям и скиллам прокачалась неплохо.
Во избежание читерства помимо текстового отчёта и (опциональных) примеров кода также надо было сделать видео-демки, где показать работу системы непосредственно "в процессе". Получилось как-то так:
Click to view
(Hadoop, Cassandra)
Click to view
(Spark, Kafka, Cassandra)
Да, я знаю, что некоторые вещи всё же лучше было сделать по-другому (например, не крутить продюсеров и консьюмеров потоковых данных на одних и тех же инстансах) - но вот за этим и нужны такие проекты, чтобы набить собственные шишки и получить непосредственный практический опыт. И, да, вот это всё - это мои вечера, обеденные перерывы и временами даже бессонные ночи, всё же сроки были весьма жёсткими, а задачи весьма немаленькими. Так что адреналина хватало с лихвой. Но я ни в коем разе не жалею, что во всё это ввязалась. Это инвестиция, которая окупается как в плане непосредственной материальной отдачи, так и в плане "пиара и нетворкинга" - и, конечно же, в плане полезных для дальнейшего профессионального опыта знаний. Ну сами посудите, заплатив за всю специализацию в сумме 250 долларов, я получила:
- Суммарно 400 долларов (в них входят 50 баксов на CCA) на эксперименты на Amazon Web Systems. Из них по факту потратила всего сотню, ибо большую часть непосредственной разработки вела локально - ну не дура же я, чтобы отказываться от студенческой лицензии на IntelliJ IDEA Ultimate? - и в итоге 300 у меня на настоящий момент ещё осталось (и я, ЧСХ, уже знаю, на какое давно хотевшееся дело их употребить). Если бы я изучала всё это сама с нуля - я бы почти наверняка потратила больше, чем заплатила, как на литературу, так и на многочисленные пробы и ошибки на Amazon или другой облачной платформе. А без лекций и раздаточных материалов ошибок было бы много!
- В разы прокачанный по интересующим меня кейвордам и контактам профиль на LinkedIn. Поскольку я активно участвовала в обсуждениях на форумах - как спрашивала о помощи, так и помогала другим страждущим - образовалось некоторое количество course-mates, в общем и целом понявших, кто я и что я. Ну и, в отличие от андроидной специализации, тут никто свои имена на видео не прятал - так что те, кто оценивали мою работу, тоже знали, чего и как. Вот и надобавлялись с народом в друзья, раздали друг другу пачку endorsement-ов (и поверьте мне на слово, если человек дожил до конца этой специализации - он их на 100% заслужил). Теперь у меня профиль как-то даже и не стыдно эйчарам в случае чего показывать, там кейворды Cloud Computing, Distributed Systems и Apache Spark поднялись в списке скиллов заметно выше унылых и убогих jQuery и PHP :) А народ из контакт-листа каждый день постит немало интересных ссылок - в кои веки интересная френдлента, а не ваше политотное дерьмо из фейсбука!
- Главное - знания же! Самое волшебное и офигенное! И реальный практический опыт создания, конфигурации и запуска реальной распределённой системы, обсчитывающей достаточно немаленький объём данных! Как минимум - повод предложить свои услуги для более интересных задач на текущей работе. Если не получится - в конце концов, список доступных вакансий с такими скиллами в списке пререквизитов тоже весьма неплох. Правда, конечно, вдобавок к чисто техническим скиллам настройки и программирования было бы невредно подтянуть знания в статистике и аналитике (читать как: Олька, зря ты прогуливала статистику в двух своих прошлых учебных заведениях, гыгы) - хороший повод добавить соответствующие курсы в watchlist и открыть пару книг по теме.
В общем, ИМХО, затея по крайней мере для меня окупилась с лихвой. Так что, дамы и господа, несмотря ни на что, следующие запуски специализации всем всячески рекомендую, если вам интересна эта тема. Да, это заставит вас попотеть, начиная с самого первого курса и заканчивая финальным проектом. Но отдача весьма и весьма приятна. Пусть хороших и грамотных специалистов по "облакам" будет больше!