Installing apache spark on ubuntu 17.10

Введение

Из-за ряда трудностей, а также скудного набора готовых методов и решений в SparkML, многие компании пишут свои расширения для Spark. Один из примеров — PravdaML, которую разрабатывают в Одноклассниках и которая, судя по беглой оценке того, что есть в GitHub, выглядит очень перспективно. К сожалению, большая часть подобных решений либо вообще закрыты, либо открыты, но не имеют возможности установки через Maven/sbt и документацию API, что сильно затрудняет работу с ними.

Сегодня мы рассмотрим библиотеку MMLSpark.

Рассматривать будем, как обычно, на примере задачи классификации пассажиров Титаника. Все же цель показать как можно больше возможностей библиотеки MMLSpark, а не выбить SOTA на ImageNet показать крутой Machine Learning. Так что подойдет и Титаник.

Сама библиотека имеет нативный API для Scala (), Python API (документация), а также, судя по некоторым местам в GitHub репозитории, скоро будет иметь API и для R.

В GitHub проекта есть хорошие ноутбуки с примерами (PySpark+Jupyter), но мы пойдем другим путем. Как писал Дмитрий Бугайченко, если разрабатывать для Spark, то есть все основания использовать для этого Scala, более того, Scala позволяет гораздо эффективнее и более гибко определять собственные Transformer и Estimator, чтобы встраивать их в SparkML Pipeline, а про то, как медленно работает numpy/pandas код в UDF (вызываемый на экзекьюторах из JVM), уже много написано.

Краткое введение в Scala

Scala, пожалуй, ― одна из самых заветных тайн Интернета. Scala работает на некоторых из популярнейших Web-сайтах, включая Twitter, LinkedIn и Foursquare (с его платформой Web-приложений Lift). Есть также свидетельства интереса к производительности Scala со стороны финансовых учреждений (например, EDF Trading использует Scala для расчета цен деривативов).

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

В дополнение к этому Scala представляет собой язык виртуальной машины (VM) и работает непосредственно на Java Virtual Machine (JVM) с использованием Java Runtime Environment версии 2 посредством байт-кодов, генерируемых компилятором Scala. Этот подход позволяет Scala выполнять почти все, что работает на JVM (при наличии дополнительной библиотеки времени выполнения Scala). Таким образом, Scala использовать огромный каталог существующих Java-библиотек наряду с существующими Java-программами.

Наконец, Scala ― расширяемый язык (его название на самом деле означает Scalable Language), ориентированный на добавление простых, гладко интегрируемых расширений.

Происхождение Scala

Язык Scala зародился в Федеральном политехническом институте Лозанны. Его разработал Мартин Одерский (Martin Odersky), который до этого работал над языком программирования Funnel, объединявшем идеи функционального программирования и сетей Петри. В 2011 году группа создателей Scala получила 5-летний грант от Европейского совета по исследованиям, и для коммерческой поддержки Scala была учреждена компания Typesafe, получившая надлежащее финансирование.

Scala на примерах

Рассмотрим некоторые примеры языка Scala в действии. У Scala есть собственный интерпретатор, который позволяет экспериментировать с языком в интерактивном режиме. Практическое использование Scala выходит за рамки настоящей статьи, но в разделе приведены ссылки на дополнительные материалы.

Наш краткий обзор языка Scala с его интерпретатором начинается с . После запуска Scala появляется командная строка, с помощью которой можно интерактивно проверять выражения и программы. Начнем с создания двух переменных, неизменяемой (, т.н. переменная с одноразовым присваиванием) и изменяемой (). Заметим, что если попытка изменить (переменную типа ) будет успешной, то при попытке изменить выдается сообщение об ошибке.

Листинг 1. Простые переменные в Scala
$ scala
Welcome to Scala version 2.8.1.final (OpenJDK Client VM, Java 1.6.0_20).
Type in expressions to have them evaluated.
Type :help for more information.
 
scala> val a = 1
a: Int = 1
 
scala> var b = 2
b: Int = 2
 
scala> b = b + a
b: Int = 3
 
scala> a = 2
<console>6: error: reassignment to val
       a = 2
         ^

Далее, создадим простой метод для возведения числа в квадрат. Определение метода в Scala начинается со слова , за которым следует имя метода и список параметров, после чего ему присваиваются разные значения (в этом примере ― одно). Никакие возвращаемые значения не указываются, так как они вытекают из самого метода. Это аналогично присвоению значения переменной. Я демонстрирую этот процесс на объекте , а результатом служит переменная (которую интерпретатор Scala создает автоматически). Все это показано в .

Листинг 2. Простой метод в Scala
scala> def square(x: Int) = x*x
square: (x: Int)Int
 
scala> square(3)
res0: Int = 9

scala> square(res0)
res1: Int = 81

Теперь рассмотрим создание в Scala простого класса (см. ). Определим простой класс , который принимает аргумент (конструктор имен). Здесь следует отметить, что класс принимает параметр напрямую (без определения параметра class в теле класса). Единственный метод при вызове выдает строку. Создаем новый экземпляр класса и вызываем метод

Обратите внимание, что вертикальные линии вставляет интерпретатор — они не являются частью кода

Листинг 3. Простой метод в Scala
scala> class Dog( name: String ) {
     |   def bark() = println(name + " barked")
     | }
defined class Dog
 
scala> val stubby = new Dog("Stubby")
stubby: Dog = Dog@1dd5a3d
 
scala> stubby.bark
Stubby barked
 
scala>

Когда все готово, просто введите , чтобы выйти из интерпретатора Scala.

Launching Spark Shell

Now when we are right outside the spark directory, run the following command to open apark shell:

.sparkbinspark-shell

We will see that Spark shell is openend now:

Launching Spark shell

We can see in the console that Spark has also opened a Web Console on port 404. Let’s give it a visit:

Apache Spark Web Console

Though we will be operating on console itself, web environment is an important place to look at when you execute heavy Spark Jobs so that you know what is happening in each Spark Job you execute.

Check the Spark shell version with a simple command:

sc.version

We will get back something like:

res0: String = 2.3.0

Downloading Spark files

All the necessary packages now exist on our machine. We’re ready to download the required Spark TAR files so that we can start setting them up and run a sample program with Spark as well.

In this guide, we will be installing Spark v2.3.0 available here:

Spark download page

Download the corresponding files with this command:

wget http://www-us.apache.orgdistsparkspark-2.3.0spark-2.3.0-bin-hadoop2.7.tgz

Depending upon the network speed, this can take up to a few minutes as the file is big in size:

Downloading Apache Spark

Now that we have the TAR file downloaded, we can extract in the current directory:

tar xvzf spark-2.3.0-bin-hadoop2.7.tgz

This will take a few seconds to complete due to big file size of the archive:

Unarchived files in Spark

When it comes to upgrading Apache Spark in future, it can create problems due to Path updates. These issues can be avoided by creating a softlink to Spark. Run this command to make a softlink:

ln -s spark-2.3.0-bin-hadoop2.7 spark

Step4: Installing Scala

Follow the below given steps for installing Scala.

Type the following command for extracting the Scala tar file.

$ tar xvf scala-2.11.6.tgz

Move Scala software files

Use the following commands for moving the Scala software files, to respective directory (/usr/local/scala).

$ su –
Password:
# cd /home/Hadoop/Downloads/
# mv scala-2.11.6 /usr/local/scala
# exit

Use the following command for setting PATH for Scala.

$ export PATH = $PATH:/usr/local/scala/bin

Verifying Scala Installation

After installation, it is better to verify it. Use the following command for verifying Scala installation.

$scala -version

If Scala is already installed on your system, you get to see the following response −

Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL

Step7: Verifying the Spark Installation

Write the following command for opening Spark shell.

$spark-shell

If spark is installed successfully then you will find the following output.

Spark assembly has been built with Hive, including Datanucleus jars on classpath
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
15/06/04 15:25:22 INFO SecurityManager: Changing view acls to: hadoop
15/06/04 15:25:22 INFO SecurityManager: Changing modify acls to: hadoop
disabled; ui acls disabled; users with view permissions: Set(hadoop); users with modify permissions: Set(hadoop)
15/06/04 15:25:22 INFO HttpServer: Starting HTTP Server
15/06/04 15:25:23 INFO Utils: Successfully started service 'HTTP class server' on port 43292.
Welcome to
    ____             __
   / __/__ ___ _____/ /__
   _\ \/ _ \/ _ `/ __/ '_/
   /___/ .__/\_,_/_/ /_/\_\ version 1.4.0
      /_/
		
Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71)
Type in expressions to have them evaluated.
Spark context available as sc
scala>

Previous Page
Print Page

Next Page  

Создание Pipeline

В Pipeline я бы хотел показать как обычные классы SparkML, так и невероятно удобную вещь из MMLSpark — , которая позволяет применять SparkML-трансформеры ко множеству колонок сразу (для справки, например, StringIndexer и OneHotEncoder принимают на вход ровно одну колонку, что превращает их объявление в боль):

Для начала объявим какие колонки у нас какого типа:

Теперь создадим кодировщик строк:

Замечание: В отличие от scikit-learn в SparkML работает по принципу frequency-encoder, и его можно использовать для задания отношения порядка (т.е. категория 0 < категории 1, и в этом есть смысл) — такой подход часто хорошо работает для решающих деревьев.

Объявим наш :

И , так как классификаторам SparkML удобнее работать с :

Теперь воспользуемся поставляемым с MMLSpark градиентным бустингом — LightGBM, который входит в «большую тройку» лучших реализаций этого алгоритма наравне с XGBoost и CatBoost. Он работает во много раз быстрее, лучше и стабильнее, чем реализация GBM, которая есть в SparkML (даже с учетом того, что JVM-порт все еще в активной разработке):

Замечание: LightGBM поддерживает работу с категориальными переменными (почти как catboost), поэтому мы заранее указали ему, где в нашем векторе признаки категории, а он сам уже разберется, что с ними делать и как их кодировать.

Ну и наконец объявим наш Pipeline:

ya.molli

Навыки для создания маски

2D маски

Средняя стоимость:Необходимые навыки:

  • Photoshop для статичных масок
  • After Effect для динамичных масок (или другой софт для создания 2д анимации)

3D маски

habrastorage.org/webt/ri/pl/1l/ripl1ls3fu58ee0_kqacsahacxw.gif​Здесь применяется LUT фильтр для инвертирования цветов и 3д челюсть, которая трекается к лицуСредняя стоимость:Необходимые навыки:

  • Photoshop для статичных масок
  • Моделирование, текстурирование, риггинг в любом 3D софте

Про текстурирование.Пример моих 3д масок:Siberian_creatorSiberian_creatorПопробовать

Игры

Эти параметры считывает спарк с лица:

  • Моргание глазами (boolean)
  • Опускание бровей (boolean)
  • Поднятие бровей (boolean)
  • Счастливое лицо (boolean) (только для facebook)
  • Кивок головы (boolean)
  • Поворот головы (boolean)
  • Поцелуй (только для facebook)
  • Левый глаз закрыт (boolean)
  • Правый глаз закрыт (boolean)
  • Открыт рот (boolean + значение силы открытия от 0 до 1)
  • Улыбка (boolean)
  • Удивленное лицо (boolean) (только для facebook)

Пример игры:​Персонаж прыгает в момент моргания глазамиСредняя стоимость:Необходимые навыки:

Я создал телеграмм группу для публикации заказов и обсуждения вопросов, связанных с разработкой масок.

Компоненты Spark

Рисунок 1 – Компоненты Spark Apache

SparkSQL

SparkSQL – это компонент Spark, поддерживающий запрашивание данных либо при помощи SQL, либо посредством Hive Query Language. Библиотека возникла как порт Apache Hive для работы поверх Spark (вместо MapReduce), а сейчас уже интегрирована со стеком Spark. Она не только обеспечивает поддержку различных источников данных, но и позволяет переплетать SQL-запросы с трансформациями кода; получается очень мощный инструмент.

Spark Streaming

MLlib

MLlib — это библиотека для машинного обучения, предоставляющая различные алгоритмы, разработанные для горизонтального масштабирования на кластере в целях классификации, регрессии, кластеризации, совместной фильтрации и т.д. Некоторые из этих алгоритмов работают и с потоковыми данными — например, линейная регрессия с использованием обычного метода наименьших квадратов или кластеризация по методу k-средних (список вскоре расширится). Apache Mahout (библиотека машинного обучения для Apache Hadoop) уже ушла от MapReduce, теперь ее разработка ведется совместно с Spark MLlib.

GraphX

Single-Node Recovery with Local File System

Overview

ZooKeeper is the best way to go for production-level high availability, but if you just want to be able to restart the Master if it goes down, FILESYSTEM mode can take care of it. When applications and Workers register, they have enough state written to the provided directory so that they can be recovered upon a restart of the Master process.

Configuration

In order to enable this recovery mode, you can set SPARK_DAEMON_JAVA_OPTS in spark-env using this configuration:

System property Meaning Since Version
Set to FILESYSTEM to enable single-node recovery mode (default: NONE). 0.8.1
The directory in which Spark will store recovery state, accessible from the Master’s perspective. 0.8.1

Details

  • This solution can be used in tandem with a process monitor/manager like monit, or just to enable manual recovery via restart.
  • While filesystem recovery seems straightforwardly better than not doing any recovery at all, this mode may be suboptimal for certain development or experimental purposes. In particular, killing a master via stop-master.sh does not clean up its recovery state, so whenever you start a new Master, it will enter recovery mode. This could increase the startup time by up to 1 minute if it needs to wait for all previously-registered Workers/clients to timeout.
  • While it’s not officially supported, you could mount an NFS directory as the recovery directory. If the original Master node dies completely, you could then start a Master on a different node, which would correctly recover all previously registered Workers/applications (equivalent to ZooKeeper recovery). Future applications will have to be able to find the new Master, however, in order to register.

SparkyLinux 3.4 GameOver — дистрибутив Linux для геймеров

Игра больше не является необязательным аспектом операционной системы — теперь это необходимо. К счастью, Linux добился больших успехов в этом отношении, особенно благодаря Steam. Сегодня SparkyLinux 3.4 «Game Over» становится доступным, и это очень интригует — настольная операционная система на базе Linux с акцентом на игры.

Предлагаются следующие игровые функции:
  • Доступ к играм, скомпилированным для платформы Linux;
  • Доступ к «популярным» и «современным» играм через платформы Steam и Desura;
  • Доступ ко многим играм, созданным для платформы MS Windows через Wine и PlayOnLinux;
  • Доступ к «старым» играм, созданным для прекращенных машин и систем с помощью эмуляторов.
Доступны следующие эмуляторы:
  • DeSmuME — эмулятор для игр Nintendo DS;
  • DOSBox — эмулятор системы DOS;
  • MAME — эмулятор аркадных игр + графический интерфейс GUI (Graphical User Interface);
  • NEStopia — эмулятор развлекательной системы Nintendo;
  • PCSX-Reloaded — эмулятор Sony PlayStation;
  • Stella — эмулятор Atari 2600;
  • Visual Boy Advance — Gameboy, Gameboy Advance и Gameboy Color emulator;
  • Yabause — эмулятор Sega Saturn;
  • ZSNES — эмулятор развлекательной системы Super Nintendo.

Как вы можете видеть, игры, безусловно, в центре внимания дистрибутива

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

Более того, он имеет современное ядро ​​3.14. Кроме того, он использует легкую среду LXDE для минимизации системных требований.

Установка

Создаем виртуальную машину


1) Создаем виртуальную машину SparkyLinux, выбираем ОП Linux


2) Выделяем память для виртуальной машины


3) Создаем виртуальный диск


4) Выбираем тип жесткого диска (VDI)


Выбираем динамически распределенный VDI


6) Определяем размер VDI

Настройки виртуальной машины


7) В разделе «система» ставим галочку напротив «сеть»


8) Выбираем сеть NAT


9) В разделе хранилище (storage) добавляем образ диска sparkylinux-4.5.2-x86_64-lxde


10) Запускаем нашу ВМ (виртуальную машину) на VirtualBox

Процесс установки


11) Запускаем SparkyInstaller


12) В появившемся меню выбираем SparkyLinux


13) Выбираем язык (English)


14) Выбираем свой часовой пояс (timezone)


15) Выбираем раскладку клавиатуры и ее расположение


16) Заполняем поля username, пароля и hostname


17) Подтверждаем согласие на разбиение по частям жесткого диска


18) Проверяем, что это именно нужный нам диск sda2


19) Загружаем Grub для загрузки ядра Linux


20) Проверяем заданные параметры в общей сводке (summary) и соглашаемся, нажимая «apply»


21) После завершении установки SparkyLinux перезапускаем компьютер

Заключение

Поэкспериментируйте со Spark

В практикуме Data analysis and performance with Spark (Анализ данных с помощью Spark и его производительность) исследуются характеристики многопоточных и многоузловых вычислений с помощью Spark и Mesos, а также параметры их настройки.(М. Tim Jones, developerWorks, февраль 2012 г.).

Spark ― интересное пополнение в растущем семействе платформ анализа больших объемов данных. Это эффективная и удобная (благодаря простым и четким сценариям на языке Scala) платформа для обработки распределенных наборов данных. Как Spark, так и Scala находятся в стадии активной разработки. Однако освоение того и другого ключевыми интернет-ресурсами переводит их из разряда интересных проектов ПО с открытым исходным кодом в разряд основных Web-технологий.

  • Оригинал статьи
  • В практикуме Data analysis and performance with Spark (Анализ данных с помощью Spark и его производительность) исследуются характеристики многопоточных и многоузловых вычислений с помощью Spark и Mesos, а также параметры их настройки. (М. Tim Jones, developerWorks, февраль 2012 г.).
  • EDF Trading: реализация проблемно-ориентированного языка для оценки цены деривативов на языке Scala: Scala находит применение в самых разнообразных областях, включая биржевую торговлю. Познакомьтесь с одним из примеров, просмотрев эту видеозапись.
  • Application virtualization, past and future (M. Tim Jones, developerWorks, май 2011 г.): введение в языки виртуальных машин и их реализацию.
  • Первые шаги к Scala: великолепное введение в язык Scala (написанное при участии создателя языка Мартина Одерского). Это основательное введение 2007 года охватывает многие аспекты языка. Еще один полезный учебник: Примеры кода для программирования на Scala с большим количеством примеров кода.
  • Distributed computing with Linux and Hadoop (Ken Mann and M. Tim Jones, developerWorks, декабрь 2008 г.): введение в архитектуру Hadoop, включая основы парадигмы распределенной обработки больших объемов данных MapReduce.
  • Distributed data processing with Hadoop (M. Tim Jones, developerWorks 2010): практическое введение в Hadoop, включая создание и использование Hadoop-кластера с одним узлом и многоузлового кластера, а также способы разработки приложений для преобразования и сокращения данных в среде Hadoop.
  • developerWorks в Твиттере: следите за последними новостями. В Twitter можно следить также за автором этой статьи: M. Tim Jones.
  • Простой инструмент сборки: решение для сборки, принятое для языка Scala. Содержит простой метод для небольших проектов и расширенные функции для сложных сборок.
  • Lift: платформа Web-приложений для Scala, аналогичная платформе Rails для Ruby. Lift в действии можно увидеть в Twitter и Foursquare.
  • Проект Mesos: Spark изначально не поддерживают распределение задач, но опирается на этот менеджер кластера, который обеспечивает изоляцию ресурсов и их распределение по сети.
  • (реализация на базе сценариев Bash), GraphLab (ориентирован на машинное обучение) и Storm (приобретенная Twitter у BackType система распределенной обработки потоков реального времени, написанная на Clojure): Hadoop вызвал к жизни целый ряд платформ для анализа больших объемов данных. Помимо Spark, архитектуры параллельных вычислений можно реализовать с помощью этих трех предложений.
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *