• Apache Airflow: делаем ETL проще

    • Tutorial

    Привет, я Дмитрий Логвиненко — Data Engineer отдела аналитики группы компаний «Везёт».


    Я расскажу вам о замечательном инструменте для разработки ETL-процессов — Apache Airflow. Но Airflow настолько универсален и многогранен, что вам стоит присмотреться к нему даже если вы не занимаетесь потоками данных, а имеете потребность периодически запускать какие-либо процессы и следить за их выполнением.


    И да, я буду не только рассказывать, но и показывать: в программе много кода, скриншотов и рекомендаций.



    Что обычно видишь, когда гуглишь слово Airflow / Wikimedia Commons

    Читать дальше →
  • Запускаем Apache Spark на Kubernetes

      Дорогие читатели, доброго дня. Сегодня поговорим немного про Apache Spark и его перспективы развития.



      В современном мире Big Data Apache Spark является де факто стандартом при разработке задач пакетной обработки данных. Помимо этого, он также используется для создания стриминговых приложений, работающих в концепции micro batch, обрабатывающих и отгружающих данные маленькими порциями (Spark Structured Streaming). И традиционно он являлся частью общего стека Hadoop, используя в качестве менеджера ресурсов YARN (или, в некоторых случаях, Apache Mesos). К 2020 году его использование в традиционном виде для большинства компаний находится под большим вопросом в виду отсутствия приличных дистрибутивов Hadoop — развитие HDP и CDH остановлено, CDH недостаточно проработан и имеет высокую стоимость, а остальные поставщики Hadoop либо прекратили своё существование, либо имеют туманное будущее. Поэтому всё больший интерес у сообщества и крупных компаний вызывает запуск Apache Spark с помощью Kubernetes — став стандартом в оркестрации контейнеров и управлении ресурсами в приватных и публичных облаках, он решает проблему с неудобным планированием ресурсов задач Spark на YARN и предоставляет стабильно развивающуюся платформу с множеством коммерческих и открытых дистрибутивов для компаний всех размеров и мастей. К тому же на волне популярности большинство уже успело обзавестись парой-тройкой своих инсталляций и нарастить экспертизу в его использовании, что упрощает переезд.

      Начиная с версии 2.3.0 Apache Spark обзавёлся официальной поддержкой запуска задач в кластере Kubernetes и сегодня, мы поговорим о текущей зрелости данного подхода, различных вариантах его использования и подводных камнях, с которыми предстоит столкнуться при внедрении.
      Читать дальше →
    • Собеседую программистов на Java. Единый набор вопросов для любого уровня

        В своей карьере мне приходилось быть и разработчиком, и менеджером, и даже один раз «CTO» в небольшом стартапе. И, разумеется, приходилось проводить большое количество собеседований кадидатов. Поэтому для себя я выработал такие правила проведения технических собеседований:

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

        И вот такие три вопроса для Java-разработчиков у меня получились.
        Читать дальше →
      • IntelliJ IDEA: Structural Search & Replace

        • Tutorial

        Современные IDE — очень мощные инструменты, способные помогать разработчику в самых разных ситуациях. Но обратной стороной этой мощности является то, что большинство функций находится в тени — об их наличии мало кто подозревает.


        Простой пример одной такой функции

        А вы знаете, что, если в IDEA нажать F2, курсор перескочит к ближайшей ошибке в файле? А если нет ошибки, то к замечанию? Как-то так получается, что об этом знают далеко не все.


        Одной такой функцией является Structural Search & Replace (SSR). Она может быть невероятно полезна в тех ситуациях, когда пасует всё богатое разнообразие других функций.


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


        1. 3D-движка для создания игр jMonkeyEngine, как пример большого проекта, в котором всегда можно найти что-то интересненькое.
        2. моего собственного проекта plantuml-native-image, в котором я провожу эксперименты по компиляции PlantUML в нативный исполняемый код с помощью GraalVM native-image.

        Собственно, случай во втором проекте и побудил меня к написанию статьи. Но обо всём по порядку...

        Читать дальше →
      • Квантовые эффекты приходят в макромир

        • Перевод

        Новые эксперименты раскрывают возможности крупномасштабных квантовых устройств



        Исследователи впервые продемонстрировали квантовую запутанность в механических системах. Концепцию одного из таких экспериментов художник изображает, как световое поле интерферометра, «переносящего» запутанное состояние. Фото предоставлено: Институт нанонауки им. Кавли, Делфтский технологический университет / Мориц Форш.

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

        Такие странные явления обычно возникают на субатомном уровне. Но недавно физики продемонстрировали запутанность и другие квантовые эффекты в крайних формах, наблюдая их в больших системах, включая облака атомов, квантовые барабаны, проводники и кремниевые чипы. Устройство за устройством они переносят квантовый мир на новую территорию — в макроскопический мир.
        Читать дальше →
      • Понятнее о S.O.L.I.D

        Большинство разработчиков с разговорами о принципах архитектурного дизайна, да и принципах чистой архитектуры вообще, обычно сталкивается разве что на очередном собеседовании. А зря. Мне приходилось работать с командами, которые ничего не слышали о S.O.L.I.D, и команды эти пролетали по срокам разработки на многие месяцы. Другие же команды, которые следовали принципам дизайна и тратили очень много времени на буквоедство, соблюдение принципов чистой архитектуры, код-ревью и написание тестов, в результате значительно экономили время Заказчика, писали лёгкий, чистый, удобочитаемый код, и, самое главное, получали от этого кайф.

        Сегодня мы поговорим о том, как следовать принципам S.O.L.I.D и получать от этого удовольствие.



        Что такое S.O.L.I.D? Погуглите — и получите 5 принципов, которые в 90% случаев описываются очень скупо. Скупость эта потом выливается в непонимание и долгие споры. Я же предлагаю вернуться к одному из признанных источников и хотя бы на время закрыть этот вопрос.

        Источником принципов S.O.L.I.D принято считать книгу Роберта Мартина «Чистая архитектура». Если у Вас есть время прочесть книгу, лучше отложите эту статью и почитайте книгу. Если времени у Вас нет, а завтра собес — велком.
        Читать дальше →
      • DI из ада

          Все мы любим Spring. Или не любим. Но по крайней мере знаем. Если вы Java-программист, то вероятно используете этот фреймворк каждый день в своей работе. Spring — это огромная платформа, которая предоставляет большой функционал. Тем не менее во главе угла стоят две вещи — это DI (Dependency Injection) и IoC (Inversion of Control). Концепции, которые были призваны, чтобы сделать наш код более читаемым и поддерживаемым. Но к несчастью, все оказалось не так радужно. Именно это мы сегодня и обсудим.


          Читать дальше →
        • Spring Data JPA

            В статье опишу использование Spring Data.

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

            Содержание:

            1. Spring Repository
            2. Методы запросов из имени метода
            3. Конфигурация и настройка
            4. Специальная обработка параметров
            5. Пользовательские реализации для репозитория
            6. Пользовательский Базовый Репозиторий
            7. Методы запросов — Query

            Читать дальше →
          • Spring MVC: создание веб-сайтов и RESTful сервисов

            • Перевод

            Вы можете использовать эту статью, чтобы понять, как использовать Spring MVC для создания веб-сайтов или RESTful сервисов. А также получить обзор часто задаваемых вопросов, охватывающих наиболее распространенные задачи Spring MVC.


            Примечание: Статья ~ 7500 слов, вероятно, не стоит читать ее на мобильном устройстве. Добавьте ее в закладки и вернитесь позже.


            Содержание


            Читать дальше →
            • +9
            • 7,2k
            • 3
          • 6 самых свежих курсов по Azure

              Привет, Хабр! Ранее мы опубликовали уже 3 статьи из 5 в нашей серии подборок интересных учебных курсов от Microsoft. Сегодня – уже четвертая часть, и в ней мы расскажем про самые свежие курсы по облаку Azure.

              Кстати!

              • Все курсы бесплатные (вы даже сможете попробовать платные продукты бесплатно);
              • 5/6 на русском языке;
              • Начать обучение можно мгновенно;
              • По окончании вы получите бейдж об успешном прохождении обучения.

              Присоединяйтесь, подробности под катом!

              Статьи из новой серии


              Статьи из этой серии


              Читать дальше →
            • Как работает Spring Boot Auto-Configuration

              • Перевод

              Глубокое погружение в мир аннотации Spring Boot @Conditional с проработанными примерами реализаций классов доступа к БД Mongo и MySQL.


              В моем посте «Почему Spring Boot?» было рассмотрено создание Spring Boot приложения, из которого вы едва ли сможете понять, что происходит за кулисами. Возможно, вы хотите понять магию автоконфигурации Spring Boot.


              Перед этим вы должны узнать о Spring аннотации @Conditional, от которой зависит вся магия автоконфигурации Spring Boot.

              Читать дальше →
            • AWS Lambda in Action на Java 11. Заезжаем с Serverless в «Production»

                Статья – гайд о том, как быстро и без боли начать использовать AWS Lambda на простом примере. Подойдет, как разработчику, не работавшему с Lambda вовсе, так и познавшему Cloud, чтобы оценить еще одно видение на разработку Serverless приложений.

                image
                Читать дальше →
                • +12
                • 4,7k
                • 7
              • Некоторые тонкости injection'а коллекций в Spring'е

                Всем привет! Меня зовут Владислав Родин. В настоящее время я преподаю на портале OTUS курсы, посвященные архитектуре ПО и архитектуре ПО, подверженного высокой нагрузке. Сейчас в OTUS'е открыт набор на новый поток курса Разработчик на Spring Framework. В преддверии старта курса я решил написать небольшой авторский материал, которым хочу поделиться с вами.





                Предыстория


                Spring содержит внутри себя много «магии», осуществляя самостоятельно некоторые неочевидные вещи. Незнание или непонимание этого может приводить к side-эффектам, с которыми вы можете столкнуться в процессе написания своего приложения, используя данный framework.

                Одной из таких неочевидных вещей является injection интерфейсов Java Collection Framework'а. Самостоятельно наступив на грабли, связанные с этой темой, и услышав очередные вопросы от коллег, я решил с ней разобраться и зафиксировать результаты своих исследований в виде статьи с надеждой, что она кому-то поможет уже в работе или при начальном освоении Spring'а.
                Читать дальше →
              • Greenplum 6: обзор новых фич

                  image Вот уже 16 лет как открытая массивно-параллельная СУБД Greenplum помогает самым разным предприятиям принимать решения на основе анализа данных.

                  За это время Greenplum проник в различные сферы бизнеса, в числе которых: ритейл, финтех, телеком, промышленность, e-commerce. Горизонтальное масштабирование до сотен узлов, отказоустойчивость, открытый исходный код, полная совместимость с PostgreSQL, транзакционность и ANSI SQL — трудно представить более удачное сочетание свойств для аналитической СУБД. Начиная от громадных кластеров в мировых компаниях-гигантах, как, например, Morgan Stanley (200 узлов, 25 Пб данных) или Tinkoff (>70 узлов), и заканчивая маленькими двух-нодовыми инсталляциями в уютных стартапах — всё больше компаний выбирают Greenplum. Особенно приятно наблюдать этот тренд в России — за последние два года количество крупных отечественных компаний, использующих Greenplum, выросло втрое.

                  Осенью 2019 года вышел очередной мажорный релиз СУБД. В этой статье я коротко расскажу об основных новых возможностях GP 6.
                  Читать дальше →
                  • +10
                  • 3,3k
                  • 6
                • Как реализуется отказоустойчивая веб-архитектура в платформе Mail.ru Cloud Solutions



                    Привет, Хабр! Я Артем Карамышев, руководитель команды системного администрирования Mail.Ru Cloud Solutions (MCS). За последний год у нас было много запусков новых продуктов. Мы хотели добиться, чтобы API-сервисы легко масштабировались, были отказоустойчивыми и готовыми к быстрому росту пользовательской нагрузки. Наша платформа реализована на OpenStack, и я хочу рассказать, какие проблемы отказоустойчивости компонентов нам пришлось закрыть, чтобы получить отказоустойчивую систему. Я думаю, это будет любопытно тем, кто тоже развивает продукты на OpenStack.

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

                    Видеоверсию этой истории, первоисточником которой стал доклад на конференции Uptime day 4, организованной ITSumma, можно посмотреть на YouTube-канале Uptime Community.
                    Читать дальше →
                    • +61
                    • 12,2k
                    • 5
                  • Книга «Современный язык Java. Лямбда-выражения, потоки и функциональное программирование»

                      imageПривет, Хаброжители! Преимущество современных приложений — в передовых решениях, включающих микросервисы, реактивные архитектуры и потоковую обработку данных. Лямбда-выражения, потоки данных и долгожданная система модулей платформы Java значительно упрощают их реализацию.

                      Книга поможет вам овладеть новыми возможностями современных дополнений, таких как API Streams и система модулей платформы Java. Откройте для себя новые подходы к конкурентности и узнайте, как концепции функциональности улучшают работу с кодом.

                      В этой книге: • Новые возможности Java • Потоковые данные и реактивное программирование • Система модулей платформы Java.
                      Читать дальше →
                    • 10 самых распространенных ошибок при работе с платформой Spring. Часть 1

                      • Перевод
                      Всем привет. Сегодня делимся первой частью статьи, перевод которой подготовлен специально для студентов курса «Разработчик на Spring Framework». Начнём!





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

                      В этой статье мы рассмотрим некоторые из самых распространенных ошибок, совершаемых при работе в Spring и связанных, в частности, с разработкой веб-приложений и использованием платформы Spring Boot. Как отмечается на веб-сайте Spring Boot, в Spring Boot используется стандартизованный подход к созданию готовых к эксплуатации приложений, и данная статья будет придерживаться этого подхода. В ней будет дан ряд рекомендаций, которые можно эффективно использовать при разработке стандартных веб-приложений на базе Spring Boot.
                      Читать дальше →
                      • +11
                      • 9,3k
                      • 8
                    • «Не вижу ни одного резона использовать Python для работы со Spark, кроме лени»

                        На днях мы решили пообщаться c Дмитрием Бугайченко (dmitrybugaychenko), одним из наших преподавателей программы "Анализ данных на Scala", и обсудить с ним актуальные вопросы использования Scala в задачах Data Science и Data Engineering. Дмитрий является инженером-аналитиком в "Одноклассниках".


                        image

                        Читать дальше →
                      • 42 оператора расширенного поиска Google (полный список)

                        • Перевод
                        • Tutorial
                        Те, кто давно занимается поисковой оптимизацией, хорошо знают об операторах расширенного поиска Google. Например, почти все знают об операторе site:, который ограничивает поисковую выдачу одним сайтом.

                        Большинство операторов легко запомнить, это короткие команды. Но уметь эффективно их использовать — совсем другая история. Многие специалисты знают основы, но немногие по-настоящему овладели этими командами.

                        В этой статье я поделюсь советами, которые помогут освоить поисковые операторы для 15 конкретных задач.
                        Читать дальше →
                        • +121
                        • 88,3k
                        • 40
                      • Балансировка нагрузки с Pacemaker и IPaddr (Active/Active cluster)

                        • Tutorial


                        Хочу рассказать вам еще об одном способе балансировки нагрузки. Про Pacemaker и IPaddr (ресурс-агент) и настройке его для Active/Passive кластера сказано уже и так достаточно много, но информации по организации полноценного Active/Active кластера, используя этот модуль я нашел крайне мало. Постараюсь исправить эту ситуацию.


                        Для начала расскажу подробнее чем такой метод балансировки примечателен:


                        • Отсутсвие внешнего балансировщика — На всех нодах в кластере настраивается один общий виртуальный IP-адрес. Все запросы отправляются на него. Ноды отвечают на запросы на этот адрес случайно и по договоренности между ссобой.
                        • Высокая доступность — Если одна нода падает ее обязаности подхватывает другая.
                        • Простота настройки — Настройка осуществляется всего в 3-5 команд.
                        Читать дальше →