Отново здравейте! Заглавието на статията говори само за себе си. В навечерието на старта на курса предлагаме да разберем кой всъщност са дата инженерите. В статията има много полезни връзки. Приятно четене.

Просто ръководство за това как да уловите вълната на Data Engineering и да не позволите да ви затегне в бездната.
Създава се впечатление, че в днешно време всеки иска да стане дата учен (Data Scientist). Но какво ще кажете за Data Engineering (инженерия на данни)? По същество, това е вид хибрид между дата аналитик и дата учен; дата инженерът обикновено отговаря за управлението на работните процеси, конвейерите на обработка и ETL процесите. Поради важността на тези функции, в момента това е поредният популярен професионален жаргон, който активно набира популярност.
Високата заплата и огромният търсене са само малка част от това, което прави тази работа изключително привлекателна! Ако искате да се присъедините към редиците на героите, никога не е късно да започнете да учите. В този пост събрах цялата необходима информация, за да ви помогна да направите първите стъпки.
Така че, нека започнем!
Какво е Data Engineering?
Честно казано, няма по-добро обяснение от това:
„Ученият може да открие нова звезда, но не може да я създаде. Той ще трябва да помоли инженера да го направи вместо него.“
–Гордон Линдсей Глегг
Така че, ролята на дата инженер е достатъчно значима.
Както подсказва името, инженерията на данни е свързана с данните, а именно с тяхното доставяне, съхранение и обработка. Съответно, основната задача на инженерите е да осигурят надеждна инфраструктура за данни. Ако погледнем йерархията на нуждите в ИИ, инженерията на данни заемa първите 2–3 етапа: събиране, преместване и съхранение, подготовка на данни.

С какво се занимава дата инженерът?
С появата на големи данни, сферата на отговорността се е променила драстично. Ако по-рано тези експерти пишеха големи SQL заявки и прехвърляха данни с помощта на инструменти като Informatica ETL, Pentaho ETL, Talend, сега изискванията към дата инженерите са се увеличили.
Повечето компании с отворени позиции за дата инженер предявяват следните изисквания:
- Отлично познание по SQL и Python.
- Опит с облачни платформи, по-специално Amazon Web Services.
- Предпочитателно е познание по Java/Scala.
- Доброто разбиране на SQL и NoSQL бази данни (моделиране на данни, съхранение на данни).
Имайте предвид, че това е само основното. От този списък можем да заключим, че инженерите по данни са специалисти в разработката на софтуер и бекенд.
Например, ако компанията започне да генерира голямо количество данни от различни източници, вашата задача като инженер по данни е да организирате събирането на информация, нейната обработка и съхранение.
Списъкът с инструментите, използвани в този случай, може да варира; всичко зависи от обема на данните, скоростта на тяхното постъпване и хетерогенността. Повечето компании изобщо не се сблъскват с големи данни, затова за централизирано хранилище, наречено хранилище на данни, може да се използва SQL база данни (PostgreSQL, MySQL и т.н.) със съвсем малък набор от скриптове, които насочват данните в хранилището.
IT-гигантите като Google, Amazon, Facebook или Dropbox имат по-високи изисквания: знание на Python, Java или Scala.
- Опит с големи данни: Hadoop, Spark, Kafka.
- Знание за алгоритми и структури от данни.
- Разбиране на основите на разпределените системи.
- Опит с инструменти за визуализация на данни, като Tableau или ElasticSearch, ще бъде голямо предимство.
Това означава, че наблюдаваме явен наклон към големи данни, особено в тяхната обработка при високи натоварвания. Тези компании имат повишени изисквания за устойчивост на системата.
Инженери по данни срещу учени по данни

Добре, това беше просто и забавно сравнение (без значение), но наистина всичко е много по-сложно.
Първо, трябва да знаете, че има доста неясноти в разграничаването на ролите и уменията на учените по данни и инженерите по данни. Тоест, лесно можете да се озадачите какви умения са необходими за успешен инженер по данни. Разбира се, има определени умения, които се припокриват между двете роли. Но също така има и редица диаметрално противоположни умения.
Науката за данни е сериозен бизнес, но ние се насочваме към свят с функционална наука за данни, където практиците са способни да правят своя собствена аналитика. За да се задействат конвейери на данни и интегрирани структури от данни, са ви нужни инженери по данни, а не учени.
По-популярно ли е дата инженерът в сравнение с дата учените?
— Да, защото преди да приготвите морковен пай, трябва първо да съберете, почистите и запасите моркови!
Дата инженерът разбира от програмиране по-добре от всеки дата учен, но що се отнася до статистиката, всичко е точно обратното.
Но ето предимството на дата инженера:
без него/нея стойността на модели-прототипи, които най-често са фрагменти от код с ужасно качество в Python файл, получен от дата учен и по някакъв начин даващ резултати, стреми към нула.
Без дата инженер този код никога няма да стане проект и никой бизнес проблем няма да бъде ефективно решен. Дата инженерът се опитва да преобразува всичко това в продукт.
Основни неща, които дата инженерът трябва да знае

И така, ако тази работа пробужда във вас светлина и сте изпълнени с ентусиазъм — можете да научите всичко необходимо и да станете истинска рок звезда в областта на разработката на данни. И да, можете да постигнете това дори без умения по програмиране или други технически знания. Това е трудно, но възможно!
Какви са първите стъпки?
Трябва да имате обща представа какво представлява всичко.
Първо, Data Engineering се отнася до компютърните науки. Конкретно — трябва да разбирате ефективни алгоритми и структури от данни. Второ, тъй като дата инженерите работят с данни, е необходимо разбиране на принципите на работа на базите данни и на структурата им.
Например, обикновените SQL бази данни с B-tree са базирани на структурата от данни B-Tree, а също така, в съвременните разпределени репозитории, LSM-Tree и други модификации на хеш таблици.
* Тези стъпки са основани на страхотната статия . И така, ако владеете руски, подкрепете този автор и прочетете .
1. Алгоритми и структури от данни
Използването на правилната структура от данни може значително да подобри производителността на алгоритъма. Идеално, всички ние трябва да изучаваме структури от данни и алгоритми в нашите училища, но това рядко се обсъжда. Във всеки случай, никога не е късно да се запознаем.
И така, ето моите любими безплатни курсове за изучаване на структури от данни и алгоритми:
Не забравяйте и за класическото произведение на Томас Корман по алгоритми — . Това е идеален справочник, когато ви трябва да освежите паметта си.
- За да подобрите уменията си, използвайте .
Можете също да се потопите в света на базите данни с удивителни видеа от Университета Карнеги-Мелън в YouTube:
- .
- .
2. Изучаване на SQL
Животът ни е свързан с данни. И за да извлечете тези данни от базата данни, трябва да 'говорите' с тях на един и същи език.
SQL (Structured Query Language — език за структурирани запитвания) е езикът на комуникация в областта на данните. Независимо от това, което някой казва, SQL е съществувал, съществува и ще продължи да съществува.
Ако сте били разработчик от дълго време, вероятно сте забелязали, че слуховете за бързата смърт на SQL периодично се появяват. Язикът е създаден в началото на 70-те години и до днешен ден е изключително популярен сред анализатори, разработчици и просто ентусиасти.
Без знание на SQL в инженерството на данни няма да може да се справите, тъй като неизменна част от работата ви ще бъде създаването на запитвания за извличане на данни. Всички съвременни хранилища за големи данни поддържат SQL:
- Amazon Redshift
- HP Vertica
- Oracle
- SQL Server
… и много други.
За анализа на големи слоеве данни, съхранявани в разпределени системи като HDFS, бяха разработени механизми на SQL: Apache Hive, Impala и т.н. Виждате, той не отива никъде.
Как да научите SQL? Просто практикувайте.
За това бих препоръчал да се запознаете с отличен учебник, който, между другото, е безплатен, от .
Отличителната черта на тези курсове е наличието на интерактивна среда, в която можете да пишете и изпълнявате SQL-запитвания директно в браузъра. Ресурсът няма да е излишен. И можете да приложите тези знания в в секцията Бази данни.
3. Програмиране на Python и Java/Scala
Защо да изучавате езика за програмиране Python, вече писах в статията . Що се отнася до Java и Scala, повечето инструменти за съхранение и обработка на огромни обеми данни са написани на тези езици. Например:
- Apache Kafka (Scala)
- Hadoop, HDFS (Java)
- Apache Spark (Scala)
- Apache Cassandra (Java)
- HBase (Java)
- Apache Hive (Java)
За да разберете как работят тези инструменти, трябва да познавате езиците, на които са написани. Функционалният подход на Scala позволява ефективно решаване на задачи за паралелна обработка на данни. Python, за съжаление, не може да се похвали със скорост и паралелна обработка. Като цяло, познанието на няколко езика и програмни парадигми оказва положително влияние на разнообразието от подходи при решаване на проблеми.
За да се потопите в езика Scala, можете да прочетете от автора на езика. Също така, компания Twitter публикува добро въведение — .
Що се отнася до Python, считам за най-добрата книга на средно ниво.
4. Инструменти за работа с големи данни
Ето списък на най-популярните инструменти в света на големите данни:
- Apache Spark
- Apache Kafka
- Apache Hadoop (HDFS, HBase, Hive)
- Apache Cassandra
Повече информация за изграждане на големи блокове данни можете да намерите в тази удивителна . Най-популярните инструменти са Spark и Kafka. Определено си струва да ги изучите, най-добре е да разберете как работят отвътре. Jay Kreps (съавтор на Kafka) публикува монументална работа през 2013 година , между другото, основните идеи от този труд бяха използвани за създаването на Apache Kafka.
- Въведението в Hadoop може да бъде .
- Най-пълното ръководство за Apache Spark за мен е — .
5. Облачни платформи

Знанието поне на една облачна платформа е в списъка на основните изисквания за кандидатите за позицията на дата-инженер. Работодателите предпочитат Amazon Web Services, на второ място е облачната платформа на Google, а тройката лидер накрая е Microsoft Azure.
Трябва да се ориентирате добре в Amazon EC2, AWS Lambda, Amazon S3, DynamoDB.
6. Разпределени системи
Работата с големи данни предполага наличие на клъстери независими компютри, чиято свързаност се осъществява по мрежа. Колкото по-голям е клъстерът, толкова по-голям е шансът за отказ на неговите възли. За да станете страхотен експерт в областта на данните, трябва да се задълбочите в проблемите и съществуващите решения за разпределени системи. Тази област е стара и сложна.
Ендрю Таненбаум се смята за пионер в тази област. За онези, които не се страхуват от теорията, препоръчвам неговата книга , която може да изглежда сложна за начинаещите, но определено ще ви помогне да усъвършенствате уменията си.
Смятам за най-добрата въведителна книга. Между другото, Мартин има великолепен . Неговата работа ще помогне да систематизирате знанията си относно изграждането на съвременна инфраструктура за съхранение и обработка на големи данни.
За онези, които обичат да гледат видео, има курс на YouTube .
7. Пайплайни на данни

Пайплайните на данни са нещо, без което не можете да живеете като дата-инженер.
По-голямата част от времето дата-инженерът изгражда така наречената дата пайплайн, т.е. създава процес за доставка на данни от едно място на друго. Това могат да бъдат потребителски сценарии, които изпращат заявки към API на външна услуга или правят SQL заявки, обогатяват данните и ги поставят в централно хранилище (data warehouse) или хранилище на неструктурирани данни (data lake).
В обобщение: основният чеклист на дата-инженера

Нека обобщим — необходимо е добро разбиране на следното:
- Информационни системи;
- Разработка на софтуер (Agile, DevOps, Дизайнерски техники, SOA);
- Разпределени системи и паралелно програмиране;
- Основи на базите данни — планиране, проектиране, експлоатация и отстраняване на повреди;
- Проектиране на експерименти — A/B тестове за доказване на концепции, определяне на надеждността, производителността на системите, а също така за разработване на надеждни начини за бързо предоставяне на добри решения.
Това са само някои от изискванията, за да станете дата-инженер, така че изучавайте и се запознайте със системите за данни, информационните системи, непрекъснатото доставки/разгърнате/интеграция, езиците за програмиране и други теми от компютърните науки (не във всички предметни области).
И накрая, последното, но много важно, което искам да кажа.
Пътят към Data Engineering не е така прост, както изглежда. Той не прощава, предизвиква фрустрация и трябва да сте готови за това. Някои моменти от това пътуване могат да ви накарат да помислите да се откажете. Но това е истински труд и учебен процес.
Просто не го романтизирайте от самото начало. Целта на пътуването е да научите колкото е възможно повече и да сте готови за нови предизвикателства.
Ето една отлична графика, с която се сблъсках, която добре илюстрира този момент:

И да, не забравяйте да избягвате прегарянето и да почивате. Това също е много важно. Успех!
Как ви се струва статията, приятели? Каним ви на , който ще се проведе днес в 20:00 часа. В рамките на уебинара ще обсъдим как да изградим ефективна и мащабируема система за обработка на данни за малка компания или стартап с минимални разходи. В практическата част ще се запознаем с инструментите за обработка на данни на Google Cloud. До скоро!
Източник: habr.com
