Атомарности начальник и потоков командир
пятница, 16 июня 2017 г.
четверг, 15 июня 2017 г.
воскресенье, 16 октября 2016 г.
А вот и презентация с Юкон 2016
Однако давно я ничего не публиковал. Проектное болото засосало с концами.
Нашел таки время съездить на Юкон 2016 в Саратов.
воскресенье, 1 ноября 2015 г.
Неожиданная трансформация PostgreSQL
Вот уже который раз мне задают вопрос: "А зачем нужен весь этот NoSQL. Ведь реляционные СУБД уже вполне себе решают... Вот например зачем нужна Монга, ведь есть PostgreSQL, у него и шардинг есть и json?"
Дружочки, я со всей ответственностью заявляю, PostgreSQL - это уже таки NoSQL база данных :-)
Вы наверно скажете: "Толян, ты сошел с ума!". Ну хорошо, давайте размышлять. В Postgre добавили json - это значит обеспечили schemaless, со всеми вытекающими последствиями. В Postgre добавили шардирование - это значит что она теперь распределенная. А раз так, то она подчиняется CAP теореме, и ей приходиться идти на все те компромиссы, на которые приходиться идти NoSQL системам, чтобы обеспечить согласованность, доступность и устойчивость к разделению. Вы наверно скажете: "Толян, да этож всё равно не NoSQL, а NewSQL". Ребята, как по мне дак это один хрен. Это удел маркетологов, NoSQL от NewSQL отличать :-)
В общем когда начинают сравнивать Монгу и Постгре - говорить надо о двух NoSQL системах, со своими преимуществами и недостатками.
среда, 28 октября 2015 г.
Проблема с запуском Spark приложений под YARN
Получаем вот такое исключение:
Мол, не хватает ему дефолтных значений памяти
Exception in thread "main" java.lang.IllegalArgumentException: Required executor memory (1024+384 MB) is above the max threshold (1024 MB) of this cluster!
Лечиться установкой в конфигурации YARN вот этих параметров в нужные значения:
yarn.nodemanager.resource.memory-mb
yarn.scheduler.maximum-allocation-mb
Требуется перезапуск YARN
вторник, 27 октября 2015 г.
Upgrade Java on Cloudera cluster
Ну вот и настало время ставить Java 8 на наш Cloudera-вский кластер.
Как оказалось - это не так уж сложно.
- Ствим на все ноды новую версию Java
- Тушим кластер
- Открываем на каждой рабочей ноде файл:
/etc/default/cloudera-scm-agent
и прописываем переменную:
export CMF_AGENT_JAVA_HOME="/usr/lib/jvm/java-8-oracle" - Делаем тоже самое для ноды на которой стоит Cloudera manager, плюс открываем файл: /etc/default/cloudera-scm-server
и прописываем переменную:
export JAVA_HOME="/usr/lib/jvm/java-8-oracle" - Запускаем кластер
Вот и всё
пятница, 27 марта 2015 г.
Dozebsbit 1.0 Release!
Напилил свой поисковый Java-кеш с блекджеком и low-latency. Дал ему чисто русское, православное имя - Dozensbit
Если у вас много не структурированных данных, и надо очень быстро выполнять по ним поиск, то это то что вам надо.
Пример: Предположим у нас есть объекты с разным количеством атрибутов. По сути schema-less
SEARCH User WHERE (City = NY OR City = Berlin) AND Gender = female
Всё это возможно.
Выборка по миллиону объектов укладывается в 9 мс - в сложном случае, и 2 мс в простом.
Доступно на GitHub https://github.com/2anikulin/dozensbit/wiki Там же более подробное описание и бенчмарк
Если у вас много не структурированных данных, и надо очень быстро выполнять по ним поиск, то это то что вам надо.
Пример: Предположим у нас есть объекты с разным количеством атрибутов. По сути schema-less
User0 : { Name : John, Age : 32, City : [Berlin, Dresden], } User1 : { Name : Ann, Gender : female, City : NY, HasChildren: true }А еще нам надо выполнить вот такой поисковый запрос:
SEARCH User WHERE (City = NY OR City = Berlin) AND Gender = female
Всё это возможно.
Cache<string> cache = new IndexedCache<string>(); MultiValueMap attributes1 = new MultiValueMap(); attributes1.put("name", "john"); attributes1.put("age", "32"); attributes1.put("city", "berlin"); attributes1.put("city", "dresden"); cache.put("This is user #1", attributes1); //А можно для лаконичности использовать Utils.toMap cache.put("This is user #2", Utils.toMap("{name:ann,gender:female,city:ny}")); cache.commit(); QueryBuilder builder = cache.createQuery(); QueryBuilder.Query query = builder .start("city", "ny") .or("city", "berlin") .and("gender", "female") .get(); List<string> result = cache.find(query);Но и это еще не всё. Можно выполнять сложные выборки
QueryBuilder.Query query = cache.createQuery() .start( cache.createQuery() .start("city", "berlin") .or("city", "moscow") .get() ).and( cache.createQuery() .start("lang", "ru") .or("lang", "en") .get() ) .get(); List<string> result = cache.find(query);Всё это thread-safe и работает в многопоточной среде.
Выборка по миллиону объектов укладывается в 9 мс - в сложном случае, и 2 мс в простом.
Доступно на GitHub https://github.com/2anikulin/dozensbit/wiki Там же более подробное описание и бенчмарк
Подписаться на:
Сообщения (Atom)