суббота, 16 декабря 2017 г.

Интересности в Hadoop 2.8.0 и 2.8.2

Недавний анонс на Opennet про Hadoop 3 совершенно опечалил качеством доступной на русском языке информации о хадупе, поэтому попробую формат лонгрида на эту тему. На работе как раз недавно произошла вынужденная миграция на 2.8.x релиз, и до этого я особо не смотрел что там нового, так что начнем с 2.8.0 и 2.8.2 версий. Сразу предупреждаю, что будет только что зацепило глаз и показалось любопытным.

YARN-3366: шейпинг исходящего трафика. Хотел было крикнуть "джва года ждал", но во первых WIP, во вторых ограничение действует только на всю ноду целиком, в третьих ограничение действует только на контейнеры, но не на шаффл, hdfs и остальные демоны.

HDFS-8486: каждый рестарт датаноды на версиях 2.6.x и 2.7.0 может вызывать потенциальную потерю данных. Вот тут извините, но WAT???????? Впрочем не касается 2.7.+.

HADOOP-5732: SFTP имплементация FileSystem, с JSch в кишках. Иногда все-таки приходится таскать данные между левыми нодами вне кластера -- звучит невероятно полезно. Авторизация по паролю (што?), либо по keyfile (должен быть доступен как локальный файл для инстанциирующей JVM).

HADOOP-12360: отправка метрик в StatsD. Полезно? Полезно. Кроме того, похоже что CollectD через который работает Stackdriver Agent можно через плагины заставить получать эти метрики -- двойная польза для страдальцев на датапроке.

HDFS-6200: hadoop-hdfs-client теперь отдельной джаркой, больше не нужно тащить все серверные библиотеки.

HDFS-10440: свистелки и перделки на Datanode UI. Поскольку наш проект живет в 3k17 и не хранит ничего важного непосредственно на HDFS, часто туда ходить не приходится, но надо будет посмотреть.

HADOOP-13037: поддержка ADLS в апстриме(!!!). Порадуемся за тех, кто использует Hadoop на Azure и посмеемся про Гугель Клауд, который продолжает жить в отдельной репе.

HADOOP-14038: Вторая Главная Проблема Компьютер Саенса не прошла мимо ADLS, сразу после релиза в 2.8.0, переименовали проперти с креденшелами в 2.8.2.

Вот собственно и все. Если будет видно, что кому-то интересно продолжение, запилю то же самое для 3.0. Спасибо всем, кто дочитал.

четверг, 27 марта 2014 г.

Zen and the Art Of Software Engineering

Вообще хотел написать пост на хабр, но поскольку ребята там дико огороженные и слили мне всю карму за наезд на Galaxy S2, пишу сюда. Привет ребята.

Несмотря на большое количество теоретически рассуждений о философии, книга Роберта Пирсига «Дзен и искусство ухода за мотоциклом» может здорово пригодиться даже последнему программисту на Borland Pascal. image В одной из глав автором вводится понятие "сметки", или более просто -- энтузиазма. В частности, дается замечательная классификация ловушек сметки, которую мы в этой статье попробуем применить к нашим ежедневным обязанностям.

Внешне обусловленные ловушки

Я починю тесты с пяти раз!

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

Способов не растратить сметку в этом случае два: попросить Васю, который на этом собаку съел, или же кропотливо изучить все особенности системы, с которой имеешь дело. Несмотря на то, что второй вариант требует значительно больших временных затрат, в конце получаешь бесплатный бонус -- новое знание. Ведь все тут любят бесплатные бонусы?

Хороший совет для тех, кто пошел по длинному пути -- напишите чеклист, а еще лучше -- документацию. Если в следующий раз вам вдруг вновь придется браться за это дело, есть шанс не проглядеть важную деталь.

Гейзенбаги

Да-да, Пирсиг описал понятие до того, как оно стало мэйнстримом! Баг пропадает как раз после того, как на стендапе вы пообещали сделать это уж хотя бы в этот раз? Здесь все очень просто. Если позволяет время, нужно отложить задачу в сторону, и ждать проявления. Как только проблема проявит себя -- попытайтесь собрать все малейшие детали поведения системы в этот момент. Неожиданные пики CPU, логи сборщика мусора, время обеда ваших тестировщиков, расстояние до почтового сервера в милях -- когда-то вы сможете увидеть взаимосвязи даже в самых бредовых вещах. И уж тогда эта проблема от вас не убежит.

Какой из десяти GIS-форматов выбрать

В оригинале данный пункт называется «задержками из-за запчастей», но мы попробуем найти более близкую аналогию. Представьте, что вы знаете что вам нужен какой-то фреймворк для области, в которой не разбираетесь.

Чтобы выйти из этого положения, нужно во-первых знать, где искать. Подпишитесь на мейлинг-лист. Поищите под рукой специалиста по данной теме. Может быть, нужная библиотека ждет вас в гитхабе чувака, который делал доклад по данной теме на прошлом JavaOne?

Во-вторых, хорошенько определитесь с требованиями. Вы же не хотите переписывать ваши очереди с Redis на SQS, потому что у него проблемы с надежностью при сетевых проблемах? Или вдруг выяснится, что прикрутить авторизацию нужной гранулярности к Elasticsearch -- проблема достойная отдельной команды?

Если вдруг выяснится, что вопреки воззрениям Лоритов вашей библиотеки нет в природе, то все-таки придется писать свой велосипед. С другой стороны, кто не любит велосипеды?

На этом дзенская классификация внешних ловушек заканчивается, и мы переходим к внутренним.

Внутренне обусловленные ловушки

А в своем коде не видим и GOTO

Знакома ли вам ситуация, что проблемная часть вроде бы даже локализована, с воспроизводимостью все впорядке, но понять, в чем же дело не получается? Поздравляю, вы попались на ценностную ловушку. Скорее всего, вы пробегали глазами по причине несколько раз, но просто не придали ей значения.

Неожиданно, но в этом случае тоже стоит притормозить. Съешьте мороженое, сходите на обед, вытряхните все, что касается задачи, и начните заново. Скорее всего, раскручивая историю заново, вы наконец увидите то, что от вас пряталось.

Я-то все правильно делаю, это индусы из циски виноваты

Следующая ловушка связана с предыдушей, но немного отличается. Если в том случае вы просто недооценивали факт по невнимательности, то в этом случае вы переоцениваете себя. «Я же двадцать пять лет в отрасли, конечно я знаю как работает AOP в спринге, тут явно замешано взаимодействие фазы луны и нашей версии JBoss». Возможно, пришло время прочитать документацию.

Релизный мандраж

Данная ловушка -- полная противоположность предыдущей. Многим свойственно впадать в панику в ответственной ситуации, начинать суетиться и вести себя во всех смыслах не очень логично. Вы можете недооценивать себя, придумывать совершенно невозможные причины, связанные с вещами, которые вы не до конца знаете, потратить уйму времени на пустую возню. А уж если эти ошибки еще больше заставляют вас разувериться в себе, то может возникнуть обратная связь, которая низвергла в депрессивные пучины JEE не одно поколение интерпренеров с макбуками.

Вместо массового убийства нервных клеток, попробуйте выразить свои тревоги на бумаге. Составьте план, выделите самые важные детали, закрывайте одну за одной до готовности. Trello -- ваш друг. И помните -- даже Doug Lea может ошибаться.

Как же задолбала вся эта фигня

И опять мы перемещаесмся из одного экстремума в другой. Даже самый увлеченный программист может заскучать, каким бы модным не был javascript-фреймворк на проекте.

Скука отбирает возможность видеть вещи свежим взгядом, в этом состоянии бывает просто невозможно найти по-настоящему верное решение. «Хоть как-то» сданную задачу придется переделывать. Вместо этого, опять же, отвлекитесь. Возможно, это сигнал о какой-то другой проблеме. Может быть, занятие деплоймент-инженера просто вам не подходит? Или настало время выкинуть пару сотен килобайт копипасты и написать один генератор форм на липкой ленте и макросах?

Если вы думаете, что IT-область вся такая из себя особенная, то вы ошибаетесь. Даже среди сварщиков есть специализация. Пирсиг намекает нам, что среди нас могуть быть как прирожденные кодеры, которые могут перелопачивать тонны говнокода день за днем, а есть утонченные творческие ребята, которых хлебом не корми, но дай автоматизировать что-нибудь эдакое на scalaz и акторах. Каждый должен делать то, что ему по душе!

Да ладно, там делов-то на пять минут

Один из самых частых бичей программистов. Если беретесь за что-нибудь незнакомое, попробуйте отказаться от планирования вообще, ведь в этом случае вы даже примерно не представляете, что за банку с пауками собираетесь открыть.

Если от вас просят определиться со сроками, попробуйте увеличить время вдвое или уменьшить объем работ, иначе так и до мандража недалеко. А это тонны новых багов и неизведанные пучины запутанной лапши, которую есть вашим коллегам.

Ответ на задачу о двух стульях

Если честно, то я так и не смог найти подходящих аналогий для пункта, в котором Пирсиг говорит о Му, своеобразном ответе на неправильно заданные вопросы.

В общих чертах суть в том, что если вы пытаетесь найти ответ на свой вопрос в форме «да/нет», а получается какая-то глупость -- не стоит отметать результат. Возможно, контекст вопроса недостаточен или неверен для ответа. Попытайтесь понять, что вы не учли, возможно вам недостает глубокого понимания проблемы.

Иногда инструменты все-таки виноваты

Хотите написать систему, которую нужно долго сопровождать, на питоне? Редактируете Scala-код в nano? Анализируете гигабайты логов less'ом? Деплоите сотни серверов в гетерогенных средах голым башем? И недовольны своей производительностью? Нет, серьезно, у вас еще есть вопросы почему ваши ежедневные активности вас так бесят?

Найдите правильный инструмент. Системы типов придумали правильные чуваки, выкиньте свои тесты на сложение. IntelliJ-плагин весьма неплох, забейте на принципы UNIX. Освойте ELK наконец, вы сможете отдебажить весь этот ад на хадупе быстрее, чем нагрепаете следующее вхождение строчки со словом WARN. Эксперементируйте, это в любом случае лучше, чем продолжать в том же духе.

В конце всех разъяснений на тему сметки Пирсиг дает очень дельный совет -- применять эти принципы нужно не от случая к случаю, ими надо жить. Вы не сможете быть расчетливым и наблюдательным, если питаетесь энергетиками в остальные 128 часов в неделю. Нужных логов всегда не будет под рукой, если в своей собственной квартире вы не можете найти носки без помощи жены.

У вас в голове уже есть инструментарий, чтобы стать продуктивнее на 1000%. У вас есть наводка на оригинал, который вы просто обязаны прочитать. Теперь, со всем этим -- действуйте!

понедельник, 25 февраля 2013 г.

Initializing vars in scala

Explanation

One common question I hear very often is "what is the difference between x = null and x = _"? Let us try to see what it does. Consider example: Here we see, how it get compiled, using "javap -c". At first, let check out null-example: Obviously, it will assign null to x field. Now, compare with second example: Code is much shorter and all it does is just calling for parent constructor. Note, that field x is not initialized at all! So, correct answer is: difference between standard and underscore initializers is that underscore initializers does not set any field value in constructor.

When you should care

Consider you are using Selenium with field annotations and PageObject pattern, writing something like that: Suddenly, you will notice that your button object is null. What is going on, I've typed all necessary letters! you would say. Explanation is simple: magic fields are initialized during parent PageObject constructor, but after that, FooPage constructor will erase values you wanted. Correct solution is to use underscore initializer here.

пятница, 2 ноября 2012 г.

Typed approach for object ids in Scala

Short example

Try to imagine that you are writing some application in Scala, use case classes to store your data, and something like Salat to automatically serialize your classes. Occasionly, you have two objects linked together:

At some point at time you need to add another link with another object:

Hey, now it compiles, but doesn't work! If you have tests, we can say you are in luck: you can run tests, try to fix broken line, run tests another time, try to fix other line... No fun at all. Or if you don't cover some method, you can have time bomb somewhere. Worst case ever!


Type system to the rescue!

What is type system? A type system is a tractable syntactic method for proving the absence of certain program behaviors by classifying phrases according to the kind of values they compute. In other words, type system allows compiler to prove correct behavior of you program! So what is fun writing in language with powerful type system but don't use it powers?

At this point we already have some amount of code and tons of data, so we don't want to break serialization. Also, we don't want additional boxing for every id. What can we do here? Haskell, the Language of Types, already has a concept for this! It is called newtype. Using it, you can introduce new type on top of other, and have conversions from one to another, but without additional boxing -- values of source type and defined newtype will be represented identically in memory, so from one side you will not loose memory and cpu time for useless boxing, and Salat will serialize your data like it was old Keys!

And of course, this is in some Scala libraries for free! shapeless is one of them. Here goes an example: Using it, we can define type, representing object's id:

So our first example will become: And from this moment, we can change our definitions as we want, with compile-time check!

вторник, 3 апреля 2012 г.

Среда разработки экспертных систем CLIPS

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

Начнем с самого начала. Что такое экспертные системы? Согласно Википедии, это "компьютерная программа, способная частично заменить специалиста-эксперта в разрешении проблемной ситуации". Иными словами, экспертной системой можно назвать любую систему, которой можно задать вопрос, относящийся к какой-либо предметной области. В более широком смысле экспертной можно назвать ИС, созданную на базе любых технологий, но как правило для их создания применяются специализированные среды.

Среда разработки экспертных систем в первую очередь предоставляет язык или библиотеку для описания предметной области, а так же среду для выполнения скриптов на этом языке. Хорошим примером подобной системы как раз является CLIPS.



CLIPS (Language Integrated Production System) – созданная в 1984-м году одной из лабораторий НАСА экспертная система, которая использует LISP-подобный язык для описания предметной области. Язык этой системы прекрасно подходит для описания любых логических связей, он оперирует следующими тремя понятиями:

  • факты (facts)
  • правила (rules)
  • объекты (objects).
Факты в данном случае – это дискретная единица информации, которой может оперировать система. Факты бывают двух видов: упорядоченные и неупорядоченные. Первые, как ясно из названия, представляют собой упорядоченные кортежи значений базовых типов – списков, чисел, строк, атомов и ссылок. Вторые представляют собой именованные пары ключ-значение и во многом похожи на struct из C без методов. Любой факт начинается с атома, который является именем факта:
(fact-without-fields)
(my-ordered-fact 1 2.0 "three" four)
(some-unordered-fact (username "Ha><0r") (description "script kiddie"))
Перед использованием, неупорядоченные факты необходимо определять. Такая же практика рекомендуется и для упорядоченных фактов, но их объявления могут быть "выведены" из использования. Факт определяется путем указания шаблона факта. Шаблон содержит как сами поля, так и различные метаданные на них, такие как тип и значение по умолчанию.
(deftemplate land-maximum-candidate
  (slot name (default ?NONE) (type STRING))
  (slot berry-of-choice (default ?NONE) (type STRING))
  (slot profit (default ?NONE) (type FLOAT))
  (slot checked (default FALSE) (type SYMBOL)))
Если тип или значение по умолчанию не указаны, то слот (slot – так называются поля факта) будет получать автоматическое значение NONE и принимать значение любого типа.

Над фактами можно оперировать с помощью правил. Правило имеет условия срабатывания и действия, так же называемые левой стороной (LHS) и правой стороной (RHS). Работа с условиями срабатывания CLIPS во многом похоже на сопоставление с образцом: LHS задает "шаблон внешних условий", представляющий из себя набор уточненных темплейтов фактов и предикатов. Пример правила:
(defrule bind-berry-land
  (land-coef (name ?name) (coef ?coef))
  (berry (name ?bname)
              (fruit-coef ?fcoef) (leaves-coef ?lcoef))
  => (assert (berry-land
               (name ?bname) (land-name ?name)
               (leaves-pollution (* ?fcoef ?coef))
               (fruit-pollution (* ?lcoef ?coef)))))
Данное правило срабатывает на всех комбинациях известных ягод и земельных участков, создавая новый факт о возможности посадки данного типа ягод на этом поле, содержащий в себе коэфициенты загрязнения листьев и плодов.

Объекты во многом похожи на факты – они так же имеют "имя шаблона" (имя класса) и слоты, и при этом полностью поддерживают парадигмы ООП – наследование, инкапсуляцию и полиморфизм. Объектно-ориентированный язык CLIPS (COOL) находится за рамками данной статьи и я предлагаю ознакомиться с ним отдельно.

Можно дать оценку CLIPS в двух словах: это интересно. С одной стороны, правила и факты образуют dataflow, что поднимает уровень абстракции и позволяет мыслить более декларативно, описывая только преобразования данных. CLIPS берет на себя управление порядком вычисления правил с помощью приоритетов, управляет зависимостями между фактами. С другой стороны, CLIPS очень легко встраивается в другие программы. В частности, можно посмотреть пример программы, интерфейс которой написан на PyQt4, а вся логика представлена в виде CLIPS-скрипта.

понедельник, 19 марта 2012 г.

GeoForm+ 2012

В прошлый вторник на военке вместо обычных занятий ходили на GeoForm+ 2012 – весьма неплохая альтернатива лекциям, так как вместо безликих ТТХ можно посмотреть и пощупать оборудование, и, если повезет, пообщаться с квалифицированными специалистами.

Выставка проходила с 13 по 15 марта в ЭЦ "Сокольники", и чтобы туда попасть необходимо было получить электронный билет (о чем многие узнали ночью перед выставкой).

Прямо на входе нас встречал большой, стильно оформленный стенд CSoft'а с плакатами продуктов AutoDesk. Сколько они потратили на аренду места и оформление можно только догадываться, впрочем, зная цены на демонстрируемые продукты, вряд ли они стали сильно беднее :)

С другой стороны был не менее пафосный стенд "СОВЗОНДа" – у них был самый большой на выставке сенсорный экран с демонстрацией web-гис. К сожалению, найти среди демонстраторов технически подкованного человека оказалось нелегкой задачей, и давно интересующий меня вопрос "почему векторные данные до сих пор отображаются в браузере отрендеренными изображениями вместо svg" остался без ответа.
Замыкала круг "теплых мест" небезызвестная Leica. К слову сказать, их приборы используются не только гражданскими фирмами, но и геоинформационной службой Германии.
Самое интересное, как водится, ждало внутри. В центре зала вполне заслуженно стоял мобильный лазерный сканер TopCon. Его отличительной чертой является то, что он позволяет проводить измерения прямо на ходу и сразу получать привязанные к местности облака точек.


Вообще, лазерные сканеры были представлены на выставке в большом количестве.


Меня, как человека которого в слове "геоинформатика" безусловно больше волнует вторая составляющая, интересовали детали софтверного характера. Так например не раз была предпринята попытка узнать, используют ли разработчики пакетов программ для лазерных сканеров вычисления на видеокарте, например OpenCL или CUDA. К счастью удалось отловить "своего человека" рядом со стендом RapidForm. По его словам, современные пакеты пока что используют для обработки собранной информации только силы CPU, но некоторые разработчики смогли приспособить память видеокарты в качестве кэша при работе с очень большими объемами данных.
Одним из самых необычных был стенд АФМ-сервиса. Ребята даже притащили с собой беспилотники:
Жалко, что не было МИИГАиК'овских Кречетов – думаю, они могли бы составить достойную конкуренцию.

И естественно, никакая геодезическая/картографическая выставка в России немыслема без вездесущей Панорамы:
Удалось потеребить их товарищей по поводу наболевшего у многих вопроса – когда же можно будет экспортировать сгенерированную из карты 3D-сцену? Увы, ответ как всегда один: "планируется", так же и как год назад, когда на одной из моих предыдущих работ нужен был этот функционал.

Но кроме российских фирм и их представительств на выставке были китайцы. Особенно порадовал вот этот защищенный переносной компьютер для полевой обработки геоданных:

И напоследок, немного оборудования для наблюдения за сейсмической активностью:

суббота, 7 января 2012 г.

VBox integration in GNS3 0.8.2b on MacOS X Lion

Blah-blah-blah
One of my most used pieces of Python software, GNS3 (GUI for Dynamips) is on the way to become much more cool. New beta version (0.8) gained VirtualBox integration. No more pain with Qemu patching and pure performance on OS X! But current version have one "small" issue -- VirtualBox integration is not working out of the box. I sacrificed several hours of my life to debug gods, but issue solved.

Solution
First of all: you do not need follow these instructions. Qt4, SIP and PyQt4 already included in DMG. Just download and drag'n'drop it in Applications folder.
Second: install latest Virtualbox (4.1+).
And finishing touch:


mv /Applications/GNS3.app/Contents/Resources/VBoxPython2_7.so /Applications/VirtualBox.app/Contents/MacOS/