2. Будем знакомы
• Меня зовут Саша
• Я работаю в Федеральном Казенном Учреждении
«Налог-Сервис» на должности главного
специалиста
• В мои должностные обязанности входит
эксплуатация Hadoop-кластера ФНС
3. Вы?
• Готов поспорить, немного программируете?
• Судя по названию конференции —
разрабатываете высоконагруженные(?) системы
• Пишете на PHP?
• Имеете опыт работы с MySQL?
• Используете MongoDB?
• ^ Ничего из этих трех пунктов мы в ФКУ «Налог-
Сервис» не делаем :)
5. Немного истории
• Попасть в большой проект очень просто — надо
сидеть дома и ждать, вам позвонят
• Когда я переступил порог московского филиала,
постановка задачи звучала как «всё плохо,
необходимо привести всё в порядок»
• Все было не так уж и плохо
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,
соответственно)
12. Бизнес-задачи
• Поиск ошибочных данных в налоговых
декларациях путем сравнения деклараций
контрагентов
• ^ Делается в отсутствие интерактивных
пользователей
13. Бизнес-задачи
• Поиск ошибочных данных в налоговых
декларациях путем сравнения деклараций
контрагентов
• ^ Делается в отсутствие интерактивных
пользователей
• Визуализация найденных несоответствий
(помогает налоговым инспекторам формировать
требования по НДС)
14. Бизнес-задачи
• Поиск ошибочных данных в налоговых
декларациях путем сравнения деклараций
контрагентов
• ^ Делается в отсутствие интерактивных
пользователей
• Визуализация найденных несоответствий
(помогает налоговым инспекторам формировать
требования по НДС)
• Обработка интерактивных запросов от налоговых
инспекторов
15. Бизнес-задачи
• Поиск ошибочных данных в налоговых
декларациях путем сравнения деклараций
контрагентов
• ^ Делается в отсутствие интерактивных
пользователей
• Визуализация найденных несоответствий
(помогает налоговым инспекторам формировать
требования по НДС)
• Обработка интерактивных запросов от налоговых
инспекторов
• ^ Делается в рабочее время
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
• Пожалуйста, ваши вопросы!