[Что такое Data Lake?]
Привет, друзья! Сегодня хочу рассказать о Data Lake, одном из ключевых компонентов в современной работе с большими данными.
Data Lake — это хранилище, которое позволяет хранить огромное количество структурированных и неструктурированных данных. В отличие от традиционных баз данных, Data Lake позволяет загружать данные в их оригинальном формате, а затем обрабатывать и анализировать их по мере необходимости.
Основные преимущества Data Lake:
Гибкость: можно хранить любые данные в любом формате.
Масштабируемость: легко справляется с увеличением объема данных.
Экономичность: хранение данных в сыром виде обходится дешевле.
Почему Data Lake так популярен:
Разнообразие данных: Современные компании работают с огромным количеством разнообразных данных, включая логи, социальные медиа, данные IoT и многое другое. Data Lake позволяет легко хранить и анализировать все эти данные в одном месте.
Гибкость анализа: Data Lake поддерживает различные аналитические инструменты и технологии, включая машинное обучение, аналитические платформы и SQL-запросы. Это позволяет аналитикам и разработчикам быстро адаптироваться к новым задачам и требованиям.
Поддержка масштабных данных: В эпоху больших данных возможность быстро масштабировать хранилище данных становится критически важной. Data Lake обеспечивает высокую масштабируемость без значительных затрат на инфраструктуру.
Быстрое внедрение инноваций: Возможность быстро интегрировать новые технологии и подходы к обработке данных делает Data Lake идеальным решением для компаний, стремящихся к инновациям.
Основные недостатки Data Lake:
Сложность управления: Без надлежащей структуры и управления Data Lake может превратиться в "болото данных" (data swamp), где трудно найти нужные данные.
Проблемы безопасности: Хранение большого объема данных в одном месте требует усиленных мер безопасности для защиты от утечек и несанкционированного доступа.
Требования к знаниям: Эффективное использование Data Lake требует знаний и опыта в управлении данными и аналитике, что может быть проблемой для компаний с ограниченными ресурсами.
Качество данных: Поскольку данные хранятся в их сыром виде, может возникнуть проблема с обеспечением их качества и консистентности.
———
В следующем посте расскажу, какие инструменты используются для управления Data Lake и как они помогают решать повседневные задачи.
#BigData #DataLake #Python #IT
Привет, друзья! Сегодня хочу рассказать о Data Lake, одном из ключевых компонентов в современной работе с большими данными.
Data Lake — это хранилище, которое позволяет хранить огромное количество структурированных и неструктурированных данных. В отличие от традиционных баз данных, Data Lake позволяет загружать данные в их оригинальном формате, а затем обрабатывать и анализировать их по мере необходимости.
Основные преимущества Data Lake:
Гибкость: можно хранить любые данные в любом формате.
Масштабируемость: легко справляется с увеличением объема данных.
Экономичность: хранение данных в сыром виде обходится дешевле.
Почему Data Lake так популярен:
Разнообразие данных: Современные компании работают с огромным количеством разнообразных данных, включая логи, социальные медиа, данные IoT и многое другое. Data Lake позволяет легко хранить и анализировать все эти данные в одном месте.
Гибкость анализа: Data Lake поддерживает различные аналитические инструменты и технологии, включая машинное обучение, аналитические платформы и SQL-запросы. Это позволяет аналитикам и разработчикам быстро адаптироваться к новым задачам и требованиям.
Поддержка масштабных данных: В эпоху больших данных возможность быстро масштабировать хранилище данных становится критически важной. Data Lake обеспечивает высокую масштабируемость без значительных затрат на инфраструктуру.
Быстрое внедрение инноваций: Возможность быстро интегрировать новые технологии и подходы к обработке данных делает Data Lake идеальным решением для компаний, стремящихся к инновациям.
Основные недостатки Data Lake:
Сложность управления: Без надлежащей структуры и управления Data Lake может превратиться в "болото данных" (data swamp), где трудно найти нужные данные.
Проблемы безопасности: Хранение большого объема данных в одном месте требует усиленных мер безопасности для защиты от утечек и несанкционированного доступа.
Требования к знаниям: Эффективное использование Data Lake требует знаний и опыта в управлении данными и аналитике, что может быть проблемой для компаний с ограниченными ресурсами.
Качество данных: Поскольку данные хранятся в их сыром виде, может возникнуть проблема с обеспечением их качества и консистентности.
———
В следующем посте расскажу, какие инструменты используются для управления Data Lake и как они помогают решать повседневные задачи.
#BigData #DataLake #Python #IT
👍6❤2🔥1
[Важность контроля доступа к разделяемым объектам]
Привет, друзья! Сегодня хочу поделиться интересным примером из книги "Операционные системы. Основы и принципы" Х. Дейтел. Этот пример демонстрирует важность контроля доступа к разделяемым объектам в параллельных потоках. Несоблюдение этого правила может привести к непредсказуемым результатам работы программы.
Код по ссылке: https://github.com/avagners/algorithms_and_data_structures/blob/main/algorithms/asynchronous_concurrent_execution/unsynchronized_buffer.py
Этот код создает два потока: производитель (Producer) и потребитель (Consumer), которые работают с общим ресурсом - буфером (Buffer). Производитель генерирует данные и добавляет их в буфер, а потребитель извлекает данные из буфера и суммирует их.
Ключевые моменты:
Buffer: Хранит данные в виде множества (set). Методы set и get используются для добавления и извлечения данных.
Producer: В цикле генерирует числа от 1 до 4, добавляет их в буфер и выводит сообщение о записи.
Consumer: В цикле извлекает числа из буфера, суммирует их и выводит сообщение о чтении.
Проблемы многопоточности
Каждый запуск этого кода будет выдавать непредсказуемый результат. Это происходит из-за того, что доступ к буферу не синхронизирован. Потоки могут одновременно пытаться читать и записывать данные, что приводит к ошибкам и некорректным результатам.
Важно помнить:
При работе с параллельными потоками необходимо тщательно контролировать доступ к разделяемым ресурсам. Это можно сделать с помощью механизмов синхронизации, таких как блокировки (lock), семафоры и другие средства.
В следующих постах я покажу и расскажу об алгоритмах взаимоисключений.
#Python #Multithreading #Concurrency #Programming #IT
Привет, друзья! Сегодня хочу поделиться интересным примером из книги "Операционные системы. Основы и принципы" Х. Дейтел. Этот пример демонстрирует важность контроля доступа к разделяемым объектам в параллельных потоках. Несоблюдение этого правила может привести к непредсказуемым результатам работы программы.
Код по ссылке: https://github.com/avagners/algorithms_and_data_structures/blob/main/algorithms/asynchronous_concurrent_execution/unsynchronized_buffer.py
Этот код создает два потока: производитель (Producer) и потребитель (Consumer), которые работают с общим ресурсом - буфером (Buffer). Производитель генерирует данные и добавляет их в буфер, а потребитель извлекает данные из буфера и суммирует их.
Ключевые моменты:
Buffer: Хранит данные в виде множества (set). Методы set и get используются для добавления и извлечения данных.
Producer: В цикле генерирует числа от 1 до 4, добавляет их в буфер и выводит сообщение о записи.
Consumer: В цикле извлекает числа из буфера, суммирует их и выводит сообщение о чтении.
Проблемы многопоточности
Каждый запуск этого кода будет выдавать непредсказуемый результат. Это происходит из-за того, что доступ к буферу не синхронизирован. Потоки могут одновременно пытаться читать и записывать данные, что приводит к ошибкам и некорректным результатам.
Важно помнить:
При работе с параллельными потоками необходимо тщательно контролировать доступ к разделяемым ресурсам. Это можно сделать с помощью механизмов синхронизации, таких как блокировки (lock), семафоры и другие средства.
В следующих постах я покажу и расскажу об алгоритмах взаимоисключений.
#Python #Multithreading #Concurrency #Programming #IT
👍4❤2
[Инструменты Data Lake]
Привет, друзья! Ранее мы обсудили, что такое Data Lake и почему он так популярен. Сегодня расскажу о том, какие инструменты мы используем для управления нашим Data Lake и как они помогают нам справляться с повседневными задачами.
Основные инструменты для управления Data Lake:
Apache Hadoop:
Hadoop — это одна из самых популярных платформ для работы с большими данными. Одним из ключевых компонентов является HDFS (Hadoop Distributed File System) для хранения данных. Hadoop обеспечивает высокую масштабируемость и отказоустойчивость, что делает его идеальным для Data Lake.
Apache Spark:
Spark — это мощный инструмент для обработки больших данных в режиме реального времени. Он поддерживает разнообразные аналитические задачи, включая машинное обучение, обработку потоков данных и SQL-запросы. Благодаря своей скорости и гибкости Spark стал незаменимым инструментом для анализа данных в Data Lake.
Apache NiFi:
NiFi — это мощный инструмент для автоматизации потоков данных. Он позволяет легко собирать, передавать и преобразовывать данные из различных источников в режиме реального времени. Мы используем NiFi для интеграции и управления потоками данных.
Apache Hive:
Hive — это инструмент для выполнения SQL-запросов на больших объемах данных, хранящихся в Hadoop. Он предоставляет интерфейс, похожий на SQL, что облегчает работу с данными для аналитиков и разработчиков. Hive позволяет выполнять сложные аналитические задачи и преобразования данных.
Trino (ранее PrestoSQL):
Trino — это распределенный SQL-движок, который позволяет выполнять высокопроизводительные аналитические запросы на больших объемах данных. Он поддерживает работу с различными источниками данных, включая Hadoop и S3. Trino обеспечивает быструю и эффективную обработку данных, что делает его незаменимым инструментом для нашего Data Lake.
Apache Airflow:
Airflow — это платформа для автоматизации и оркестрации рабочих процессов. Мы используем Airflow для планирования и мониторинга задач импорта/экспорта и обработки данных, что позволяет нам эффективно управлять интеграциями.
———
Далее я подробнее расскажу об экосистеме для работы с большими данными Hadoop. Оставайтесь на связи!
#BigData #DataLake #ApacheHadoop #ApacheSpark #ApacheNiFi #Hive #Trino #ApacheAirflow #IT
Привет, друзья! Ранее мы обсудили, что такое Data Lake и почему он так популярен. Сегодня расскажу о том, какие инструменты мы используем для управления нашим Data Lake и как они помогают нам справляться с повседневными задачами.
Основные инструменты для управления Data Lake:
Apache Hadoop:
Hadoop — это одна из самых популярных платформ для работы с большими данными. Одним из ключевых компонентов является HDFS (Hadoop Distributed File System) для хранения данных. Hadoop обеспечивает высокую масштабируемость и отказоустойчивость, что делает его идеальным для Data Lake.
Apache Spark:
Spark — это мощный инструмент для обработки больших данных в режиме реального времени. Он поддерживает разнообразные аналитические задачи, включая машинное обучение, обработку потоков данных и SQL-запросы. Благодаря своей скорости и гибкости Spark стал незаменимым инструментом для анализа данных в Data Lake.
Apache NiFi:
NiFi — это мощный инструмент для автоматизации потоков данных. Он позволяет легко собирать, передавать и преобразовывать данные из различных источников в режиме реального времени. Мы используем NiFi для интеграции и управления потоками данных.
Apache Hive:
Hive — это инструмент для выполнения SQL-запросов на больших объемах данных, хранящихся в Hadoop. Он предоставляет интерфейс, похожий на SQL, что облегчает работу с данными для аналитиков и разработчиков. Hive позволяет выполнять сложные аналитические задачи и преобразования данных.
Trino (ранее PrestoSQL):
Trino — это распределенный SQL-движок, который позволяет выполнять высокопроизводительные аналитические запросы на больших объемах данных. Он поддерживает работу с различными источниками данных, включая Hadoop и S3. Trino обеспечивает быструю и эффективную обработку данных, что делает его незаменимым инструментом для нашего Data Lake.
Apache Airflow:
Airflow — это платформа для автоматизации и оркестрации рабочих процессов. Мы используем Airflow для планирования и мониторинга задач импорта/экспорта и обработки данных, что позволяет нам эффективно управлять интеграциями.
———
Далее я подробнее расскажу об экосистеме для работы с большими данными Hadoop. Оставайтесь на связи!
#BigData #DataLake #ApacheHadoop #ApacheSpark #ApacheNiFi #Hive #Trino #ApacheAirflow #IT
👍8❤1
[Что такое Hadoop и из каких компонентов он состоит?]
Привет, друзья! В предыдущих постах мы обсудили Data Lake и инструменты для его управления. Сегодня хочу рассказать о Hadoop — одной из ключевых технологий, на которой базируется большинство современных решений для работы с большими данными.
Что такое Hadoop?
Hadoop — это масштабируемая и отказоустойчивая платформа с открытым исходным кодом для хранения и обработки больших объёмов данных. Она позволяет распределять данные и задачи обработки между множеством узлов в кластере, что делает её идеальным решением для работы с данными в промышленном масштабе.
Основные компоненты Hadoop:
Hadoop Distributed File System (HDFS):
HDFS — это распределённая файловая система, которая хранит данные на множестве узлов кластера. Она разбивает данные на блоки и распределяет их по разным узлам, обеспечивая высокую доступность и отказоустойчивость. HDFS — основа для хранения данных в экосистеме Hadoop.
MapReduce:
MapReduce — это модель программирования, которая позволяет обрабатывать большие объёмы данных параллельно на кластере. В MapReduce задачи делятся на две основные фазы:
Map-фаза: Обработка данных и их преобразование в пары ключ-значение.
Reduce-фаза: Сводка результатов и получение итогового ответа. MapReduce позволяет эффективно анализировать данные, распределённые по множеству узлов.
YARN (Yet Another Resource Negotiator):
YARN — это система управления ресурсами в Hadoop. Она позволяет разным приложениям и фреймворкам использовать ресурсы кластера (процессорное время, память и др.).
Основные компоненты YARN:
Resource Manager: Управляет ресурсами кластера.
Node Manager: Контролирует ресурсы на каждом узле кластера.
Application Master: Обрабатывает задачи конкретного приложения.
Hadoop Common:
Hadoop Common включает в себя общие библиотеки и утилиты, которые поддерживают работу всех остальных компонентов Hadoop. Это основной набор инструментов и функций, необходимый для взаимодействия между различными частями системы.
———
В следующем посте я расскажу о других проектах Apache, связанных с Hadoop.
#BigData #Hadoop #HDFS #MapReduce #YARN #IT
Привет, друзья! В предыдущих постах мы обсудили Data Lake и инструменты для его управления. Сегодня хочу рассказать о Hadoop — одной из ключевых технологий, на которой базируется большинство современных решений для работы с большими данными.
Что такое Hadoop?
Hadoop — это масштабируемая и отказоустойчивая платформа с открытым исходным кодом для хранения и обработки больших объёмов данных. Она позволяет распределять данные и задачи обработки между множеством узлов в кластере, что делает её идеальным решением для работы с данными в промышленном масштабе.
Основные компоненты Hadoop:
Hadoop Distributed File System (HDFS):
HDFS — это распределённая файловая система, которая хранит данные на множестве узлов кластера. Она разбивает данные на блоки и распределяет их по разным узлам, обеспечивая высокую доступность и отказоустойчивость. HDFS — основа для хранения данных в экосистеме Hadoop.
MapReduce:
MapReduce — это модель программирования, которая позволяет обрабатывать большие объёмы данных параллельно на кластере. В MapReduce задачи делятся на две основные фазы:
Map-фаза: Обработка данных и их преобразование в пары ключ-значение.
Reduce-фаза: Сводка результатов и получение итогового ответа. MapReduce позволяет эффективно анализировать данные, распределённые по множеству узлов.
YARN (Yet Another Resource Negotiator):
YARN — это система управления ресурсами в Hadoop. Она позволяет разным приложениям и фреймворкам использовать ресурсы кластера (процессорное время, память и др.).
Основные компоненты YARN:
Resource Manager: Управляет ресурсами кластера.
Node Manager: Контролирует ресурсы на каждом узле кластера.
Application Master: Обрабатывает задачи конкретного приложения.
Hadoop Common:
Hadoop Common включает в себя общие библиотеки и утилиты, которые поддерживают работу всех остальных компонентов Hadoop. Это основной набор инструментов и функций, необходимый для взаимодействия между различными частями системы.
———
В следующем посте я расскажу о других проектах Apache, связанных с Hadoop.
#BigData #Hadoop #HDFS #MapReduce #YARN #IT
👍3❤1
[Алгоритм Питерсона*: Обеспечение взаимного исключения в многопоточности]
Привет, друзья! Помните пост "Важность контроля доступа к разделяемым объектам", где была продемонстрирована проблема при работе с параллельными потоками? Сегодня расскажу об интересном алгоритме для обеспечения взаимного исключения — алгоритме Питерсона. Это простое, но важное решение, которое позволяет двум потокам безопасно разделять ресурсы.
Что такое алгоритм Питерсона?
Алгоритм Питерсона — это классический способ синхронизации двух потоков, обеспечивающий их корректное взаимодействие при совместном доступе к общим данным. Он был предложен Гарри Питерсоном в 1981 году и стал одним из первых алгоритмов, которые решили проблему взаимного исключения без использования сложных синхронизирующих механизмов.
Как это работает?
Алгоритм Питерсона позволяет двум потокам координировать доступ к общим ресурсам. В нашем примере используется класс
В этом коде два потока устанавливают свои флаги и координируют доступ к ресурсу через переменную
Зачем это нужно?
Хотя алгоритм Питерсона редко используется на практике в современных системах, он остаётся важным учебным примером, который помогает понять основные концепции синхронизации и взаимного исключения. Его простота делает его отличным инструментом для изучения основ многопоточного программирования.
Кто такой Питерсон?
Гарри Питерсон — американский учёный, который внёс значительный вклад в области информатики, особенно в разработку методов синхронизации и управления параллельными процессами. Его алгоритм стал основой для многих учебных курсов и учебников по операционным системам.
———
Далее я покажу другой алгоритм взаимного исключения для N-потоков - алгоритм Лэмпорта.
*В других русскоязычных источниках фамилию пишут через "е" - Петерсон.
Полный пример кода по ссылке: https://github.com/avagners/algorithms_and_data_structures/blob/main/algorithms/asynchronous_concurrent_execution/peterson_lock/peterson_lock_2.py
#Python #Concurrency #PetersonsAlgorithm #Многопоточность #Синхронизация #IT
Привет, друзья! Помните пост "Важность контроля доступа к разделяемым объектам", где была продемонстрирована проблема при работе с параллельными потоками? Сегодня расскажу об интересном алгоритме для обеспечения взаимного исключения — алгоритме Питерсона. Это простое, но важное решение, которое позволяет двум потокам безопасно разделять ресурсы.
Что такое алгоритм Питерсона?
Алгоритм Питерсона — это классический способ синхронизации двух потоков, обеспечивающий их корректное взаимодействие при совместном доступе к общим данным. Он был предложен Гарри Питерсоном в 1981 году и стал одним из первых алгоритмов, которые решили проблему взаимного исключения без использования сложных синхронизирующих механизмов.
Как это работает?
Алгоритм Питерсона позволяет двум потокам координировать доступ к общим ресурсам. В нашем примере используется класс
PetersonLock
, который реализует этот алгоритм. Два потока (производитель и потребитель) используют блокировки для безопасной записи и чтения данных из общего буфера.class PetersonLock:
def __init__(self):
self.flag: List[bool, bool] = [False, False]
self.favored_thread: int = 0
def lock(self, thread_id):
other_thread = 1 - thread_id
self.flag[thread_id] = True
self.favored_thread = thread_id
while self.flag[other_thread] and self.favored_thread == thread_id:
pass
def unlock(self, thread_id):
self.flag[thread_id] = False
В этом коде два потока устанавливают свои флаги и координируют доступ к ресурсу через переменную
favored_thread
, обеспечивая таким образом взаимное исключение.Зачем это нужно?
Хотя алгоритм Питерсона редко используется на практике в современных системах, он остаётся важным учебным примером, который помогает понять основные концепции синхронизации и взаимного исключения. Его простота делает его отличным инструментом для изучения основ многопоточного программирования.
Кто такой Питерсон?
Гарри Питерсон — американский учёный, который внёс значительный вклад в области информатики, особенно в разработку методов синхронизации и управления параллельными процессами. Его алгоритм стал основой для многих учебных курсов и учебников по операционным системам.
———
Далее я покажу другой алгоритм взаимного исключения для N-потоков - алгоритм Лэмпорта.
*В других русскоязычных источниках фамилию пишут через "е" - Петерсон.
Полный пример кода по ссылке: https://github.com/avagners/algorithms_and_data_structures/blob/main/algorithms/asynchronous_concurrent_execution/peterson_lock/peterson_lock_2.py
#Python #Concurrency #PetersonsAlgorithm #Многопоточность #Синхронизация #IT
👍3🏆2
[Москва. IT-фестиваль.]
Всем привет. Я в Москве.
Вчера был на внутрибанковском IT-фестивале. Для меня это первое такое мероприятие.
Было очень-очень круто. Отдохнул всей душой.
Онлайн никогда не заменит живое общение.
Был очень рад всех видеть.
Всем привет. Я в Москве.
Вчера был на внутрибанковском IT-фестивале. Для меня это первое такое мероприятие.
Было очень-очень круто. Отдохнул всей душой.
Онлайн никогда не заменит живое общение.
Был очень рад всех видеть.
👍6🔥1👏1🙏1
[Другие проекты Apache, связанные с Hadoop]
Hadoop не существует в одиночку. Он окружён целым рядом проектов Apache, которые расширяют его возможности и предоставляют дополнительные инструменты для работы с большими данными.
Apache Hive:
Hive — это инструмент для выполнения SQL-запросов на данных, хранящихся в Hadoop. Он был разработан для того, чтобы аналитики и разработчики могли использовать привычный им язык SQL для работы с большими объёмами данных, хранящихся в HDFS. Hive отлично подходит для анализа структурированных данных и выполнения сложных запросов.
Apache HBase:
HBase — это распределённая, масштабируемая база данных NoSQL, которая работает поверх HDFS. Она предназначена для работы с большими объёмами данных в режиме реального времени и поддерживает как чтение, так и запись данных. HBase используется для хранения данных, требующих быстрой записи и доступа.
Apache Ambari:
Ambari — это инструмент для управления и мониторинга кластеров Hadoop. Он предоставляет простой и удобный веб-интерфейс для установки, настройки и управления кластерами Hadoop. С помощью Ambari можно отслеживать производительность системы, управлять конфигурациями и автоматизировать задачи администрирования.
Apache Tez:
Tez — это фреймворк, который оптимизирует выполнение заданий в Hadoop. Он был разработан как замена для MapReduce и позволяет выполнять сложные цепочки задач более эффективно и с меньшими задержками. Tez поддерживает выполнение DAG (Directed Acyclic Graph) задач, что делает его более гибким и производительным для различных аналитических приложений.
Apache Spark:
Spark — это мощный фреймворк для обработки данных, который может работать как самостоятельное решение, так и поверх Hadoop. В отличие от MapReduce, Spark поддерживает обработку данных в оперативной памяти, что делает его значительно быстрее для многих задач. Spark также поддерживает широкий спектр рабочих нагрузок, включая обработку в режиме реального времени, машинное обучение и анализ графов, что делает его универсальным инструментом для анализа данных.
Apache ZooKeeper:
ZooKeeper — это централизованная служба для управления конфигурацией, синхронизации распределённых приложений и обслуживания групповых служб. Он играет важную роль в обеспечении отказоустойчивости и управлении кластерами Hadoop.
Apache Sqoop:
Sqoop — это инструмент для передачи данных между Hadoop и реляционными базами данных. Он позволяет импортировать и экспортировать данные между HDFS и базами данных, такими как MySQL, PostgreSQL и другие.
———
Эти проекты, работающие вместе с Hadoop, создают мощную и гибкую экосистему для решения самых разнообразных задач, связанных с большими данными.
#BigData #Hadoop #HDFS #MapReduce #YARN #Hive #HBase #Ambari #Tez #Spark #ZooKeeper #Sqoop #IT
Hadoop не существует в одиночку. Он окружён целым рядом проектов Apache, которые расширяют его возможности и предоставляют дополнительные инструменты для работы с большими данными.
Apache Hive:
Hive — это инструмент для выполнения SQL-запросов на данных, хранящихся в Hadoop. Он был разработан для того, чтобы аналитики и разработчики могли использовать привычный им язык SQL для работы с большими объёмами данных, хранящихся в HDFS. Hive отлично подходит для анализа структурированных данных и выполнения сложных запросов.
Apache HBase:
HBase — это распределённая, масштабируемая база данных NoSQL, которая работает поверх HDFS. Она предназначена для работы с большими объёмами данных в режиме реального времени и поддерживает как чтение, так и запись данных. HBase используется для хранения данных, требующих быстрой записи и доступа.
Apache Ambari:
Ambari — это инструмент для управления и мониторинга кластеров Hadoop. Он предоставляет простой и удобный веб-интерфейс для установки, настройки и управления кластерами Hadoop. С помощью Ambari можно отслеживать производительность системы, управлять конфигурациями и автоматизировать задачи администрирования.
Apache Tez:
Tez — это фреймворк, который оптимизирует выполнение заданий в Hadoop. Он был разработан как замена для MapReduce и позволяет выполнять сложные цепочки задач более эффективно и с меньшими задержками. Tez поддерживает выполнение DAG (Directed Acyclic Graph) задач, что делает его более гибким и производительным для различных аналитических приложений.
Apache Spark:
Spark — это мощный фреймворк для обработки данных, который может работать как самостоятельное решение, так и поверх Hadoop. В отличие от MapReduce, Spark поддерживает обработку данных в оперативной памяти, что делает его значительно быстрее для многих задач. Spark также поддерживает широкий спектр рабочих нагрузок, включая обработку в режиме реального времени, машинное обучение и анализ графов, что делает его универсальным инструментом для анализа данных.
Apache ZooKeeper:
ZooKeeper — это централизованная служба для управления конфигурацией, синхронизации распределённых приложений и обслуживания групповых служб. Он играет важную роль в обеспечении отказоустойчивости и управлении кластерами Hadoop.
Apache Sqoop:
Sqoop — это инструмент для передачи данных между Hadoop и реляционными базами данных. Он позволяет импортировать и экспортировать данные между HDFS и базами данных, такими как MySQL, PostgreSQL и другие.
———
Эти проекты, работающие вместе с Hadoop, создают мощную и гибкую экосистему для решения самых разнообразных задач, связанных с большими данными.
#BigData #Hadoop #HDFS #MapReduce #YARN #Hive #HBase #Ambari #Tez #Spark #ZooKeeper #Sqoop #IT
👍3❤2
Мои итоги 2024 года 🎄🌲
Если прошлый год был годом открытий, то этот год - годом потрясений.
Тоже своего рода год открытий. Просто с другим оттенком).
———
Всех с праздниками! 🍾🥂
https://telegra.ph/Itogi-2024-goda-12-31-7
Если прошлый год был годом открытий, то этот год - годом потрясений.
Тоже своего рода год открытий. Просто с другим оттенком).
———
Всех с праздниками! 🍾🥂
https://telegra.ph/Itogi-2024-goda-12-31-7
Telegraph
Итоги 2024 года
Казалось бы что все хорошо. Все есть: крыша над головой, хорошая работа, 2-е прекрасных детей. В начале года купил машину. Стал регулярно ходить в зал. В будущем хорошие перспективы. Но за всем этим ты не замечаешь какой крутой поворот готовит тебе жизнь.…
👍3🍾3🔥2
Завершил чтение книги Аниче Маурисио "Простое объектно-ориентированное проектирование: чистый и гибкий код." — СПб.: Питер, 2025. — 224 с.
Хорошая книга. Обобщает практические советы ООП-проектирования, помогающие сохранять простоту кодовой базы.
Не могу сказать что материал для меня оказался новым. Данная книга в любом случае обобщила и систематизировала те знания, которые я получил ранее.
Книгу легко читать. Рекомендую.
———
#coder #coding #programmer #stepbystep #шагзашагом #учусьпрограммировать #учусь #book
Хорошая книга. Обобщает практические советы ООП-проектирования, помогающие сохранять простоту кодовой базы.
Не могу сказать что материал для меня оказался новым. Данная книга в любом случае обобщила и систематизировала те знания, которые я получил ранее.
Книгу легко читать. Рекомендую.
———
#coder #coding #programmer #stepbystep #шагзашагом #учусьпрограммировать #учусь #book
👍8
Чтобы стать хорошим программистом, необходимо понимать принципы обобщенного программирования. Чтобы понимать принципы обобщенного программирования, нужно понимать абстракции. Чтобы понимать абстракции, нужно понимать лежащие в их основе математические идеи.
= "От математики к обобщенному программированию" Александр А. Степанов, Дэниэл Э. Роуз (2015)
👍6❤2🏆1
OSI (The Open Systems Interconnection model)
Сетевая модель OSI (The Open Systems Interconnection model) — сетевая модель стека (магазина) сетевых протоколов OSI/ISO. Посредством данной модели различные сетевые устройства могут взаимодействовать друг с другом. Модель определяет различные уровни взаимодействия систем. Каждый уровень выполняет определённые функции при таком взаимодействии.
OSI состоит из двух основных частей:
- абстрактная модель сетевого взаимодействия (семиуровневая модель);
- набор специализированных протоколов взаимодействия;
Концепция семиуровневой модели была описана в работе Чарльза Бахмана. Данная модель подразделяет коммуникационную систему на уровни абстракции (англ. "abstraction layers"). В модели OSI средства взаимодействия делятся на семь уровней: прикладной, представления, сеансовый, транспортный, сетевой, канальный и физический.
Каждый уровень:
- имеет дело с совершенно определенным аспектом взаимодействия сетевых устройств;
- обслуживает уровень, находящийся непосредственно над ним, и обслуживается уровнем, находящимся под ним;
Сетевая модель OSI (The Open Systems Interconnection model) — сетевая модель стека (магазина) сетевых протоколов OSI/ISO. Посредством данной модели различные сетевые устройства могут взаимодействовать друг с другом. Модель определяет различные уровни взаимодействия систем. Каждый уровень выполняет определённые функции при таком взаимодействии.
OSI состоит из двух основных частей:
- абстрактная модель сетевого взаимодействия (семиуровневая модель);
- набор специализированных протоколов взаимодействия;
Концепция семиуровневой модели была описана в работе Чарльза Бахмана. Данная модель подразделяет коммуникационную систему на уровни абстракции (англ. "abstraction layers"). В модели OSI средства взаимодействия делятся на семь уровней: прикладной, представления, сеансовый, транспортный, сетевой, канальный и физический.
Каждый уровень:
- имеет дело с совершенно определенным аспектом взаимодействия сетевых устройств;
- обслуживает уровень, находящийся непосредственно над ним, и обслуживается уровнем, находящимся под ним;
👍3🔥3👏1
[Тренажерный зал]
Незаметно для себя у меня появилась сильная привычка ходить в тренажерный зал. Если пропускаю пару дней, то чувствую себя не очень).
Последние пол года посещаю зал практически ежедневно. Вечером, после работы.
Первые пол года ходил с тренером. Учился. Последние 7 месяцев хожу сам.
Хожу в зал просто так. Без каких-либо глобальных целей.
Сначала стремился толкнуть 100 кг в жиме лежа. Сейчас спокойно подхожу к штанге 110 кг. Для моих физических данных (рост - 190см, вес - 83кг, возраст - 32 года) считаю довольно достойным результатом.
Большим качком быть не хочу. Ничего дополнительно не употребляю (ну прям вообще ничего).
Для меня походы в зал - это прежде всего поддержание физической формы (с ментальной формой тоже помогает очень хорошо).
Сейчас я очень доволен своей физической формой. Последние несколько месяцев регулярно начал получать похвалу и комплименты в зале. Каждая тренировка начинается с беговой дорожки, заканчивается упражнениями на пресс. Также не забываю про день ног (это прям база).
Благодаря залу стал лучше прислушиваться к организму. Стал лучше спать.
В зале организм сразу дает понять, если ты что-то сделал неправильно накануне.
___
Как у вас обстоят дела со спортом? Делитесь своими результатами/достижениями?
Незаметно для себя у меня появилась сильная привычка ходить в тренажерный зал. Если пропускаю пару дней, то чувствую себя не очень).
Последние пол года посещаю зал практически ежедневно. Вечером, после работы.
Первые пол года ходил с тренером. Учился. Последние 7 месяцев хожу сам.
Хожу в зал просто так. Без каких-либо глобальных целей.
Сначала стремился толкнуть 100 кг в жиме лежа. Сейчас спокойно подхожу к штанге 110 кг. Для моих физических данных (рост - 190см, вес - 83кг, возраст - 32 года) считаю довольно достойным результатом.
Большим качком быть не хочу. Ничего дополнительно не употребляю (ну прям вообще ничего).
Для меня походы в зал - это прежде всего поддержание физической формы (с ментальной формой тоже помогает очень хорошо).
Сейчас я очень доволен своей физической формой. Последние несколько месяцев регулярно начал получать похвалу и комплименты в зале. Каждая тренировка начинается с беговой дорожки, заканчивается упражнениями на пресс. Также не забываю про день ног (это прям база).
Благодаря залу стал лучше прислушиваться к организму. Стал лучше спать.
В зале организм сразу дает понять, если ты что-то сделал неправильно накануне.
___
Как у вас обстоят дела со спортом? Делитесь своими результатами/достижениями?
🔥9
[Знакомство с DDD]
Начал проходить обучение по DDD (Domain Driven Design).
Крайне интересная тема.
Ниже прикладываю ссылку на статью как можно реализовать Value Object в Python.
https://dddinpython.hashnode.dev/value-objects-in-python
Начал проходить обучение по DDD (Domain Driven Design).
Крайне интересная тема.
Ниже прикладываю ссылку на статью как можно реализовать Value Object в Python.
https://dddinpython.hashnode.dev/value-objects-in-python
DDD in Python
Implementing Value Objects in Python
A Value Object is one of the fundamental building blocks of Domain-Driven Design. It is a small object (in terms of memory), which consists of one or more attributes, and which represents a conceptual whole. Value Object is usually a part of Entity.
...
...
👍6
[Entity и Value Object в DDD]
Привет! В DDD сразу встречаешь два ключевых понятия — Entity и Value Object. Оба вроде как про данные, но ведут себя по-разному.
Что такое `Entity`?
Что такое `Value Object`?
Когда что использовать?
- Если объект уникален сам по себе — это
- Если важны только его значения — это
Фишка DDD:
Хорошая практика — делать
#DDD #Python #Entity #ValueObject #Программирование
Привет! В DDD сразу встречаешь два ключевых понятия — Entity и Value Object. Оба вроде как про данные, но ведут себя по-разному.
Что такое `Entity`?
Entity
— это объект, который имеет уникальный идентификатор и жизненный цикл. Его идентичность важна, и она сохраняется на протяжении всего времени существования объекта. Например, пользователь в системе (User) — это Entity
, потому что у него есть уникальный ID, и даже если его имя или email изменятся, это все равно будет тот же самый пользователь.from dataclasses import dataclass, field
import uuid
@dataclass
class User:
name: str
email: str
id: uuid.UUID = field(default_factory=uuid.uuid4, init=False)
def __eq__(self, other):
if isinstance(other, User):
return self.id == other.id
return False
# Пример использования:
user1 = User("Иван", "ivan@example.com")
user2 = User("Иван", "ivan@example.com")
print(user1) # User(name='Иван', email='ivan@example.com', id=...)
print(user2) # User(name='Иван', email='ivan@example.com', id=...)
print(user1 == user2) # False, потому что ID разные
Что такое `Value Object`?
Value Object
, в отличие от Entity
, не имеет идентичности. Он определяется своими атрибутами, и если все атрибуты одинаковы, то два Value Object
считаются равными. Value Object
обычно неизменяемы (immutable), что делает их более предсказуемыми и безопасными в использовании.from dataclasses import dataclass
import re
@dataclass(frozen=True)
class EmailAddress:
value: str
def __post_init__(self):
if not self._is_valid_email(self.value):
raise ValueError(f"Некорректный email: {self.value}")
@staticmethod
def _is_valid_email(email: str) -> bool:
pattern = r"^[\w\.-]+@[\w\.-]+\.\w+$"
return re.match(pattern, email) is not None
# Пример использования:
try:
email1 = EmailAddress("valid.email@example.com")
print(email1) # EmailAddress(value='valid.email@example.com')
email2 = EmailAddress("invalid-email") # Ошибка валидации!
except ValueError as e:
print(e)
Когда что использовать?
- Если объект уникален сам по себе — это
Entity
.- Если важны только его значения — это
Value Object
.Фишка DDD:
Хорошая практика — делать
Value Objects
иммутабельными и использовать их для инкапсуляции логики. Например, не просто string
для email
, а EmailAddress
, который сразу валидирует значение.Entity
и Value Object
— это мощные концепции, которые помогают структурировать код и делать его более предсказуемым. В Python их реализация может быть элегантной с использованием dataclasses
.#DDD #Python #Entity #ValueObject #Программирование
🔥6
[Агрегаты в DDD: Организация сложности через границы]
В Domain-Driven Design (DDD) работа с сложными доменными моделями требует четкой структуры, чтобы избежать хаоса.
Агрегат (Aggregate) — один из ключевых паттернов DDD, который помогает управлять целостностью данных и упрощает взаимодействие с моделью.
Что такое Aggregate?
Агрегат — это кластер связанных объектов, рассматриваемых как единое целое.
Он объединяет:
1) Корень агрегата (Aggregate Root) — единственная точка входа для внешних взаимодействий.
2) Внутренние сущности (Entity) и value-объекты (ValueObject) — элементы, которые могут изменяться только через корень.
По своей сути агрегат - это тоже Entity.
Зачем нужны агрегаты?
- Консистентность данных
Агрегат гарантирует, что изменения внутри него соответствуют бизнес-правилам. Например, нельзя добавить OrderItem с отрицательной ценой — корень проверяет это.
- Границы транзакций
Изменения в рамках одного агрегата обычно выполняются в одной транзакции. Это упрощает управление конкурентным доступом.
- Сокрытие сложности
Внешние системы не знают о внутренней структуре агрегата — они работают только с корнем.
Ключевые принципы проектирования:
- Единый корень
Все внешние запросы идут через корень. Если нужно изменить дочерний объект — делайте это через методы корня.
- Инварианты внутри границ
Правила целостности (например, «максимум 10 товаров в заказе») должны соблюдаться внутри агрегата.
- Ссылки только на корни других агрегатов
Агрегаты не должны хранить ссылки на внутренние объекты чужих агрегатов — только на их корни (через идентификаторы).
Пример:
Агрегат Заказ (корень) включает элементы заказа (OrderItem), адрес доставки и методы для добавления/удаления товаров. Внешние системы обращаются только к Order, а не к OrderItem напрямую.
Ошибки при работе с агрегатами:
- Слишком большие агрегаты
Если агрегат включает десятки сущностей, это усложняет транзакции и повышает риск конфликтов.
Решение: Дробите агрегаты, ориентируясь на бизнес-контекст.
- Нарушение инкапсуляции
Прямое изменение дочерних объектов в обход корня ломает целостность.
Решение: Скрывайте внутренние структуры (private поля, методы только для корня).
Как определить границы агрегата?
- Ищите транзакционные границы — что должно изменяться атомарно?
- Анализируйте бизнес-инварианты — какие правила связывают объекты?
- Избегайте «анаемичных» агрегатов — они должны содержать логику, а не быть просто набором данных.
———
Итого
Агрегаты в DDD — это не просто группировка классов, а способ защитить целостность домена и управлять сложностью.
Правильно выбранные границы агрегатов делают код:
- Более понятным,
- Устойчивым к ошибкам,
- Легким для масштабирования.
Главное правило:
Если сомневаетесь — делайте агрегаты меньше. Четкие границы спасут в долгосрочной перспективе!
P.s.
Полезная ссылка про агрегаты: https://dddinpython.hashnode.dev/mastering-aggregates-in-domain-driven-design
#DDD #Python #Aggregate #Entity #ValueObject #Программирование
В Domain-Driven Design (DDD) работа с сложными доменными моделями требует четкой структуры, чтобы избежать хаоса.
Агрегат (Aggregate) — один из ключевых паттернов DDD, который помогает управлять целостностью данных и упрощает взаимодействие с моделью.
Что такое Aggregate?
Агрегат — это кластер связанных объектов, рассматриваемых как единое целое.
Он объединяет:
1) Корень агрегата (Aggregate Root) — единственная точка входа для внешних взаимодействий.
2) Внутренние сущности (Entity) и value-объекты (ValueObject) — элементы, которые могут изменяться только через корень.
По своей сути агрегат - это тоже Entity.
Зачем нужны агрегаты?
- Консистентность данных
Агрегат гарантирует, что изменения внутри него соответствуют бизнес-правилам. Например, нельзя добавить OrderItem с отрицательной ценой — корень проверяет это.
- Границы транзакций
Изменения в рамках одного агрегата обычно выполняются в одной транзакции. Это упрощает управление конкурентным доступом.
- Сокрытие сложности
Внешние системы не знают о внутренней структуре агрегата — они работают только с корнем.
Ключевые принципы проектирования:
- Единый корень
Все внешние запросы идут через корень. Если нужно изменить дочерний объект — делайте это через методы корня.
- Инварианты внутри границ
Правила целостности (например, «максимум 10 товаров в заказе») должны соблюдаться внутри агрегата.
- Ссылки только на корни других агрегатов
Агрегаты не должны хранить ссылки на внутренние объекты чужих агрегатов — только на их корни (через идентификаторы).
Пример:
Агрегат Заказ (корень) включает элементы заказа (OrderItem), адрес доставки и методы для добавления/удаления товаров. Внешние системы обращаются только к Order, а не к OrderItem напрямую.
Ошибки при работе с агрегатами:
- Слишком большие агрегаты
Если агрегат включает десятки сущностей, это усложняет транзакции и повышает риск конфликтов.
Решение: Дробите агрегаты, ориентируясь на бизнес-контекст.
- Нарушение инкапсуляции
Прямое изменение дочерних объектов в обход корня ломает целостность.
Решение: Скрывайте внутренние структуры (private поля, методы только для корня).
Как определить границы агрегата?
- Ищите транзакционные границы — что должно изменяться атомарно?
- Анализируйте бизнес-инварианты — какие правила связывают объекты?
- Избегайте «анаемичных» агрегатов — они должны содержать логику, а не быть просто набором данных.
———
Итого
Агрегаты в DDD — это не просто группировка классов, а способ защитить целостность домена и управлять сложностью.
Правильно выбранные границы агрегатов делают код:
- Более понятным,
- Устойчивым к ошибкам,
- Легким для масштабирования.
Главное правило:
Если сомневаетесь — делайте агрегаты меньше. Четкие границы спасут в долгосрочной перспективе!
P.s.
Полезная ссылка про агрегаты: https://dddinpython.hashnode.dev/mastering-aggregates-in-domain-driven-design
#DDD #Python #Aggregate #Entity #ValueObject #Программирование
👍4