SlideShare a Scribd company logo
Минуты из жизни с Apache Spark
Шорин Александр
Инженер-разработчик DevOps
Apache Spark Meetup / 2017-04-27
Минуты из жизни
с Apache Spark
Минуты из жизни с Apache Spark
• OC FreeBSD 10.2
• Apache Hadoop YARN
2.6.0
• ~65 нод
• ~10TiB memory
• ~2000 vcores
• ~1PiB data
Фантастический Spark и где он обитает
Минуты из жизни с Apache Spark
Ожидание: 1.6.1 → 2.0.1
Реальность: 1.6.1 → 2.1.0
Как мы обновляли Apache Spark
Минуты из жизни с Apache Spark
Основные поломки:
• SPARK-13594: DataFrame.map → DataFrame.rdd.map
• SPARK-16033: DataFrameWriter.partitionBy() can't be
used together with DataFrameWriter.insertInto()
Полный список: SPARK-11806
В остальном существующий код продолжает работать.
Как мы обновляли Apache Spark
Минуты из жизни с Apache Spark
>>> df.collect()
Traceback (most recent call last):
...
Py4JError: An error occurred while calling o79.setCallSite
Падение Spark-драйвера
Минуты из жизни с Apache Spark
Архитектура PySpark
Минуты из жизни с Apache Spark
А что случится, если драйвер упадет?
Минуты из жизни с Apache Spark
Тем временем в stderr:
ERROR:py4j.java_gateway:An error occurred while trying to connect to the
Java server (127.0.0.1:40083)
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/py4j/java_gateway.py", line 963,
in start
self.socket.connect((self.address, self.port))
File "/usr/local/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
error: [Errno 61] Connection refused
Падение Spark-драйвера
Минуты из жизни с Apache Spark
>>> sc.stop()
Traceback (most recent call last):
...
Py4JNetworkError: An error occurred while trying to connect
to the Java server (127.0.0.1:40083)
Нельзя просто так взять
и остановить SparkContext
Минуты из жизни с Apache Spark
• Любые операции будут приводить к ConnectionRefused
• Попытка остановить SparkContext - ConnectionRefused
• Попытка запустить SparkContext - RuntimeError
• Безысходность, тлен и потеря
Падение Spark-драйвера
Минуты из жизни с Apache Spark
C 2.1.0: SPARK-18523
>>> df.collect()
Traceback (most recent call last):
...
Py4JError: An error occurred while calling o79.setCallSite
>>> sc.stop()
pyspark/context.py:386: RuntimeWarning: Unable to cleanly shutdown Spark
JVM process. It is possible that the process has crashed, been killed or may
also be in a zombie state.
RuntimeWarning
Падение Spark-драйвера [FIXED]
Минуты из жизни с Apache Spark
До 2.1.0:
• Инициализация SparkConf инициализировала драйвер;
• Нельзя было задать настройки драйвера без костылей
(SPARK_DRIVER_MEMORY,
PYSPARK_SUBMIT_ARGS, etc.);
С 2.1.0: SPARK-17387
>>> conf = SparkConf().set("spark.driver.memory", "4g")
>>> sc = SparkContext(conf=conf)
SparkConf и spark-submit
Минуты из жизни с Apache Spark
>>> rdd = sc.parallelize(range(10))
>>> rdd.toDF
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'RDD' object has no attribute 'toDF'
>>> spark0 = SparkSession(sc)
>>> rdd.toDF
<bound method RDD.toDF of ParallelCollectionRDD[0] at parallelize at
PythonRDD.scala:475>
>>> spark1 = spark0.newSession()
>>> spark1.stop() # что произойдет?
Архитектура PySpark
Минуты из жизни с Apache Spark
• До 2.1.0:
• Одноразовые метрики вида spark.application_*
• Как среди них находить метрики периодических задач?
• C 2.1.0:
• Появился spark.metrics.namespace SPARK-5847
• Каждая задача имеет свой понятный namespace
• Все spark.application_* отправляем в /dev/null
Мониторинг Apache Spark c Graphite
Минуты из жизни с Apache Spark
Мониторинг Apache Spark c Sentry
Минуты из жизни с Apache Spark
Что такое sentry?
• Удобный инструмент для Bug Driven Development;
• Продвинутый баг-треккер;
• Умеет группировать похожие ошибки, следить за
регрессиями;
• Разбирает трейсы и показывает из-за чего именно все
пошло не так;
Мониторинг Apache Spark c Sentry
Минуты из жизни с Apache Spark
Apache Spark:
• Интегрируется с log4j;
• Перехватывает все ERROR / WARNING сообщения;
• Можно отслеживать частоту ошибок и исправлять
самые критичные / массовые;
Мониторинг Apache Spark c Sentry
Минуты из жизни с Apache Spark
Минуты из жизни с Apache Spark
Python:
• Перехватывает исключения;
• Проходит по стектрейсу и извлекает контекст каждого;
• Можно понять из-за чего произошла ошибка и ее
исправить;
Мониторинг Apache Spark c Sentry
Минуты из жизни с Apache Spark
Минуты из жизни с Apache Spark
Python UDF:
• Поскольку код исполняется удаленно, нужно
прокидывать клиент Sentry в каждую функцию;
• Либо пропатчить pyspark.worker SPARK-20368;
Мониторинг Apache Spark c Sentry
Минуты из жизни с Apache Spark
1.Read http://spark.apache.org/contributing.html
2.Fork https://github.com/apache/spark
3.Patch && commit && push
4.Submit New Pull Request
5.…
6.PROFIT!!1
Как пропатчить Apache Spark под
FreeBSD
Минуты из жизни с Apache Spark
Спрашивайте свои ответы!
Спасибо за внимание!

More Related Content

What's hot

Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав Бахмутов
CodeFest
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
CodeFest
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Fwdays
 
Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]
Vsevolod Solovyov
 
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Ontico
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Ontico
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
Ontico
 
Введение в Akka
Введение в AkkaВведение в Akka
Введение в AkkaZheka Kozlov
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
Yuriy Nasretdinov
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
CodeFest
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Ontico
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Ontico
 
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Ontico
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Ontico
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей Федоров
CodeFest
 
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
Ontico
 
Архитектура хранения фотографий в Badoo
Архитектура хранения фотографий в BadooАрхитектура хранения фотографий в Badoo
Архитектура хранения фотографий в Badoo
Badoo Development
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Ontico
 
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Ontico
 
Drupal 8 и хостинг
Drupal 8 и хостингDrupal 8 и хостинг
Drupal 8 и хостинг
DrupalSPB
 

What's hot (20)

Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав Бахмутов
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]
 
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
 
Введение в Akka
Введение в AkkaВведение в Akka
Введение в Akka
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
 
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей Федоров
 
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
 
Архитектура хранения фотографий в Badoo
Архитектура хранения фотографий в BadooАрхитектура хранения фотографий в Badoo
Архитектура хранения фотографий в Badoo
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
 
Drupal 8 и хостинг
Drupal 8 и хостингDrupal 8 и хостинг
Drupal 8 и хостинг
 

Similar to Минуты из жизни со Spark

Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
Yandex
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими руками
StanislavMalkin
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
Alexander Syrotenko
 
Сравнение ТОП 5 SIEM РФ
Сравнение ТОП 5 SIEM РФСравнение ТОП 5 SIEM РФ
Сравнение ТОП 5 SIEM РФ
Pete Kuzeev
 
мифы о спарке
мифы о спарке мифы о спарке
мифы о спарке
Evgeny Borisov
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Ontico
 
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Unigine Corp.
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
Iosif Itkin
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
Michael Pankov
 
Хранилище 101
Хранилище 101Хранилище 101
Хранилище 101
Maxim Muzafarov
 
Поговорим про память
Поговорим про памятьПоговорим про память
Поговорим про память
Andrey Akinshin
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Ontico
 
Практические примеры использования API в инфраструктурных продуктах Cisco для...
Практические примеры использования API в инфраструктурных продуктах Cisco для...Практические примеры использования API в инфраструктурных продуктах Cisco для...
Практические примеры использования API в инфраструктурных продуктах Cisco для...
Cisco Russia
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Serversrit2010
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)guest40e031
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor SysoevMedia Gorod
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Yandex
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Vadim Kruchkov
 

Similar to Минуты из жизни со Spark (20)

Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими руками
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Сравнение ТОП 5 SIEM РФ
Сравнение ТОП 5 SIEM РФСравнение ТОП 5 SIEM РФ
Сравнение ТОП 5 SIEM РФ
 
мифы о спарке
мифы о спарке мифы о спарке
мифы о спарке
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
 
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
 
Хранилище 101
Хранилище 101Хранилище 101
Хранилище 101
 
Поговорим про память
Поговорим про памятьПоговорим про память
Поговорим про память
 
SAP hands on lab_ru
SAP hands on lab_ruSAP hands on lab_ru
SAP hands on lab_ru
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)
 
Практические примеры использования API в инфраструктурных продуктах Cisco для...
Практические примеры использования API в инфраструктурных продуктах Cisco для...Практические примеры использования API в инфраструктурных продуктах Cisco для...
Практические примеры использования API в инфраструктурных продуктах Cisco для...
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor Sysoev
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
 

Минуты из жизни со Spark

  • 1. Минуты из жизни с Apache Spark Шорин Александр Инженер-разработчик DevOps Apache Spark Meetup / 2017-04-27 Минуты из жизни с Apache Spark
  • 2. Минуты из жизни с Apache Spark • OC FreeBSD 10.2 • Apache Hadoop YARN 2.6.0 • ~65 нод • ~10TiB memory • ~2000 vcores • ~1PiB data Фантастический Spark и где он обитает
  • 3. Минуты из жизни с Apache Spark Ожидание: 1.6.1 → 2.0.1 Реальность: 1.6.1 → 2.1.0 Как мы обновляли Apache Spark
  • 4. Минуты из жизни с Apache Spark Основные поломки: • SPARK-13594: DataFrame.map → DataFrame.rdd.map • SPARK-16033: DataFrameWriter.partitionBy() can't be used together with DataFrameWriter.insertInto() Полный список: SPARK-11806 В остальном существующий код продолжает работать. Как мы обновляли Apache Spark
  • 5. Минуты из жизни с Apache Spark >>> df.collect() Traceback (most recent call last): ... Py4JError: An error occurred while calling o79.setCallSite Падение Spark-драйвера
  • 6. Минуты из жизни с Apache Spark Архитектура PySpark
  • 7. Минуты из жизни с Apache Spark А что случится, если драйвер упадет?
  • 8. Минуты из жизни с Apache Spark Тем временем в stderr: ERROR:py4j.java_gateway:An error occurred while trying to connect to the Java server (127.0.0.1:40083) Traceback (most recent call last): File "/usr/local/lib/python2.7/site-packages/py4j/java_gateway.py", line 963, in start self.socket.connect((self.address, self.port)) File "/usr/local/lib/python2.7/socket.py", line 224, in meth return getattr(self._sock,name)(*args) error: [Errno 61] Connection refused Падение Spark-драйвера
  • 9. Минуты из жизни с Apache Spark >>> sc.stop() Traceback (most recent call last): ... Py4JNetworkError: An error occurred while trying to connect to the Java server (127.0.0.1:40083) Нельзя просто так взять и остановить SparkContext
  • 10. Минуты из жизни с Apache Spark • Любые операции будут приводить к ConnectionRefused • Попытка остановить SparkContext - ConnectionRefused • Попытка запустить SparkContext - RuntimeError • Безысходность, тлен и потеря Падение Spark-драйвера
  • 11. Минуты из жизни с Apache Spark C 2.1.0: SPARK-18523 >>> df.collect() Traceback (most recent call last): ... Py4JError: An error occurred while calling o79.setCallSite >>> sc.stop() pyspark/context.py:386: RuntimeWarning: Unable to cleanly shutdown Spark JVM process. It is possible that the process has crashed, been killed or may also be in a zombie state. RuntimeWarning Падение Spark-драйвера [FIXED]
  • 12. Минуты из жизни с Apache Spark До 2.1.0: • Инициализация SparkConf инициализировала драйвер; • Нельзя было задать настройки драйвера без костылей (SPARK_DRIVER_MEMORY, PYSPARK_SUBMIT_ARGS, etc.); С 2.1.0: SPARK-17387 >>> conf = SparkConf().set("spark.driver.memory", "4g") >>> sc = SparkContext(conf=conf) SparkConf и spark-submit
  • 13. Минуты из жизни с Apache Spark >>> rdd = sc.parallelize(range(10)) >>> rdd.toDF Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'RDD' object has no attribute 'toDF' >>> spark0 = SparkSession(sc) >>> rdd.toDF <bound method RDD.toDF of ParallelCollectionRDD[0] at parallelize at PythonRDD.scala:475> >>> spark1 = spark0.newSession() >>> spark1.stop() # что произойдет? Архитектура PySpark
  • 14. Минуты из жизни с Apache Spark • До 2.1.0: • Одноразовые метрики вида spark.application_* • Как среди них находить метрики периодических задач? • C 2.1.0: • Появился spark.metrics.namespace SPARK-5847 • Каждая задача имеет свой понятный namespace • Все spark.application_* отправляем в /dev/null Мониторинг Apache Spark c Graphite
  • 15. Минуты из жизни с Apache Spark Мониторинг Apache Spark c Sentry
  • 16. Минуты из жизни с Apache Spark Что такое sentry? • Удобный инструмент для Bug Driven Development; • Продвинутый баг-треккер; • Умеет группировать похожие ошибки, следить за регрессиями; • Разбирает трейсы и показывает из-за чего именно все пошло не так; Мониторинг Apache Spark c Sentry
  • 17. Минуты из жизни с Apache Spark Apache Spark: • Интегрируется с log4j; • Перехватывает все ERROR / WARNING сообщения; • Можно отслеживать частоту ошибок и исправлять самые критичные / массовые; Мониторинг Apache Spark c Sentry
  • 18. Минуты из жизни с Apache Spark
  • 19. Минуты из жизни с Apache Spark Python: • Перехватывает исключения; • Проходит по стектрейсу и извлекает контекст каждого; • Можно понять из-за чего произошла ошибка и ее исправить; Мониторинг Apache Spark c Sentry
  • 20. Минуты из жизни с Apache Spark
  • 21. Минуты из жизни с Apache Spark Python UDF: • Поскольку код исполняется удаленно, нужно прокидывать клиент Sentry в каждую функцию; • Либо пропатчить pyspark.worker SPARK-20368; Мониторинг Apache Spark c Sentry
  • 22. Минуты из жизни с Apache Spark 1.Read http://spark.apache.org/contributing.html 2.Fork https://github.com/apache/spark 3.Patch && commit && push 4.Submit New Pull Request 5.… 6.PROFIT!!1 Как пропатчить Apache Spark под FreeBSD
  • 23. Минуты из жизни с Apache Spark Спрашивайте свои ответы! Спасибо за внимание!