Прежде чем вы начнете!

Эта серия предназначена для поддержки подхода обучения на практике, при котором каждый сценарий создается на основе моего прошлого опыта работы в отрасли. Я не собираюсь объяснять тонкости используемых фреймворков или инструментов, как в других учебниках, но будут выделены некоторые советы и приемы, которые могут появиться только при смешивании нескольких компонентов вместе, и необходимо разработать комплексное решение. сделал.

Это сделано для того, чтобы показать новичкам, как размещать различные компоненты и создавать законченное решение, в отличие от простых руководств.

Например, большинство из нас сталкивались с созданием моделей машинного обучения и моделей глубокого обучения, но сколько раз вы видели их вживую?

Хотя я пытаюсь быть приличным писателем, это моя первая попытка создать серию из моего любимого проекта, так что ожидайте какой-нибудь специальный способ публикации статей в этой серии, прежде чем мой мозг потеряет информацию в воздухе.

С нетерпением жду, чтобы сделать эту серию, которая стоит вашего времени через пару недель :)

Гит:

Полнофункциональная кодовая база и примеры вариантов использования запущены и работают.

Репозиторий: https://github.com/gyan42/spark-streaming-playground

Веб-сайт: https://gyan42.github.io/spark-streaming-playground/build/html/index.html

Введение / Повторный курс

Настраивать

Содержание

  • Пример использования: популярные хэш-теги Twitter

  • Вариант использования: масштабируемая конечная точка REST — наивный подход

Я инженер по приборам, который стал инженером по встраиваемым системам, стал инженером по большим данным и стремился стать инженером по машинному обучению (не обязательно Ученый, мой мозг на это не рассчитан) в ближайшее время!

Сначала я познакомился со встроенным программным обеспечением платформы, таким как варианты RTOS, Android и фреймворки например, OpenCL, OpenMP, Cuda и т. д., а также с языками программирования, такими как C и C++.

В 2016 году (всего 4 года назад) я начал погружаться в большие данные, тогда встал вопрос, какой язык(и) программирования мне следует изучать? Какие программные среды я должен изучить или должен иметь, чтобы получить работу в области больших данных/инженера данных/инженера по науке о данных?

После нескольких поисковых запросов в Google я узнал, что Big Data — это обработка данных, которые невозможно выполнить на одной машине, и вы даже не представляете, какое это было просветление! (каламбур). Выяснив это, следующим заданием было выяснить, что такое фреймворки распределенных вычислений? с моим маленьким мозгом, я упростил его, чтобы он стал своего рода программным стеком, который будет располагаться поверх существующей ОС и будет активно использовать сетевые ресурсы, а также координировать все машины в сети, чтобы они работали как один так называемый кластер.

Любителям Dragon Ball Z, таким как я… остальные можно пропустить :)

Если вы поклонник Dragon Ball Z, то распределенные системы — это что-то вроде Cell, который сидит на хост-машинах и берет на себя управление, главный узел отправляет свои инструкции другим узлам и использует ресурсы, чтобы делать что-то хорошее, в отличие от Cell, чьей единственной целью было стать сильным, убивая всех остальных!

Что такое большие данные?

Позвольте мне не оскорблять других коллег-блогеров, объясняющих эту обширную тему, которые сделали все возможное. Поиск в Google выдаст массу материалов по теме, так что давайте двигаться вперед!

Проекты больших данных

Хорошо, большие данные нуждаются в больших инструментах, не так ли?

На днях мы слышим о множестве инструментов/фреймворков для работы с большими данными. Работа в индустрии программного обеспечения — это кошмар для любого наемного работника, независимо от его умственных способностей и силы.

Все дело в том, как быстро вы можете разучиться, с тем, что вы выжили до сих пор, и узнать что-то новое.

Звучит так просто, приятель, под разучиванием ты подразумеваешь забыть об этом, верно? тада сделано!

Если вы подумали об этом на мгновение, подождите, разучиться не значит забыть старые школьные вещи, это значит адаптировать себя к требованиям нового века, тщательно перестраивая нейронную сеть мозга.

Не понял, что я имею в виду, тогда для тех, кто имеет некоторое представление о функциональных языках программирования, таких как Scala, это может быть понятно. Помимо всего хорошего, у него есть два простых правила: 1. Неизменяемые переменные 2. Рекурсивный стиль программирования. Два простых правила меняют весь стиль программирования. Итак, с этими двумя простыми правилами, основанными на case-классах, гибридным переключателем (сопоставление выражения) и мощной системой типов, я почувствовал, что у меня есть швейцарский армейский нож. Проблема была в том, что я едва ли успел использовать обычный нож в полной мере, так что мне не нужно рассказывать, что я мог в итоге сделать со швейцарским армейским ножом!

Процесс отучения и обучения является самым сложным, особенно для людей старшего поколения, потому что этот процесс бросает вызов всей их базе знаний, с которой они до сих пор выживали.

Таким образом, могу ли я изучить один фреймворк, обладающий мощностью и возможностями для обработки так называемых больших данных? Что ж, не существует универсальной платформы, способной удовлетворить потребности бизнеса, будь то Google, Facebook, Netflix, Amazon или стартапы, поддерживаемые индийскими ИТ-компаниями по всему миру.

Крупные организации стояли за разработкой основных инструментов, таких как Hadoop, Kafka, Hive, Kubernetes и т. д.,

Иногда дипломная работа образовательных учреждений оказывалась ведущей в мире инфраструктурой распределенных вычислений, как в случае с Apache Spark.

Последние, но не менее важные небольшие организации, в которых работает большинство из нас, действительно играют важную роль в изучении и адаптации этих инструментов/платформ, доводя технологии до конечного пользователя с инновационными идеями, раздвигая границы. этих технологий от их первоначальной идеи.

Поскольку большинство из нас являются частью этого последнего сектора, мы в конечном итоге разочаровываемся в этой сумасшедшей лихорадке изобретения новых фреймворков/инструментов время от времени. В этой технологической гонке мы, разработчики программного обеспечения, всегда готовы принять участие в любой момент!

Хорошо! Означает ли это, что традиционные инструменты, такие как батареи (библиотеки) MySQL, PostgreSQL, Python, бесполезны? Неа! Мы увидим, как эти инструменты играют свою жизненно важную роль в этой серии.

В решении для больших данных реальный вопрос заключается в определении правильных фреймворков/инструментов и в том, как мы собираемся их смешивать и заставить все разные фреймворки/инструменты работать как единое целое. Часто дата-инженеры вынуждены знать или изучать десятки библиотек/языков для удовлетворения бизнес-требований.

Инженер данных: 100%

Традиционно инженеры данных являются разработчиками SQL, но недавнее продвижение подтолкнуло определение к чему-то другому, вынуждая инженеров данных иметь набор навыков, аналогичный разработчику полного стека, от сбора данных до интеграции с внешним интерфейсом.

Дизайн системы: 20%

Хорошо спроектированная модульная структура может поддерживать работу вашего конвейера данных в течение нескольких месяцев, не возвращаясь к белой доске.

Это включает в себя написание тестовых случаев, утилит, разработку интерфейсов классов, принятие определенных шаблонов проектирования и т. д.

Независимо от того, насколько мала или велика ваша команда или проект, вы в конечном итоге перепроектируете свое программное обеспечение, вопрос в том, насколько далеко я могу отложить рефакторинг кода с информацией, которая у меня есть прямо сейчас?

Не верите мне? Погуглите разницу между Tensorflow 1.x и Tensorflow 2.x. Да, даже великим инженерам Google приходится проводить рефакторинг базы кода или иногда полностью переписывать стек для новых требований с учетом прошлого обучения!

Не существует одного хорошего дизайна, удовлетворяющего все потребности! Будьте здесь ребенком, делайте это, смотрите, где что-то не работает, исправляйте это везде, где это возможно, учитесь на этом и перестраивайте.

Разработчики: 20%

Настройка облака, управление правами пользователей, установка программных стеков и множество других задач, позволяющих создать инфраструктуру для запуска кода разработчиками.

Забавно то, что независимо от того, насколько хороша команда Dev Ops, команда Data Engineer должна иметь определенный уровень понимания используемых хост-компьютеров и программных стеков, иначе вы обречены.

В этой серии статей давайте коснемся этого процесса, настроив кластер с одним узлом (подождите, одна машина в кластере? Да).

Управление конфигурацией: 25%

Вы когда-нибудь задумывались, почему такие сервисы, как AWS имеет так много конфигураций XML/Json/Python dict?

Сколько раз вы писали функцию без аргументов? Хорошо, я слышу твой раздраженный мысленный голос… да, функция без аргументов менее полезна. Как и решение для больших данных, без управления конфигурацией бесполезно.

С другой стороны, найти правильный параметр конфигурации и правильное значение для него — все равно, что получить свое желание от ангела. (Просто пожелайте, чтобы этот ангел был чистым и добрым, или вы облажались!)

Нам нужно позаботиться о конфигурациях установленных программных пакетов, разрабатывая свои собственные.

Когда система созреет, будет много ручек, я имею в виду много!!!

В этой серии позвольте мне представить управление конфигурацией на основе Ginconfig и Python INI-файл.

Обработка данных с помощью SQL: 25%

Разве я не говорил, что основной задачей Data Engineer является SQL, он остается прежним. Единственная разница в том, что теперь любой может написать материал SQL, чтобы выполнить приличный объем работы, но опытный разработчик SQL знает, как адаптировать запросы для данной области.

В каком бы проекте больших данных вы ни оказались, вам не избежать SQL (кошмар для таких людей, как я).

Большую часть времени мы создаем конвейеры только для запуска специфичных для бизнеса команд SQL.

В этой серии позвольте мне подправить несколько заранее подготовленных сценариев, чтобы прочувствовать их.

Обработка данных без SQL: 5%

Мое любимое место во всем проекте.

Чтение данных из внешних источников, таких как REST API, чтение и декодирование данных с диска на лету, отправка данных на сторонние конечные точки и т. д.,

Да, для этой категории тоже есть пример!

Рефакторинг: 5%

Чаще всего мы забываем только об этой существующей части.

Это может быть простой SQL-запрос на этапе приема данных, который испортит всю вышестоящую систему, и если вернуться назад и исправить их, проблема с данными будет решена. Запуск всей обработки данных с нуля.

Код, конфигурации и рефакторинг SQL-запросов станут ежедневными маршрутами по мере развития системы и поступления новых требований.



Пожалуйста, извините меня за то, что я пропустил объяснение того, почему был выбран определенный фреймворк, или объяснение внутреннего устройства выбранного фреймворка. Давайте больше сосредоточимся на интеграции различных платформ и создадим конвейер данных.

Везде, где это возможно, я постараюсь скопировать и вставить информацию из других блогов, чтобы сделать чтение приятным, освещая то, что нужно знать, чтобы поиграть с кодовой базой.

Примечание: все фотографии скопированы через поиск картинок Google!