Обработка больших массивов данных с помощью базы данных Cassandra

Cassandra — это сервер базы данных, созданный Apache Software Foundation, а Spark — движок обработки крупномасштабных данных, также созданный Apache. Этот урок научит вас использовать оболочку Spark для взаимодействия с Cassandra; как использовать оболочку Cassandra для вставки данных; как использовать Python для вставки данных в Cassandra и как взаимодействовать со Spark с помощью Python.

Image result for db cassandra

Но вначале надо научиться устанавливать Cassandra и Spark, поскольку в процессе их установки есть пара тонких моментов. Хотя Cassandra — это распределенная база данных, а значит, у кластера Cassandra множество узлов, наш урок использует кластер Cassandra с одним узлом, чтобы всё было проще. Cassandra, Spark и обработка крупномасштабных данных — это сложные темы, требующие практики. Однако по прочтении нашего руководства и небольшого количества экспериментов эти темы уже не должны быть столь смутными.

Перед установкой Cassandra, пожалуйста, убедитесь, что на вашем компьютере Linux установлен Java. Если это не так, выполните

Установка Cassandra

Поскольку в используемом нами дистрибутиве Ubuntu 16.04 нет официального пакета для Cassandra, вы должны вручную установить необходимые двоичные файлы:

Первые две команды создают группу и учетную запись пользователя, который будет обладать файлами и процессами Cassandra, затрагивающими системную безопасность. Третья команда скачивает двоичный дистрибутив Cassandra, а четвертая извлекает архив с бинарником в присущее место. Последние две команды следует поместить в файл пользователя .bashrc, чтобы обеспечить их выполнение при входе в систему.

Большинство команд, относящихся к Cassandra, выполняются пользователем Cassandra — это видно по подсказке.

Использование модуля CQL Python — не единственный способ соединить Cassandra и Python. Вы также можете использовать Cassandra Driver из DataStax. Информацию о модуле cql можно найти на https://py-pi.python.org/pypi/cql/1.0.4, а о драйвере Cassandra — на https://datastax.github.io/python-driver/installation.html.

Следующая команда запускает серверный процесс Cassandra:

По умолчанию Cassandra запускается как фоновый процесс. Если вы захотите изменить этот режим, при запуске Cassandra следует использовать параметр -f. Сервер базы данных поместит свои записи в журнал в директорию ./log, которая автоматически создастся при первом выполнении Cassandra. Если ваш дистрибутив Linux готов к установке пакета Cassandra, вы обнаружите файлы журналов в /var/log/cassandra. Чтобы убедиться, что всё работает, как задумано, выполните

Эта команда проверяет, можете ли вы подключиться к Cassandra с помощью nodetool, используемой для управления кластерами Cassandra. Чтобы получить список всех команд, поддерживаемых nodetool, выполните nodetool help.

Здесь показан список команд, поддерживаемых оболочкой Cassandra

Вывод команды nodetool status показывает реальное состояние узла Cassandra, UN перед IP вашего узла означает, что ваш узел работает, и это не может не радовать.

Вы также можете подключиться к узлу с помощью утилиты cqlsh, скомандовав cassandra:~ $ cqlsh. Пожалуйста, учтите, что по умолчанию cqlsh пытается подключиться к 127.0.0.1:9042. Вы можете найти, где находятся серверные процессы Cassandra, прослушав их с помощью

Получение следующего сообщения об ошибке при попытке использования cqlsh означает неполадки с драйвером Python, предоставленным установкой Cassandra:

Чтобы решить эту специфическую проблему, скомандуйте

Первая команда должна запускаться от имени root, а вторая команда — от имени пользователя, владеющего Cassandra. Новое значение CQLSH_NO_BUNDLED велит cqlsh — это реализовано в Python — обойти драйвер Python, предоставленный Cassandra, и использовать внешний драйвер Cassandra Python, который вы только что установили. Утилита cqlsh поддерживает множество команд. При получении справки об определенной команде откроется браузер или отобразится текстовое сообщение с внешним URL.

Остановить процесс Cassandra можно так:

Первая команда выясняет идентификатор процесса серверного процесса Cassandra, а вторая завершает процесс. Итак, с установкой Cassandra покончено — теперь у вас есть кластер из одного узла, которого для изучения Cassandra более чем достаточно.

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

Cassandra предлагает интерактивную оболочку под названием cqlsh. Выполнение команды cqlsh покажет следующую информацию:

Для взаимодействия с базой данных Cassandra следует использовать CQL (Cassandra Query Language), что позволяет помещать данные, делать запросы
и определять схемы. Однако такое ПО, как Cassandra, обычно используется в сочета- нии с другим ПО, вроде Spark, поскольку
у Cassandra не столь обширные возможности обработки.

Получение и установка Spark

Spark, являющийся преемником Hadoop — это сервер для обработки крупномасштабных данных. Он включает SQL-сервер и поддерживает потоковую обработку, машинное обучение, а также обработку диаграмм.

ПО, подобное Spark, требует получения своих данных из других источников — хорошо то, что Spark может получать доступ ко множеству источников данных, включая Cassandra, HDFS, HBase и Hive, а также к любому источнику данных Hadoop.

Вы можете использовать Spark в интерактивном режиме из оболочек Python, R и Scala, что также позволяет тестировать и пробовать новые вещи, получая немедленный отклик, прежде чем использовать ваш код в производстве. Вы можете попробовать Spark, используя Python, с помощью исполнимого файла pyspark, и использовать Scala с помощью исполнимого файла spark-shell.

Основная структура данных Spark называется RDD (Resilient Distributed Dataset),
и она представляет собой неизменную распределенную подборку объектов. Вы можете создать RDD, используя распараллеливание или посредством ссылки на внешний набор данных.

Полный API Spark можно увидеть, посетив сайт http://spark.apache.org/docs/latest/programming-guide.html, и скачать Spark со страницы http://spark.apache.org/downloads.html.

Установка  Spark

Установка Spark проще, чем установка Cassandra, несмотря на тот факт, что вам понадобится установить Spark, скомпилировав его исходник:

Пожалуйста, помните, что выполнение команды ./build/sbt assembly может затянуться.

Spark может использоваться в интерактивном режиме из оболочек Scala, Python и R. Чтобы убедиться, что ваша установка Spark работает корректно, выполните следующие команды:

Вы также можете использовать ваш любимый браузер, чтобы увидеть, работает ли Spark подобающим образом, направив его в http://localhost:4040, когда запущен ./bin/pyspark. Если всё хорошо, вы увидите нечто похожее на рис.

Этот URL web-страницы также показывает дополнительную информацию об установке Spark, включая задачи, этапы, хранилища и исполнительные программы Spark.

Чтобы сделать Spark доступным всем пользователям в вашем дистрибутиве Linux, надо выполнить следующие шаги:

В файле ~/.bashrc надо добавить следующую строку (она добавляет директорию bin Spark к переменной PATH):

Вставка образчиков данных в Cassandra

Следующие команды, выполненные из оболочки Cassandra, создадут новое ключевое пространство, две таблицы, и поместят образцы данных в них:

Когда у нас кластер с одним узлом, при создании нового пространства ключей важно использовать SimpleStrategy вместо NetworkTopologyStrategy. Вдобавок, значение replication_factor управляет числом копий, которые нужно обновить, чтобы изменения вступили в силу. Значение 1 означает, что когда вы записываете данные на ваш кластер, они будут храниться только в одном узле.

Затем вы можете использовать cqlsh для проверки, что данные на месте:

Этот проект будет эквивалентом программы “Hello World!”. Правда, сообщение “Hello World!” на вашем экране не появится! Но вначале вам надо установить соединительное звено, позволяющее Spark взаимодействовать с Cassandra:

При выполнении предыдущих команд вы получите в директории с именем target два файла JAR: один для Scala, который и будет использоваться, а другой для Java. Вы можете найти версию Scala внутри ./spark-cassandraconnector/target/scala-2.10/:

Чтобы использовать соединительное звено, надо запустить оболочку Spark:

Теперь вы можете получить доступ к серверу Cassandra, используя spark-shell:

Сперва надо остановить текущий контекст Spark и создать новый, подключенный к локальному серверу Cassandra, который будет определяться переменной conf. Затем вам понадобится импортировать некоторые нужные классы, создать переменную conf и получить прямой доступ к серверу Cassandra, чтобы выполнить три команды (показано на рис.).

Далее идет доказательство того, что предыдущий код сработал:

Если вы намерены использовать Spark Cassandra Connector, вам определенно стоит посетить https://github.com/datastax/sparkcassandra-connector и проверить таблицу на предмет наличия проблем с совместимостью версий.

Добавляем данные с Python

Данный раздел научит вас помещать данные в Cassandra с помощью Python. Данные жестко закодированы внутри кода, но код Python вы легко можете изменить, чтобы прочитать данные с других источников. Во-первых, вам нужно установить модуль Python с помощью

Перед выполнением скрипта Python у вас уже должна быть таблица с названием issue217 в ключевом пространстве lxf2. Если это не так, создайте ее следующим образом:

Вот код Python, сохраненный как insertData.py:

В команде cql.connect() вы определяете параметры подключения, в т.ч. пространство ключей, которое будет использоваться (lxf2). Затем вам надо создать курсор для взаимодействия с Cassandra. И наконец, используйте курсор и цикл for для вставки в Cassandra желаемых данных. Теперь вам следует удостовериться с помощью cqlsh, что insertData.py правильно сделал свою работу (запущенный скрипт insertData.py, а также взаимодействие с cqlsh изображено на рисунке).

Читаем строки со Spark

Далее вы узнаете, как использовать Spark, чтобы считать строки текстового файла, содержащего данную строковую переменную. Но вначале вам надо установить очередной модуль Python:

Код Python, сохраненный как countLines.py, выглядит так:

Вы заметите, что первым делом код Python информирует программу, где найти pyspark — модуль Python, поставляемый со Spark. Для установки Spark, использованной на нашем уроке, pyspark можно найти в /usr/local/bin/spark-1.6.1/python/pyspark. (См. запущенный countLines.py на рис; сгенерированный результат проверен с помощью grep.)

Скрипт countLines.py показывает, как использовать Python для взаимодействия со Spark. Вам следует выполнить countLines.py, используя spark-submit.

Главным преимуществом Cassandra над другими базами данных NoSQL является то, что она поддерживает SQL-подобный язык, а значит, вам не понадобится изучать абсолютно новый язык запросов. Вдобавок это крупномасштабная и очень надежная база данных без единичной точки отказа, к тому же простая в изучении. То, что это база данных NoSQL, означает, что ее схему легко изменить, не тратя времени впустую. Cassandra также очень быстра, поскольку большинство операций производится в памяти; чтобы избежать потерь данных, Cassandra хранит записи подтверждений. Cassandra отлично работает с данными, поступающими в реальном времени, и данными временны ́х рядов. И вовсе не случайно Cassandra используется в таких популярных приложениях, как Twitter, Digg и Facebook!

Если вы уже знакомы с реляционными базами данных, вам понадобится некоторое время, чтобы привыкнуть к базе данных NoSQL. Вдобавок вам понадобится написать несколько тестовых приложений, прежде чем использовать Cassandra в производстве. Cassandra не поддерживает соединения, то есть соединения должны осуществляться самим разработчиком программно. Восстановление после неисправности должно осуществляться вручную с помощью nodetool. И, наконец, Cassandra не поддерживает элементарные операции, так что неудачная транзакция, возможно, оставит следы. Однако, поскольку все операции Cassandra идемпотентны, вы можете повторять одну и ту же операцию до тех пор, пока она не будет успешно выполнена, без всяких побочных эффектов.

Лучший способ оценить Cassandra — написание приложений, использующих ее.

Рейтинг материала
[Голосов: 1 Рейтинг: 5]
02 февраля 2017, 04:22

Добавить комментарий

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