Yimian — ведущий поставщик аналитики данных с использованием искусственного интеллекта, специализирующийся на данных цифровой коммерции. Мы предлагаем реальные временные сведения для стратегии бизнеса, разработки продуктов и операций в области цифровой коммерции. Многие наши клиенты являются лидерами отрасли в сферах личной гигиены, макияжа, продуктов питания и напитков, товаров для животных и автомобильной индустрии, такие как Procter and Gamble, Unilever и Mars.
Изначальная архитектура нашей технологии представляла собой кластер больших данных, построенный с использованием CDH (Cloudera Distributed Hadoop) в собственном центре данных. По мере роста нашего бизнеса объем данных резко увеличился.
Чтобы справиться с такими проблемами, как длительные циклы масштабирования, несоответствие ресурсов вычислений и хранения, а также высокие затраты на обслуживание, мы решили трансформировать нашу архитектуру данных и перенести ее в облако, приняв подход к разделению хранения и вычислений. После тщательной оценки, мы приняли Elastic MapReduce (EMR) от Alibaba Cloud + JuiceFS + Alibaba Cloud Object Storage Service (OSS).
В настоящее время, с помощью JuiceFS, мы реализовали архитектурное разделение вычислений и хранения, удвоив общую емкость хранилища. Примечательно, что мы не заметили значительного влияния на производительность, и наши операционные затраты значительно снизились.
В этой статье мы поделимся нашим архитектурным дизайном для миграции Hadoop в облако, почему мы выбрали JuiceFS+EMR+OSS и как мы извлекаем выгоду из новой архитектуры. Наша цель — предложить ценные идеи тем, кто сталкивается с аналогичными проблемами через этот пост.
Наша Старая Архитектура и Проблемы
Чтобы удовлетворить растущие потребности наших приложений, мы собирали данные с сотен крупных веб-сайтов, текущее количество которых превышает 500. Со временем мы накопили значительные объемы исходных, промежуточных и результирующих данных. Поскольку мы продолжали расширять нашу веб-скрапинг и клиентскую базу, объем наших данных быстро увеличивался. Поэтому мы решили масштабировать наше аппаратное обеспечение для удовлетворения растущих потребностей.
Оригинальная Архитектура
На следующем рисунке показана наша предыдущая архитектура, которая включала в себя кластер больших данных на основе CDH, развернутый в дата-центре:
- Ключевыми компонентами были Hive, Spark и HDFS.
- Несколько систем производства данных, включая Kafka, поставляли данные в кластер.
- Мы использовали другие решения для хранения данных, такие как TiDB, HBase и MySQL, наряду с Kafka.

Данные поступали от систем верхнего уровня приложений и систем сбора данных, где они записывались в Kafka. Мы использовали кластер Kafka Connect для синхронизации данных в HDFS.
На основе этой архитектуры мы разработали собственную платформу для разработки данных под названием OneWork для управления различными задачами. Эти задачи планировались через Airflow и обрабатывались в очередях задач.
Наши Болезненные Точки
Проблемы, с которыми мы столкнулись, были следующими:
- Быстрый рост данных приложений и длительные циклы масштабирования: Наша CDH-кластера, развернутая в 2016 году, уже обрабатывала петабайты данных к 2021 году. Однако рост данных часто превышал планирование аппаратного обеспечения, что приводило к частым масштабированиям каждые шесть месяцев. Это потребовало значительных ресурсов и времени.
- Сцепление хранения и вычислений, а также сложность планирования емкости: Традиционная архитектура Hadoop имеет тесное сцепление хранения и вычислений, что затрудняет независимое масштабирование и планирование в соответствии с потребностями в хранении или вычислительных ресурсах. Например, расширение хранения также потребовало бы покупки ненужных вычислительных ресурсов. Это привело к неэффективному распределению ресурсов.
- Боязнь обновления из-за старой версии CDH: Наша версия CDH была устаревшей, и мы колебались с обновлением из-за опасений по поводу стабильности и совместимости.
- Высокие операционные затраты: С около 200 сотрудниками у нас был только один штатный сотрудник по операциям. Это создавало большую нагрузку. Чтобы облегчить это, мы искали более стабильную и простую архитектуру.
- Один центр данных как точка отказа: Хранение всех данных в одном центре данных представляло долгосрочный риск. В случае повреждения кабелей или других проблем наличие одного центра данных создает точку отказа.
Наши требования к новой архитектуре
Чтобы решить наши проблемы и удовлетворить растущие потребности, мы решили внести изменения в архитектуру. Основные аспекты, которые мы рассмотрели для обновления, включают следующее:
- Принятие облачных услуг, эластичная масштабируемость и оперативная гибкость: Привлечение облачных сервисов упрощает операции. Например, использование облачного хранилища позволяет сосредоточиться на приложении, избегая задач по обслуживанию. Кроме того, облачные ресурсы обеспечивают эластичное масштабирование без длительных развертываний аппаратного обеспечения и настройки систем.
- Разделение хранения и вычислений: Наша цель заключалась в разделении хранения и вычислений для достижения большей гибкости и производительности.
- Преимущество открытого исходного кода, избегание зависимости от поставщика: Несмотря на использование облачных услуг, мы стремились минимизировать зависимость от конкретных поставщиков. Используя AWS Redshift для обслуживания клиентов, мы предпочитали открытые компоненты для внутренних операций.
- Совместимость с существующими решениями, контроль затрат и рисков: Наша цель заключалась в обеспечении совместимости с текущими решениями для минимизации затрат на разработку и воздействия на наше приложение.
Почему мы выбрали JuiceFS+EMR+OSS
После оценки различных решений, мы выбрали EMR+JuiceFS+OSS для создания разделенной платформы хранения и вычислений для больших данных и постепенно перенесли наш локальный центр данных в облако.

В этой конфигурации объектное хранилище заменяет HDFS, а JuiceFS выступает в качестве слоя протоколов благодаря поддержке POSIX и протоколов HDFS. На вершине мы используем полу-управляемое решение Hadoop, EMR. Оно включает Hive, Impala, Spark, Presto/Trino и другие компоненты.
Облако Alibaba против других публичных облаков
После тщательной оценки, мы выбрали Alibaba Cloud вместо AWS и Azure из-за следующих факторов:
- Близость: Доступность зоны Alibaba Cloud в одном городе с нашим дата-центром обеспечивает низкую задержку и снижение затрат на сеть.
- Комплексные открытые компоненты: Alibaba Cloud EMR предлагает широкий спектр открытых компонентов, связанных с Hadoop. Помимо интенсивного использования Hive, Impala, Spark и Hue, он также обеспечивает плавную интеграцию с Presto, Hudi, Iceberg и другими. В ходе нашего исследования мы обнаружили, что только EMR изначально включает Impala, в то время как AWS и Azure либо предлагают более низкие версии, либо требуют ручной установки и развертывания.
JuiceFS vs. JindoFS
Что такое JuiceFS?
JuiceFS — это открытый, ориентированный на облако, распределенный файловый систем с высокой производительностью. Он обеспечивает полную совместимость с POSIX, что позволяет использовать объектное хранилище в качестве массива локальных дисков в разных платформах и регионах.
JuiceFS использует разделенную архитектуру данных и метаданных, что позволяет создать распределенную файловую систему. При использовании JuiceFS для хранения данных сами данные хранятся в объектном хранилище, таком как Amazon S3, в то время как метаданные могут храниться в базах данных, таких как Redis, MySQL, TiKV, SQLite и других.
Помимо POSIX, JuiceFS полностью совместим с SDK HDFS, что позволяет плавно заменить HDFS для разделения хранения и вычислений.

Почему мы выбрали JuiceFS вместо JindoFS
Мы предпочли JuiceFS JindoFS на основе следующих соображений:
- Проектирование хранилища: JuiceFS использует архитектуру разделения хранения данных и метаданных, что позволяет создать распределенную файловую систему. Данные хранятся в объектном хранилище, а метаданные могут быть сохранены в различных базах данных, таких как Redis, MySQL, TiKV и SQLite, что обеспечивает большую гибкость. В отличие от этого, метаданные JindoFS хранятся на локальном жестком диске кластера EMR, что делает обслуживание, обновления и миграции менее удобными.
- Гибкость хранения: JuiceFS предлагает различные решения по хранению, поддерживая онлайн-миграцию между разными схемами и увеличивая мобильность. JindoFS блочные данные поддерживают только OSS.
- Поддержка открытого сообщества: JuiceFS основан на открытом сообществе, поддерживая все публичные облачные среды. Это облегчает будущее расширение до архитектуры мультиоблака.
Полный дизайн архитектуры
Учитывая, что некоторые приложения все еще будут сохранены в Hadoop-кластере дата-центра, мы фактически используем гибридную облачную архитектуру, как показано на рисунке ниже.

На схеме архитектуры:
- В верхней части расположены Airflow и OneWork, которые обе поддерживают распределенное развертывание, поэтому их можно легко масштабировать горизонтально.
- Слева находится ЦОД, который использует традиционную архитектуру CDH и некоторые кластеры Kafka.
- Справа расположен кластер EMR, развернутый в Alibaba Cloud.
ЦОД и кластер EMR соединены высокоскоростной специализированной линией.
Как мы извлекаем выгоду из новой архитектуры
Преимущества разделения хранения и вычислений
При реализации раз decoupling хранение-вычисление, наша общая емкость хранения удвоилась, в то время как вычислительные ресурсы остались стабильными. Иногда мы включаем временные узлы задач по мере необходимости. В нашей ситуации объем данных растет быстро, а потребности в запросах остаются стабильными. С 2021 года объем наших данных удвоился. Мы внесли минимальные изменения в вычислительные ресурсы с самого начала до настоящего времени, за исключением иногда включения эластичных ресурсов и временных узлов задач для удовлетворения конкретных потребностей приложений.
Изменения производительности
Для нашего сценария применения, который в основном включает крупномасштабное пакетное обработку для офлайн-вычислений, на производительность не оказывается значительного влияния. Однако во время фазы PoC мы наблюдали улучшение времени отклика для ad-hoc запросов Impala.
Во время фазы PoC мы провели некоторые простые тесты. Однако точно интерпретировать результаты затруднительно из-за различных влияющих факторов:
- Переход от HDFS к JuiceFS
- Обновление версий компонентов
- Изменения в движке Hive
- Изменения в нагрузке кластера
Все это затрудняет вывод определенных выводов о различиях в производительности по сравнению с нашей предыдущей реализацией CDH на физических серверах.
Удобство использования и стабильность
С JuiceFS мы не столкнулись с проблемами.
При использовании EMR у нас были незначительные проблемы. В целом, CDH воспринимается как более стабильный и удобный в использовании.
Сложность реализации
В нашем сценарии наиболее трудоемкими процессами являются инкрементальное двойное написание и проверка данных. Оглядываясь назад, мы чрезмерно вложили усилия в проверку и могли бы ее упростить.
Комплексность определяется многими факторами:
- Сценарии применения (офлайн/реального времени, количество таблиц/задач, вышестоящие приложения)
- Версии компонентов
- Поддерживающие инструменты и резервы
Будущие планы
Наши будущие планы включают:
- Продолжение миграции оставшихся приложений в облако.
- Исследование стратегии хранения холодного/горячего уровня с использованием JuiceFS+OSS. Файлы JuiceFS полностью разбираются на OSS, что затрудняет реализацию сегментации на уровне файлов. Наш текущий подход заключается в переносе холодных данных из JuiceFS в OSS, установке их в качестве архивной памяти и изменении LOCATION таблиц Hive или разделов без влияния на использование.
- Если объем данных увеличится и возникнет давление при использовании Redis, в будущем мы можем рассмотреть возможность перехода на TiKV или другие движки.
- Исследование эластичных вычислительных инстансов EMR для снижения затрат на использование при соблюдении соглашений о уровне обслуживания приложений.
Source:
https://dzone.com/articles/migrating-hadoop-to-the-cloud-2x-storage-capacity