<<
>>

Портирование Hadoop

Первым шагом по портированию программной платформы Hadoop на Android является сборка исходных кодов в Android-приложение. Android-приложение должно реализовывать функции вычислительного узла в распределённой вычислительной среде - то есть как минимум поддерживать выполнение компонентов DataNode и TaskTracker.

Включение компонентов DataNode и TaskTracker потребовало лишь дополнения среды для сборки приложения из исходных кодов Hadoop. Для портирования была взята версия Hadoop 0.22.0. Собранная версия под Android не заработала сразу и требовала скрупулезной доводки. Поиск и исправление несовместимостей между Hadoop и Android потребовал много времени и больших усилий по дальнейшей отладке полученного приложения. Наиболее сложные проблемы портирования отражены в пунктах 4.1.1 и 4.1.2. Исправив большинство несовместимостей и получив работоспособное приложение, получившийся исходный код был обновлён до версии 1.0.1 из основной ветви разработки Hadoop. В результате именно полученный портированный код стал основой распределённой вычислительной среды Voici на базе мобильных устройств.

Следует отметить, что компоненты NameNode и JobTracker не были портированы на Android. В текущей версии Voici для их работы требуется отдельный персональный компьютер, но в последующем возможно портирование на Android и этих компонентов - данная возможность предоставляется желающим присоединиться и продолжить исследование.

Портирование Hadoop на Android было сложной задачей с точки зрения объёма и трудности отладки. По сравнению с Linux, Android накладывает несколько дополнительных ограничений на Android-приложения. С учётом того, что в Android используется собственная виртуальная машина Java, встречаются проблемы совместимости с кодом, написанным и отлаженным для работы на официальной виртуальной машине Java от компании Oracle. В ходе портирования отлаженного и полностью рабочего Java кода на Android возникали случаи отказа его исполнения без уведомлений об ошибках.

Поэтому исходный код Hadoop пришлось значительно изменить, удалив или переписав код проблемный с точки зрения Android.

Во время исполнения Android-приложения, виртуальная машина Dalvik производит дополнительную оптимизацию, которая приводит к ошибкам интерпретации некоторых последовательностей кодов операций, которые тем не менее были сконвертированы в dex байт­код компилятором Dalvik. Данная особенность Android привела к тому, что многие классы, которые требуются Hadoop, должны были быть заменены. Для решения данной проблемы потребовалось найти исходные коды проблемных библиотек и изменить их без потери функциональности с целью успешного выполнения в виртуальной машине Dalvik.

В Android недоступна стандартная виртуальная машина Java, поэтому невозможно динамическое подключение и запуск Java-классов. Android-приложение должно включать в себя все требуемые классы и находиться в одном apk-файле. Запуск Hadoop на каждом вычислительном узле требует запуска компонентов DataNode и TaskTracker как отдельных процессов. Данное требование было удовлетворено благодаря запуску компонентов DataNode и TaskTracker как независимых Android-сервисов в рамках одного приложения.

Еще одним ограничением является невозможность запускать на Android дополнительные виртуальные машины Java непосредственно из приложений. Данная функциональность требуется Hadoop для запуска порождённых процессов. В результате в исходном коде вызов виртуальной машины Java был заменён на вызов main-процедуры порождённого процесса с передачей необходимых параметров. В итоге код, отвечающий за управление виртуальными машинами Java, был удалён.

В Android используются *шх-консольные приложения, не совместимые с Hadoop. Для работы Hadoop требуются вызовы приложений df, du и chmod для управления данными и отчётах об используемом DataNode объёме данных. Во многих случаях встроенные в Android консольные приложения неправильно интерпретируют аргументы для запуска, что влечёт за собой появление неверных данных для Hadoop.

Решение этой проблемы заключается в удалении из исходного кода Hadoop прямых вызовов консольных приложений и их замене на Java-методы аналогичные по функциональности, которые предоставляет Android SDK.

Для запуска произвольных задач на множестве компонентов TaskTracker, Hadoop требуется сборка и отправка Java-классов на компоненты TaskTracker непосредственно во время исполнения. Во время исполнения компонентом TaskTracker функций соответствия и сокращения производится вызов новой виртуальной машины Java с добавлением в список классов данных обработки. Так как Android требует упаковки Java-классов в dex-формат, то загрузка классов во время исполнения приложения невозможна. Во избежание этого ограничения все требуемые Java-классы упаковываются и передаются в исполняемое приложение Voici. Возможно, в будущем в Android будет реализована динамическая загрузка Java-классов, но на данный момент это ограничение не критично в рамках данной работы.

Нельзя не отметить систему отладки Android-приложений, из-за которой Hadoop работает крайне медленно. В большинстве случаев при включённой отладке Hadoop уменьшал быстродействие и требовал гораздо больше времени для поиска ошибок. Данное обстоятельство значительно осложнило отладку и сделало её в некоторых случаях невозможной.

Важно отметить, что некоторые из отмеченных проблем возникали только на физических мобильных устройствах, в то время как на программных эмуляторах они не наблюдались. Во многом это происходило из-за различий между программными эмуляторами и физическими Android-устройствами. Во-первых, программный эмулятор по умолчанию предоставляет доступ к учётной записи администратора Android, в то время как на физическом мобильном устройстве данная функциональность требует дополнительных усилий. Во-вторых, производительность двух разных типов Android-систем сильно отличается друг от друга - запуск и работа Voici только на программных эмуляторах происходила заметно быстрее.

Hadoop также вызвал несколько затруднений при его портировании на Android.

Выделение оперативной памяти в Hadoop производится в диапазоне от 10 до 100 Мб. Для Android-приложений это большой объём памяти, так как по умолчанию операционная система Android ограничивает резервирование оперативной памяти объёмом в 16 Мб для её использования в процессе выполнения одним приложением. Данная проблема решена настройкой Hadoop и уменьшением выделяемой оперативной памяти до 1 Мб. Такое изменение вызвало увеличение использования файла подкачки в операционной системе Android.

Некоторые значения Hadoop по умолчанию недостаточно велики для мобильных устройств. Например, значение dfs.socket.timeout должно быть увеличено для компенсации возможных проблем, связанных с сетевым подключением.

Для хранения конфигурации Hadoop используется XML-файл, хотя для их хранения подошёл бы и менее требовательный к ресурсам формат файлов. Синтаксический анализ XML в общем виде более требователен к ресурсам ЦПУ и ОЗУ, что негативно сказывается на работе с XML на мобильных устройствах. Таким образом, синтаксический анализ XML был узким местом при запуске компонентов DataNode и TaskTracker. В итоге в Voici XML-файлы были заменены на текстовые файлы формата значение-ключ, что повысило скорость исполнения.

4.2

<< | >>
Источник: Фирун Константин Борисович. СОЗДАНИЕ РАСПРЕДЕЛЕННОЙ ВЫЧИСЛИТЕЛЬНОЙ СРЕДЫ НА БАЗЕ МОБИЛЬНЫХ УСТРОЙСТВ ДЛЯ РЕШЕНИЯ ЗАДАЧИ РАСПОЗНАВАНИЯ РЕЧИ И ГОЛОСА. Диссертация на соискание ученой степени кандидата технических наук. СПбГУ.. 2015

Еще по теме Портирование Hadoop:

  1. КОНСТИТУЦИЯ РЕСПУБЛИКИ БЕЛАРУСЬ 1994 ГОДА,
  2. *В соответствии со статьей 1 Закона Республики Беларусь «О порядке вступления в силу Конституции Республики Беларусь» вступила в силу со дня ее опубликования.
  3. РАЗДЕЛ І ОСНОВЫ КОНСТИТУЦИОННОГО СТРОЯ
  4. Статья 1. Республика Беларусь - унитарное демократическое социальное правовое государство.
  5. Статья 2. Человек, его права, свободы и гарантии их реализации являются высшей ценностью и целью общества и государства.
  6. Статья 3. Единственным источником государственной власти и носителем суверенитета в Республике Беларусь является народ.
  7. Статья 4. Демократия в Республике Беларусь осуществляется на основе многообразия политических институтов, идеологий и мнений.
  8. Статья 5. Политические партии, другие общественные объединения, действуя в рамках Конституции и законов Республики Беларусь, содействуют выявлению и выражению политической воли граждан, участвуют в выборах.
  9. Статья 6. Государственная власть в Республике Беларусь осуществляется на основе разделения ее на законодательную, исполнительную и судебную.
  10. Статья 7. В Республике Беларусь устанавливается принцип верховенства права.
  11. Статья 8. Республика Беларусь признает приоритет общепризнанных принципов международного права и обеспечивает соответствие им законодательства.
  12. Статья 9. Территория Республики Беларусь является естественным условием существования и пространственным пределом самоопределения народа, основой его благосостояния и суверенитета Республики Беларусь.
  13. Статья 10. Гражданину Республики Беларусь гарантируется защита и покровительство государства как на территории Беларуси, так и за ее пределами.
  14. Статья 11. Иностранные граждане и лица без гражданства на территории Беларуси пользуются правами и свободами и исполняют обязанности наравне с гражданами Республики Беларусь,
  15. Статья 12. Республика Беларусь может предоставлять право убежища лицам, преследуемым в других государствах
  16. Статья 13. Собственность может быть государственной и частной.