Big data parallel computing

Парсим wikidump на Apache Spark

Текст википедии используется во множестве экспериментов машинного обучения, но как его получить самостоятельно, например для самой свежей версии или редкого языка?
Достаточно функциональной я нашёл библиотеку mwparserfromhell

Распаршенные данные можно сохранить в текстовых файлах, базе данных или в табличном формате на распределённой файловой системе. Но начать в любом случае нужно с дампа, который находится на dumps.wikimedia.org
Для параллельной обработки любым из способов удобнее будет скачать дамп в виде множества файлов вида enwiki-20200201-pages-articles-multistream1.xml-p10p30302.bz2

Для локальной обработки подойдёт код вида:

Но mwparserfromhell довольно требовательная к ресурсам библиотека. На обработку всей английской википедии требуется порядка 8 CPU дней. Поэтому воспользуется фреймворком распределённых вычислений Apache Spark.

Для доступности со всех вычислительных нод, следует разместить данные в распределённой файловой системе HDFS. Предварительно распаковав bz2 файлы, чтобы не тратить на это вычисления при каждом чтении.

Теперь xml файлы доступны для обработки, но ещё не разделены на отдельные страницы. Сохранить отдельные документы я решил в parquet файлы, которые могут хранить схематизированные таблицы. Для работы с xml я решил воспользоваться библиотекой com.databricks:spark-xml

Далее из текстов, содержащих wiki разметку требуется выделить чистый текст. В mwparserfromhell для этого есть метод strip_code().
Т.к. не на всех нодах нужная python библиотека может быть предустановлена, выполним дополнительный шаг prepare c pip install —user mwparserfromhell

Для его запуска нужно выполнить


После выполнения скрипта, можно посмотреть на результат

hardware Без рубрики

Домашняя 40GbE сеть

Недавно я заинтересовался темой настройки домашнего hadoop/hdfs/spark кластера, т.к. от апгрейдов осталось какое-то железо, а данные даже дома хочется обрабатывать в парадигме, которая масштабируется.

Вычислительно сложные задачи не всегда упираются даже в 1GbE соединение, но накладные расходы оно всё же вносит. Например, подсчёт слов в английской википедии с локальными данными выполняется за 10 минут, а с данными на соседней ноде — за 13 минут. Для их минимизации решил проапгрейдить сеть.

Доступные 10GbE сетевые адаптеры можно было найти уже давно, но неожиданным для меня оказалось, что 40GbE не дороже. На Авито и eBay Mellanox Connectx-3 mcx354а можно купить за $50.

Из приятного, в ubuntu 18.04 с ядром 5.3 сетевой интерфейс был доступен сразу после загрузки, без какой-либо дополнительной настройки.
Настройки потребовал только mtu. Его увеличение положительно сказывается на скорости.

А с настройкой mtu при загрузке возникли сложности, которые уже зарепорчены в https://bugs.launchpad.net/netplan/+bug/1724895
После применения рецепта из тикета, конфиг стал такой:

И можно не переживать о деградации производительности после перезагрузки.

ci/cd docker linux

Пробуем Teamcity с Docker

Teamcity — это, пожалуй, один и самых любимых мною продуктов JetBrains. Он и удобный, и гибкий, и вообще приятный в работе.

Бывает так, что я хочу попробовать свежую версию и не хочу париться с его настройкой и установкой. Теперь, сделать это проще простого: берём образы Docker и в путь!

Официальные образы лежат тут:

Казалось бы, запускать их уже и так просто, куда ещё упрощать?

Как бы не так! Можно проще при помощи docker-compose.

1. Устанавливаем docker-compose из пакетов:

2. Создаём каталог ~/test/teamcity

3. Пишем файл docker-compose.yml

4. Запускаем это всё

Радостные идём на http://localhost:8111/ тыкать мышкой для дальнейшей установки.

Если вдруг захотите запускать Teamcity в Docker на продакшен серверах, то рекомендую посмотреть тут готовые конфиги с Nginx и PostgreSQL: https://github.com/Egregors/teamcity-docker-compose

machine learning

Погружение в machine learning

До недавнего времени я занимался исключительно разработкой програмного и немного аппаратного обеспечения, но смена места работы подтолкнула меня открыть для себя целый новый мир машинного обучения. Хоть я и был знаком с реализацией некоторых методов ML ещё с университета, но осознание масштабов его применения стало для меня открытием.
Приведу нуже ссылки материалов, которые посчитал полезными:

Курсы

coursera.org/learn/vvedenie-mashinnoe-obuchenie — курс по ML, который отлично «вправляет мозги»

Модели

rusvectores.org/ru/ — word2vec модели для русского языка

Библиотеки

tensorflow.org/tutorials/ — туториалы к библиотеке по ML, которые объясняют почему модели работают. Например отличный разбор word2vec.
scikit-learn.org — swish army knife дата саентиста. Для тех, кто хочет чтобы «просто работало». До меня медленно доходило, что применение нового инструмента часто приносит больше пользы, чем мучительное допиливание старого. Т.е. для проверки гипотез рекомендовал бы именно эту библиотеку вместо более низкоуровневых и дающих больше контроля вроде tensorflow.
Читать далее »

arduino AVR electronic USB

Аппаратный эмулятор нажатий клавиш для Windows

Возможно вы просто искали способ эмуляции нажатия клавиши в приложении, и хотели найти SendMessage(WM_KEYDOWN)+SendMessage(WM_KEYUP) или SendInput(), но если вы уже столкнулись с тем, что этот способ вам не подходит, как, например, в играх, которые специально защищаются от подобных методов для усложнения жизни ботописателям, добро пожаловать под кат.

Читать далее »

libreoffice lifehack office

Отличные иконки для LibreOffice как в MS Office 2013

Я много раз начинал пользоваться LibreOffice и постоянно не понимал, что же мне в нём не нравится.

Теперь я знаю ответ на этот вопрос — меня раздражают иконки инструментов.

Иконки LibreOffice

Читать далее »

desktop html5 java javascript programming

Как разрабатывать HTML 5 Desktop приложения на Java?

vaadin-desktopМотивация

Кому могут понадобиться Desktop приложения, использующие веб-страницы в качестве UI? Отвечу прямо — всем! Всем кто страдает, пользуясь неудобными и некрасивыми приложениями.

Для меня, как для разработчика, очень важно делать пользовательские интерфейсы удобными, интересными и позволяющими пользователям не отвлекаться от работы. Кроме того, очень хочется, чтобы интерфейсы были привлекательными и их было приятно показывать. Все эти соображения приводят нас к неутешительному выводу: существующие UI фреймворки для настольных приложений ужасны.

Так что же такое есть в веб-приложениях, чего нет в настольных?

  • Разнообразие визуального оформления
  • Адаптивные и идеально-масштабируемые интерфейсы
  • Развитые анимации
  • Богатый набор компонентов и библиотек для разработки UI

Похожими возможностями обладают WPF для .NET приложений и JavaFX из мира Java. Но их компоненты не могут угнаться за стремительно развивающимися web-технологиями.

Читать далее »

enterprise event java programming

JavaOne 2015 и все-все-все

Как я попал на JavaOne ?
Если я буду рассказывать с самого начала, то мне придётся рассказывать 5 долгих лет, так что вкратце.

javaone2015

Мы приехали на JavaOne со своим продуктом, платформой для разработки приложений на Java — CUBA Platform.  На выставке у нас был свой стенд, а на самой конференции выступал наш Developer Advocate с докладом о разработке расширяемых продуктов. Кроме того, я вёл занятия Hands on Lab для участников конференции, на которых они могли попробовать создать небольшое приложение на CUBA.

JavaOne_Cuba_Logo_Final_transparentjavaone

В этом топике я постараюсь передать атмосферу конференции и поведать вам немного о докладах и стендах выставки.

Читать далее »

git linux

Компактное хранение исходного кода

kernel-zip-src

При реализации проекта DistTest возникла необходимость собирать ядро linux из разных версий исходников. И первым решением было загружать готовые архивы исходников с kernel.org для каждой отдельной версии. Но вскоре стало понятно, что данный подход требует значительного дискового пространства: 0.5-1ГБ на каждую версию, которых в данный момент порядка 1000. А также данные подход позволяет собирать только именованные версии, но не версии соответствующие отдельным коммитам.

Для решения проблемы дискового пространства можно хранить несколько базовых версий и приводить их к необходимому виду с помощью патчей, но это приводит к значительному объёму I/O со случайным доступом, что выполняется медленно на HDD и приводит к износу SSD. Тот факт, что исходники необходимой версии требуются лишь временно, подсказывает использовать tmpfs. Но есть более эффективный подход в плане использования оперативной памяти — хранить в tmpfs только отличающиеся от уже имеющихся файлов, что позволяет сделать aufs.

Читать далее »

fun soul

Очередные часы медитации

20160117_032235

 

Читать далее »