Слон
желтого
цвета и его
друзья
Alex Chistyakov
Будем знакомы
• Меня зовут Саша
• Я работаю в Федеральном Казенном Учреждении
«Налог-Сервис» на должности главного
специалиста
• В мои должностные обязанности входит
эксплуатация Hadoop-кластера ФНС
Вы?
• Готов поспорить, немного программируете?
• Судя по названию конференции —
разрабатываете высоконагруженные(?) системы
• Пишете на PHP?
• Имеете опыт работы с MySQL?
• Используете MongoDB?
• ^ Ничего из этих трех пунктов мы в ФКУ «Налог-
Сервис» не делаем :)
КДПВ
• Ужасного качества фото * (снимал на утюг)
Немного истории
• Попасть в большой проект очень просто — надо
сидеть дома и ждать, вам позвонят
• Когда я переступил порог московского филиала,
постановка задачи звучала как «всё плохо,
необходимо привести всё в порядок»
• Все было не так уж и плохо
Что было (факты)
• Полстойки BigData-решения от компании Cisco
Что было (факты)
• Полстойки BigData-решения от компании Cisco
• RHEL 6
Что было (факты)
• Полстойки BigData-решения от компании Cisco
• RHEL 6
• Установленный «дистрибутив» Hadoop от
компании Cloudera версии 5.2
Что было (факты)
• Полстойки BigData-решения от компании Cisco
• RHEL 6
• Установленный «дистрибутив» Hadoop от
компании Cloudera версии 5.2
• Разработчики в продакшн-системе,
меняющие настройки кластера через веб-
интерфейс
Что было (факты)
• Полстойки BigData-решения от компании Cisco
• RHEL 6
• Установленный «дистрибутив» Hadoop от
компании Cloudera версии 5.2
• Разработчики в продакшн-системе,
меняющие настройки кластера через веб-
интерфейс
• Приложение на Java и приложение на Scala,
решающие разные задачи с использованием
разных сервисов (YARN/HBase и Spark/Parquet,
соответственно)
Бизнес-задачи
• Поиск ошибочных данных в налоговых
декларациях путем сравнения деклараций
контрагентов
Бизнес-задачи
• Поиск ошибочных данных в налоговых
декларациях путем сравнения деклараций
контрагентов
• ^ Делается в отсутствие интерактивных
пользователей
Бизнес-задачи
• Поиск ошибочных данных в налоговых
декларациях путем сравнения деклараций
контрагентов
• ^ Делается в отсутствие интерактивных
пользователей
• Визуализация найденных несоответствий
(помогает налоговым инспекторам формировать
требования по НДС)
Бизнес-задачи
• Поиск ошибочных данных в налоговых
декларациях путем сравнения деклараций
контрагентов
• ^ Делается в отсутствие интерактивных
пользователей
• Визуализация найденных несоответствий
(помогает налоговым инспекторам формировать
требования по НДС)
• Обработка интерактивных запросов от налоговых
инспекторов
Бизнес-задачи
• Поиск ошибочных данных в налоговых
декларациях путем сравнения деклараций
контрагентов
• ^ Делается в отсутствие интерактивных
пользователей
• Визуализация найденных несоответствий
(помогает налоговым инспекторам формировать
требования по НДС)
• Обработка интерактивных запросов от налоговых
инспекторов
• ^ Делается в рабочее время
D — DevOps
• Culture
• Automation
• Measurement
• Sharing
C — Culture
• В петербургском филиале ФКУ «Налог-Сервис»
принято обращаться друг к другу по имени-
отчеству
A — Ansible
• Как будто есть что-то еще!
Б — Безопасность
• Внутренняя сеть не имеет подключения к
интернету
• Ничего нельзя внести и вынести
• Зато можно спать в спальнике на полу в
петербургском филиале, пока кластер считает
Первые шаги
• Не очень старый, но добрый Ansible
• Первый проект, в котором я при помощи Ansible
делал ad hoc команды
• ansible all -a "command" --sudo --user ansible
Первые шаги
• Не очень старый, но добрый Ansible
• Первый проект, в котором я при помощи Ansible
делал ad hoc команды
• ansible all -a "command" --sudo --user ansible
• Описание конфигурации в виде playbooks/roles
• Прямое переиспользование ролей из других
проектов почти невозможно — Cloudera очень
специальная вещь
Cloudera — …
• Управление через web-interface
• Параметры хранятся в базе PostgreSQL
• Где-то есть шаблоны, на основании которых
генерируются конфигурационные файлы
сервисов
Cloudera — …
• Управление через web-interface
• Параметры хранятся в базе PostgreSQL
• Где-то есть шаблоны, на основании которых
генерируются конфигурационные файлы
сервисов
• Сервисами заведует supervisord
• Конфигурационные файлы генерируются заново
для каждого запуска в каталоге с уникальным
монотонно возрастающим номером O_O
Cloudera — …
• Web-интерфейс «знает» далеко не про все
возможные параметры
• Значения вида -Xmx2048m не поддерживаются,
Cloudera manager разбирает ТОЛЬКО значения в
байтах
• Как быть, если нужно задать значение более
4-х гигабайт (в Int не помещается)? :)
Cloudera — …
• Web-интерфейс «знает» далеко не про все
возможные параметры
• Значения вида -Xmx2048m не поддерживаются,
Cloudera manager разбирает ТОЛЬКО значения в
байтах
• Как быть, если нужно задать значение более
4-х гигабайт (в Int не помещается)? :)
• ^ Отдельный вопрос: зачем выделять
контейнеру более 4-х гигабайт? O_o
Cloudera — …
• Зафиксировали конфигурацию при помощи
Ansible
• Оторвали web interface
• Получили набор странных проблем при рестарте
узла (конфигурация удаляется)
• Удивились, перенесли конфигурацию в другой
каталог
M — Measurement
• Church of Metrics
• В первую же неделю работы мы внесли в
закрытый контур LXC-контейнер с Grafana и
Graphite/Whisper
• Church of Metrics получила несколько новых
адептов :)
H — Highload :)
• 100% утилизация системного HDD на машине с
Grafana/Graphite/Whisper
• Жалобы разработчиков (они просто ничего не
понимают в мониторинге)
H — Highload :)
• 100% утилизация системного HDD на машине с
Grafana/Graphite/Whisper
• Жалобы разработчиков (они просто ничего не
понимают в мониторинге)
• Доказательства того, что узел и правда не
справляется (в логах видно, что не успевают
писаться логи)
O — OpenTSDB
• У нас уже есть HDFS и HBase
• Храним метрики в HBase
• Интерфейс рисования графиков в Grafana для
OpenTSDB — это боль
С — CPU (7 days)
• У нас уже есть HDFS и HBase
• Храним метрики в Hbase
• Интерфейс рисования графиков в Grafana для
OpenTSDB — это боль
C — CPU (12 hours)
• У нас уже есть HDFS и HBase
• Храним метрики в Hbase
• Интерфейс рисования графиков в Grafana для
OpenTSDB — это боль
Ж — Жадность
• У нас уже есть HDFS и HBase
• Храним метрики в Hbase
• Интерфейс рисования графиков в Grafana для
OpenTSDB — это боль
Б — Баланс
• У нас уже есть HDFS и HBase
• Храним метрики в Hbase
• Интерфейс рисования графиков в Grafana для
OpenTSDB — это боль
О — Отказ
• У нас уже есть HDFS и HBase
• Храним метрики в Hbase
• Интерфейс рисования графиков в Grafana для
OpenTSDB — это боль
О — Отказ
• supervisord в Cloudera так настроен, что после
трех попыток выключает сервис
• Однажды у нас выключились 11 region servers в
HBase
• Кластер работал БЕЗ ПОТЕРИ
ПРОИЗВОДИТЕЛЬНОСТИ
О — Отказ
• supervisord в Cloudera так настроен, что после
трех попыток выключает сервис
• Однажды у нас выключились 11 region servers в
HBase
• Кластер работал БЕЗ ПОТЕРИ
ПРОИЗВОДИТЕЛЬНОСТИ
• ^ WTF???!!!
Л — Локальность
• Свойство region server читать данные прямо с
data node
Л — Локальность
• Была 0 на всех region servers
• На HDFS data nodes — FQDN
• На HBase region servers — короткие символьные
имена
• Несовпадение имен — RS не считают, что данные
локальны
Л — Локальность
• Была 0 на всех region servers
• На HDFS data nodes — FQDN
• На HBase region servers — короткие символьные
имена
• Несовпадение имен — RS не считают, что данные
локальны
• Рестарт data nodes — теперь используются
короткие имена
• Major compaction всех таблиц
Л — Локальность
• Была 0 на всех region servers
• На HDFS data nodes — FQDN
• На HBase region servers — короткие символьные
имена
• Несовпадение имен — RS не считают, что данные
локальны
• Рестарт data nodes — теперь используются
короткие имена
• Major compaction всех таблиц
• И НУЛЕВОЙ ПРИРОСТ
ПРОИЗВОДИТЕЛЬНОСТИ! :)
S — Sampling
• kill -QUIT pid
• Скрипт на bash :)
• Анализ сэмплов вручную
• Слишком частые обращения к HBase metadata
• ^ быстро исправили
S — Sampling
• kill -QUIT pid
• Скрипт на bash :)
• Анализ сэмплов вручную
• Слишком частые обращения к HBase metadata
• ^ быстро исправили
• Low hanging fruits кончились, далее проблемы
внутри алгоритма — в сэмплах видим счет
Момент истины
• Неважно, сколько у вас в кластере узлов
• Важно, насколько хорошо параллелится ваш
алгоритм
• Не должно быть большого разброса во временах
исполнения однотипных подзадач в контейнерах
D — Docker
• Ничего не понятно!
• ^ Необходимость создания изолированной среды
D — Docker
• Ничего не понятно!
• ^ Необходимость создания изолированной среды
• «Тонкие контейнеры»
• ^ Не работают, YARN теряется в случае, когда
сеть сделана пробросом портов
D — Docker
• Ничего не понятно!
• ^ Необходимость создания изолированной среды
• «Тонкие контейнеры»
• ^ Не работают, YARN теряется в случае, когда
сеть сделана пробросом портов
• OpenVSwitch
• ^ Бывает, зависает в момент добавления новых
сетевых карт в бридж
D — Docker
• 2 тестовых машины
• Примерно по 10 контейнеров на каждой
• «Работает — не трогай»
• OpenVSwitch, процедура проверки
работоспособности сети и рестарта
• Понимание того, что с Docker нам не по пути :)
S — Sharing
• Одна пятидневная и две трехдневные
тренировочные сессии для коллег из московского
и петербургского филиалов
• Процесс развертывания всего стека с
комментариями, запись видео
• Преподавать — это круто! :)
• Ни за три дня, ни за пять дней материал усвоить
невозможно :(
• В планах — дистанционное обучение
В — Выводы
• В федеральных проектах тоже есть жизнь
• Она точно такая же, как и в любой большой
коммерческой компании
• Стек технологий Hadoop неплохо подходит для
анализа больших объемов данных
• Знание, по-прежнему, сила!
С — Спасибо!
• С вами был Александр Чистяков
• http://service-nalog.ru
• alex@gitinsky.com
• http://meetup.com/DevOps-40
• Пожалуйста, ваши вопросы!

My talk at Highload++ 2015

  • 1.
  • 2.
    Будем знакомы • Менязовут Саша • Я работаю в Федеральном Казенном Учреждении «Налог-Сервис» на должности главного специалиста • В мои должностные обязанности входит эксплуатация Hadoop-кластера ФНС
  • 3.
    Вы? • Готов поспорить,немного программируете? • Судя по названию конференции — разрабатываете высоконагруженные(?) системы • Пишете на PHP? • Имеете опыт работы с MySQL? • Используете MongoDB? • ^ Ничего из этих трех пунктов мы в ФКУ «Налог- Сервис» не делаем :)
  • 4.
    КДПВ • Ужасного качествафото * (снимал на утюг)
  • 5.
    Немного истории • Попастьв большой проект очень просто — надо сидеть дома и ждать, вам позвонят • Когда я переступил порог московского филиала, постановка задачи звучала как «всё плохо, необходимо привести всё в порядок» • Все было не так уж и плохо
  • 6.
    Что было (факты) •Полстойки BigData-решения от компании Cisco
  • 7.
    Что было (факты) •Полстойки BigData-решения от компании Cisco • RHEL 6
  • 8.
    Что было (факты) •Полстойки BigData-решения от компании Cisco • RHEL 6 • Установленный «дистрибутив» Hadoop от компании Cloudera версии 5.2
  • 9.
    Что было (факты) •Полстойки BigData-решения от компании Cisco • RHEL 6 • Установленный «дистрибутив» Hadoop от компании Cloudera версии 5.2 • Разработчики в продакшн-системе, меняющие настройки кластера через веб- интерфейс
  • 10.
    Что было (факты) •Полстойки BigData-решения от компании Cisco • RHEL 6 • Установленный «дистрибутив» Hadoop от компании Cloudera версии 5.2 • Разработчики в продакшн-системе, меняющие настройки кластера через веб- интерфейс • Приложение на Java и приложение на Scala, решающие разные задачи с использованием разных сервисов (YARN/HBase и Spark/Parquet, соответственно)
  • 11.
    Бизнес-задачи • Поиск ошибочныхданных в налоговых декларациях путем сравнения деклараций контрагентов
  • 12.
    Бизнес-задачи • Поиск ошибочныхданных в налоговых декларациях путем сравнения деклараций контрагентов • ^ Делается в отсутствие интерактивных пользователей
  • 13.
    Бизнес-задачи • Поиск ошибочныхданных в налоговых декларациях путем сравнения деклараций контрагентов • ^ Делается в отсутствие интерактивных пользователей • Визуализация найденных несоответствий (помогает налоговым инспекторам формировать требования по НДС)
  • 14.
    Бизнес-задачи • Поиск ошибочныхданных в налоговых декларациях путем сравнения деклараций контрагентов • ^ Делается в отсутствие интерактивных пользователей • Визуализация найденных несоответствий (помогает налоговым инспекторам формировать требования по НДС) • Обработка интерактивных запросов от налоговых инспекторов
  • 15.
    Бизнес-задачи • Поиск ошибочныхданных в налоговых декларациях путем сравнения деклараций контрагентов • ^ Делается в отсутствие интерактивных пользователей • Визуализация найденных несоответствий (помогает налоговым инспекторам формировать требования по НДС) • Обработка интерактивных запросов от налоговых инспекторов • ^ Делается в рабочее время
  • 16.
    D — DevOps •Culture • Automation • Measurement • Sharing
  • 17.
    C — Culture •В петербургском филиале ФКУ «Налог-Сервис» принято обращаться друг к другу по имени- отчеству
  • 18.
    A — Ansible •Как будто есть что-то еще!
  • 19.
    Б — Безопасность •Внутренняя сеть не имеет подключения к интернету • Ничего нельзя внести и вынести • Зато можно спать в спальнике на полу в петербургском филиале, пока кластер считает
  • 20.
    Первые шаги • Неочень старый, но добрый Ansible • Первый проект, в котором я при помощи Ansible делал ad hoc команды • ansible all -a "command" --sudo --user ansible
  • 21.
    Первые шаги • Неочень старый, но добрый Ansible • Первый проект, в котором я при помощи Ansible делал ad hoc команды • ansible all -a "command" --sudo --user ansible • Описание конфигурации в виде playbooks/roles • Прямое переиспользование ролей из других проектов почти невозможно — Cloudera очень специальная вещь
  • 22.
    Cloudera — … •Управление через web-interface • Параметры хранятся в базе PostgreSQL • Где-то есть шаблоны, на основании которых генерируются конфигурационные файлы сервисов
  • 23.
    Cloudera — … •Управление через web-interface • Параметры хранятся в базе PostgreSQL • Где-то есть шаблоны, на основании которых генерируются конфигурационные файлы сервисов • Сервисами заведует supervisord • Конфигурационные файлы генерируются заново для каждого запуска в каталоге с уникальным монотонно возрастающим номером O_O
  • 24.
    Cloudera — … •Web-интерфейс «знает» далеко не про все возможные параметры • Значения вида -Xmx2048m не поддерживаются, Cloudera manager разбирает ТОЛЬКО значения в байтах • Как быть, если нужно задать значение более 4-х гигабайт (в Int не помещается)? :)
  • 25.
    Cloudera — … •Web-интерфейс «знает» далеко не про все возможные параметры • Значения вида -Xmx2048m не поддерживаются, Cloudera manager разбирает ТОЛЬКО значения в байтах • Как быть, если нужно задать значение более 4-х гигабайт (в Int не помещается)? :) • ^ Отдельный вопрос: зачем выделять контейнеру более 4-х гигабайт? O_o
  • 26.
    Cloudera — … •Зафиксировали конфигурацию при помощи Ansible • Оторвали web interface • Получили набор странных проблем при рестарте узла (конфигурация удаляется) • Удивились, перенесли конфигурацию в другой каталог
  • 27.
    M — Measurement •Church of Metrics • В первую же неделю работы мы внесли в закрытый контур LXC-контейнер с Grafana и Graphite/Whisper • Church of Metrics получила несколько новых адептов :)
  • 28.
    H — Highload:) • 100% утилизация системного HDD на машине с Grafana/Graphite/Whisper • Жалобы разработчиков (они просто ничего не понимают в мониторинге)
  • 29.
    H — Highload:) • 100% утилизация системного HDD на машине с Grafana/Graphite/Whisper • Жалобы разработчиков (они просто ничего не понимают в мониторинге) • Доказательства того, что узел и правда не справляется (в логах видно, что не успевают писаться логи)
  • 30.
    O — OpenTSDB •У нас уже есть HDFS и HBase • Храним метрики в HBase • Интерфейс рисования графиков в Grafana для OpenTSDB — это боль
  • 31.
    С — CPU(7 days) • У нас уже есть HDFS и HBase • Храним метрики в Hbase • Интерфейс рисования графиков в Grafana для OpenTSDB — это боль
  • 32.
    C — CPU(12 hours) • У нас уже есть HDFS и HBase • Храним метрики в Hbase • Интерфейс рисования графиков в Grafana для OpenTSDB — это боль
  • 33.
    Ж — Жадность •У нас уже есть HDFS и HBase • Храним метрики в Hbase • Интерфейс рисования графиков в Grafana для OpenTSDB — это боль
  • 34.
    Б — Баланс •У нас уже есть HDFS и HBase • Храним метрики в Hbase • Интерфейс рисования графиков в Grafana для OpenTSDB — это боль
  • 35.
    О — Отказ •У нас уже есть HDFS и HBase • Храним метрики в Hbase • Интерфейс рисования графиков в Grafana для OpenTSDB — это боль
  • 36.
    О — Отказ •supervisord в Cloudera так настроен, что после трех попыток выключает сервис • Однажды у нас выключились 11 region servers в HBase • Кластер работал БЕЗ ПОТЕРИ ПРОИЗВОДИТЕЛЬНОСТИ
  • 37.
    О — Отказ •supervisord в Cloudera так настроен, что после трех попыток выключает сервис • Однажды у нас выключились 11 region servers в HBase • Кластер работал БЕЗ ПОТЕРИ ПРОИЗВОДИТЕЛЬНОСТИ • ^ WTF???!!!
  • 38.
    Л — Локальность •Свойство region server читать данные прямо с data node
  • 39.
    Л — Локальность •Была 0 на всех region servers • На HDFS data nodes — FQDN • На HBase region servers — короткие символьные имена • Несовпадение имен — RS не считают, что данные локальны
  • 40.
    Л — Локальность •Была 0 на всех region servers • На HDFS data nodes — FQDN • На HBase region servers — короткие символьные имена • Несовпадение имен — RS не считают, что данные локальны • Рестарт data nodes — теперь используются короткие имена • Major compaction всех таблиц
  • 41.
    Л — Локальность •Была 0 на всех region servers • На HDFS data nodes — FQDN • На HBase region servers — короткие символьные имена • Несовпадение имен — RS не считают, что данные локальны • Рестарт data nodes — теперь используются короткие имена • Major compaction всех таблиц • И НУЛЕВОЙ ПРИРОСТ ПРОИЗВОДИТЕЛЬНОСТИ! :)
  • 42.
    S — Sampling •kill -QUIT pid • Скрипт на bash :) • Анализ сэмплов вручную • Слишком частые обращения к HBase metadata • ^ быстро исправили
  • 43.
    S — Sampling •kill -QUIT pid • Скрипт на bash :) • Анализ сэмплов вручную • Слишком частые обращения к HBase metadata • ^ быстро исправили • Low hanging fruits кончились, далее проблемы внутри алгоритма — в сэмплах видим счет
  • 44.
    Момент истины • Неважно,сколько у вас в кластере узлов • Важно, насколько хорошо параллелится ваш алгоритм • Не должно быть большого разброса во временах исполнения однотипных подзадач в контейнерах
  • 45.
    D — Docker •Ничего не понятно! • ^ Необходимость создания изолированной среды
  • 46.
    D — Docker •Ничего не понятно! • ^ Необходимость создания изолированной среды • «Тонкие контейнеры» • ^ Не работают, YARN теряется в случае, когда сеть сделана пробросом портов
  • 47.
    D — Docker •Ничего не понятно! • ^ Необходимость создания изолированной среды • «Тонкие контейнеры» • ^ Не работают, YARN теряется в случае, когда сеть сделана пробросом портов • OpenVSwitch • ^ Бывает, зависает в момент добавления новых сетевых карт в бридж
  • 48.
    D — Docker •2 тестовых машины • Примерно по 10 контейнеров на каждой • «Работает — не трогай» • OpenVSwitch, процедура проверки работоспособности сети и рестарта • Понимание того, что с Docker нам не по пути :)
  • 49.
    S — Sharing •Одна пятидневная и две трехдневные тренировочные сессии для коллег из московского и петербургского филиалов • Процесс развертывания всего стека с комментариями, запись видео • Преподавать — это круто! :) • Ни за три дня, ни за пять дней материал усвоить невозможно :( • В планах — дистанционное обучение
  • 50.
    В — Выводы •В федеральных проектах тоже есть жизнь • Она точно такая же, как и в любой большой коммерческой компании • Стек технологий Hadoop неплохо подходит для анализа больших объемов данных • Знание, по-прежнему, сила!
  • 51.
    С — Спасибо! •С вами был Александр Чистяков • http://service-nalog.ru • alex@gitinsky.com • http://meetup.com/DevOps-40 • Пожалуйста, ваши вопросы!