Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Data Mining - технологии обработки больших данных. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
2 Мб
Скачать
Ход выполнения
$ sqoop import-all-tables \
-m 1 \
--connect jdbc:mysql://quickstart:3306/retail_db \
--username=retail_dba \
--password=cloudera \
--compression-codec=snappy \
--as-parquetfile \
--warehouse-dir=/user/hive/warehouse \
--hive-import
Задача 1. Для выполнения практикумов потребуется другая виртуальная машина – «Cloudera QuickStart VM». Скачать образ можно, перейдя по ссылке https://www.cloudera.com/downloads/quickstart_vms.html. В раскрывающемся списке выбрать VMWare.
После подтверждения выбора появятся всплывающие окна. Все поля
необходимо заполнить. Корректность и достоверность вводимой информации не проверяется.
Архив образа виртуальной машины занимает 5,4 Гб. Разархивированный образ занимает 13,7 Гб. Также для работы виртуальной машины потребуется один процессор и как минимум 2 Гб оперативной
памяти. Действия по дальнейшей установке Cloudera QuickStart VM
аналогичны тем, которые были при установке виртуальной машины Udacity.
Задача 2. Взаимодействия и реляционные данные запроса Вначале представим схему базы данных MySQL, изображённую на рис. 3.1.
Рисунок 3.1 – Схема базы данных
Необходимо произвести загрузку данных в файловую систему HDFS с помощью Apache Sqoop. Для этого необходимо открыть терминал в Cloudera и выполнить следующую команду:
Выполнение команды может занять существенное время.
31
Как только закончится импорт, необходимо проверить, правильно ли
$ hadoop fs -ls /user/hive/warehouse/ $ hadoop fs -ls /user/hive/warehouse/categories/
invalidate metadata; show tables;
он произошёл с помощью следующих команд:
В результате их выполнения в терминале отобразятся файлы и каталоги
в файловой системе HDFS (рис. 3.2).
Рисунок 3.2 – Отображение файловой системы HDFS
Задача 3. Чтобы просмотреть созданные Sqoop таблицы, перейдите по адресу http://127.0.0.1:8888. На экране отобразится форма для входа, изображённая на рис. 3.3а. Логин и пароль для входа – cloudera.
а) б)
Рисунок 3.3 – Форма входа Hue (а), выбор Impala (б)
Далее выберите вкладку Query Editor и Impala (рис. 3.3б).
Для отображения импортированных таблиц необходимо произвести обновление метаданных с помощью команд:
Данное действие отображено на рис. 3.4.
Рисунок 3.4 – Обновление метаданных
32
Задача 4. Выполните запрос, который выведет десять самых популярных
-- Most popular product categories select c.category_name, count(order_item_quantity) as count from order_items oi inner join products p on oi.order_item_product_id = p.product_id inner join categories c on c.category_id = p.product_category_id group by c.category_name order by count desc limit 10;
-- top 10 revenue generating products
select p.product_id, p.product_name, r.revenue
from products p inner join (select oi.order_item_product_id, sum(cast(oi.order_item_subtotal as float)) as revenue from order_items oi inner join orders o on oi.order_item_order_id = o.order_id where o.order_status <> 'CANCELED' and o.order_status <> 'SUSPECTED_FRAUD' group by order_item_product_id) r on p.product_id = r.order_item_product_id
order by r.revenue desc limit 10;
> sudo -u hdfs hadoop fs -mkdir /user/hive/warehouse/original_access_logs > sudo -u hdfs hadoop fs -copyFromLocal /opt/examples/log_
> hadoop fs -ls /user/hive/warehouse/original_access_logs
категорий товаров.
Задача 5. Реализуйте запрос, который выведет десять ведущих производителей товаров
Задача 6. Придумать три собственных задачи с использованием объединения таблиц.
Итак, выполнение практикума осуществлялось на установленной
виртуальной машине Cloudera QuickStart VM, которая включает все необходимые ПО для работы с большими данными. При выполнении
заданий рассмотрена работа Apache Sqoop, позволяющего эффективно переносить данные между кластерами Hadoop и реляционными базами данных. Кроме того, была использована Apache Impala, которая позволяет создавать SQL запросы к данным, хранящимся в HDFS.
Практикум 3.2. Корреляция структурированных данных с
неструктурированными данными
Цель: увидеть различие при работе со структурированными данными и
с неструктурированными данными.
Задачи
1. Найти самые просматриваемые товары в интернет-магазине.
2. Выяснить, являются ли они самыми продаваемыми.
3. Придумать два собственных запроса на поиск корреляций.
Ход выполнения
В вирутальной машине загружены образцы данных доступа в логах
/opt/examples/log_data/access.log.2.
Перенесем данные из локальной файловой системы, в hdfs.
Проверьте, что данные в hdfs выполняют следующую команду:
33
Результат выполнения представлен на рис. 3.5.
CREATE EXTERNAL TABLE intermediate_access_logs ( ip STRING, date STRING, method STRING, url STRING, http_version STRING, code1 STRING, code2 STRING, dash STRING, user_agent STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'input.regex' = '([^ ]*) - - \\[([^\\]]*)\\] "([^\ ]*) ([^\ ]*) ([^\ ]*)" (\\d*) (\\d*) "([^"]*)" "([^"]*)"', 'output.format.string' = "%1$$s %2$$s %3$$s %4$$s %5$$s %6$$s %7$$s %8$$s %9$$s") LOCATION '/user/hive/warehouse/original_access_logs';
CREATE EXTERNAL TABLE tokenized_access_logs ( ip STRING, date STRING, method STRING, url STRING, http_version STRING, code1 STRING, code2 STRING, dash STRING, user_agent STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hive/warehouse/tokenized_access_logs';
ADD JAR {{lib_dir}}/hive/lib/hive-contrib.jar; INSERT OVERWRITE TABLE tokenized_access_logs SELECT * FROM i
invalidate metadata;
select count(*),url from tokenized_access_logs where url like '%\/product\/%' group by url order by count(*) desc;
Задача 1. Постройте таблицу в Hive и запросите данные через Apache Impala и Hue:
Рисунок 3.5 – Результат выполнения
появился продукт, который часто просматривался, но никогда не покупался.
уровень продажи товара.
Задача 2. Вернитесь к приложению Impala и выполните запрос:
Вставьте следующий запрос в редактор:
Список содержит самые продаваемые продукты, заметьте, что в списке
Задача 3. Придумать два собственных запроса на поиск корреляций.
Таким образом, в работе исследована проблема опечатки в цене на
34
Практикум 3.3. Аналитика уровня корреляционных зависимостей с
$ spark-shell --master yarn-client
// В начале импортируем необходимые классы import org.apache.hadoop.mapreduce.Job import org.apache.hadoop.mapreduce.lib.input.FileInputFormat import org.apache.avro.generic.GenericRecord import parquet.hadoop.ParquetInputFormat import parquet.avro.AvroReadSupport import org.apache.spark.rdd.RDD // Создадим RDD для двух файлов, экспортированых из MySQL при помощи Sqoop // RDD's это структуры данных Spark для работы с распределенными наборами данных def rddFromParquetHdfsFile(path: String): RDD[GenericRecord] = { val job = new Job() FileInputFormat.setInputPaths(job, path) ParquetInputFormat.setReadSupportClass(job, classOf[AvroReadSupport[GenericRecord]]) return sc.newAPIHadoopRDD(job.getConfiguration, classOf[ParquetInputFormat[GenericRecord]], classOf[Void], classOf[GenericRecord]).map(x => x._2) }
val warehouse = "hdfs://quickstart/user/hive/warehouse/" val order_items = rddFromParquetHdfsFile(warehouse + "order_items"); val products = rddFromParquetHdfsFile(warehouse + "products");
// Теперь извлечем поля из order_items и необходимые нам продукты // и получим список продуктов, их название и количество, сгруппированые по порядку
val orders = order_items.map { x => ( x.get("order_item_product_id"), (x.get("order_item_order_id"), x.get("order_item_quantity"))) }.join( products.map { x => (
использованием Spark
Цель: ознакомление со службой Spark.
Задачи
1. Необходимо узнать, какие продукты наиболее часто заказывают вместе.
2. Придумать два собственных запроса, которые могут выявить
корреляцию.
Ход выполнения
Задача 1. Зная зависимости между продажами товара, возможна
оптимизация в размещении товаров рядом, что приведет к улучшению
продаж. Используя информацию о взаимосвязях, можно поднять продажи на редко просматриваемые продукты или увеличить прибыль от продуктов,
которые входят в 10 наиболее просматриваемых, но не в 10 наиболее
продаваемых за последнее время.
Наилучший инструмент в CDH для быстрого анализа взаимосвязей
объектов это Apache Spark. Для этой работы используется Spark job. Он даст представление о взаимосвязях объектов.
Примечание. На время бездействия указатель scala > может быть перекрыт сообщениями журнала из кластера. Просто нажмите клавишу Enter для обновления указателя
После того как появится указатель scala>, используйте следующий код:
35
x.get("product_id"), (x.get("product_name"))) } ).map(x => ( scala.Int.unbox(x._2._1._1), // ID продукта ( scala.Int.unbox(x._2._1._2), // количество x._2._2.toString // имя продукта ) )).groupByKey()
// Наконец мы подсчитываем, сколько раз каждая комбинация продуктов появляется // вместе, затем сортируем и берем 10 наиболее часто встречающихся
val cooccurrences = orders.map(order => ( order._1, order._2.toList.combinations(2).map(order_pair => ( if (order_pair(0)._2 < order_pair(1)._2) (order_pair(0)._2, order_pair(1)._2) else (order_pair(1)._2, order_pair(0)._2), order_pair(0)._1 * order_pair(1)._1 ) ) ) ) val combos = cooccurrences.flatMap(x => x._2).reduceByKey((a, b) => a + b) val mostCommon = combos.map(x => (x._2, x._1)).sortByKey(false).take(10) // печатаем результаты по одному на строке и выходим из Spark println(mostCommon.deep.mkString("\n"))
exit
Для лучшего понимания скрипта вы можете прочитать комментарии, которые должны объяснить, что делает каждый из блоков и базовые
процессы.
Таким образом, если бы не Spark, анализ связей, подобный этому, был бы необычайно труден и занял бы много времени. Однако, используя Spark и несколько строчек кода, можно быстро получить список наиболее часто заказываемых вместе вещей
Задача 2. Придумать три собственных запроса, которые могут выявить корреляцию.
Практикум 3.4. Интерактивное изучение журнала событий
Цель: научиться анализировать данные в интерактивном режиме.
Задачи
1. Создать индекс поиска.
2. Запустить генератор журнала.
3. Собрать данные с помощью Flume.
4. Провести анализ собранных логов.
Ход выполнения
Данные можно индексировать в реальном времени при помощи
расширения конфигурации Apache Flume.
На рис. 3.6 представлены данные веб-журнала.
36
Рисунок 3.6 – Данные веб-журнала
[cloudera@quickstart ~]$ cd /opt/examples/flume [cloudera@quickstart ~]$ solrctl --zk quickstart:2181/solr instancedir -­create live_logs ./solr_configs
[cloudera@quickstart ~]$ solrctl --zk quickstart:2181/solr collection -­create live_logs -s 1
Требуется проиндексировать в режиме реального времени с помощью
Cloudera Search and Flume данные журнала веб-сервера и изучить их при помощи Hue.
Задача 1. Создание индекса поиска
1. Загрузите конфигурацию
2. Создайте коллекцию
Проверьте коллекцию в Solr, перейдя в Hue и нажав кнопку Search в
верхнем меню (рис. 3.7).
Рисунок 3.7 – Переход в Solr
Нажмите на Indexes в правом верхнем углу, чтобы увидеть все
индексы/коллекции (рис. 3.8).
Рисунок 3.8 – Просмотр индексов/коллекций
Щелкните по live_log, чтобы увидеть созданную коллекцию (рис. 3.9).
Рисунок 3.9 – Выбор коллекции
37
Просмотрите поля в файле schema.xml (рис. 3.10).
[cloudera@quickstart ~]$ start_logs [cloudera@quickstart ~]$ tail_logs
[cloudera@quickstart ~]$ stop_logs
[cloudera@quickstart ~]$ flume-ng agent \
--conf /opt/examples/flume/conf \
--conf-file /opt/examples/flume/conf/flume.conf \
--name agent1 \
-Dflume.root.logger=DEBUG,INFO,console
Рисунок 3.10 – Просмотр структуры коллекции
Введите данные в коллекцию данные с помощью Flume и Morphlines.
Задача 2. Запуск генератора журнала
Запустите генератор журнала и проверьте его запуск, выполнив
следующую команду:
Закончить просмотр журналов можно при помощи клавиш <Ctrl + C>.
Для остановки генератора выполните:
Задача 3. Flume и morphline
Запустите агент Flume, выполнив следующую команду:
Вернитесь к интерфейсу Hue и нажмите «Search» на странице коллекции. Вы сможете искать, детализировать и просматривать
индексированные события (рис. 3.11).
Рисунок 3.11 – Работа с индексированными событиями
Итак, мы научились использовать Cloudera Search с инструментами
Flume, Solr и Morphlines для исследования данных в реальном времени.
38
Глава 4. Визуализация данных
Визуализация – это инструментарий, который позволяет увидеть
конечный результат вычислений, организовать управление вычислительным процессом и даже вернуться назад к исходным данным, чтобы определить
наиболее рациональное направление дальнейшего движения.
В результате использования визуализации создается графический образ
данных. Применение визуализации помогает в процессе анализа данных увидеть аномалии, структуры, тренды. Применение визуализации является более экономичным: линия тренда или скопления точек на диаграмме рассеивания позволяет аналитику намного быстрее определить
закономерности и прийти к нужному решению.
Если речь идет о большой размерности и сложности исходных данных, средства визуализации обеспечивают их резкое уменьшение, конденсируя, быть может, миллионы записей данных в простые, легкие для понимания и манипулирования представления. Такие представления называют визуальным или графическим способом представления информации.
Визуализацию можно считать ключевым фактором в исследовании данных.
Наиболее естественно человеческий глаз воспринимает двухмерные
представления информации. При использовании двух- и трехмерного
представления информации пользователь имеет возможность увидеть
закономерности набора данных: его кластерную структуру и распределение
объектов на классы (например, на диаграмме рассеивания), топологические
особенности, наличие трендов, информацию о взаимном расположении
данных, существование других зависимостей, присущих исследуемому
набору данных.
Современные аналитические средства должны предоставлять пользователю качественную визуализацию. В результате использования средств визуализации должны быть получены наглядные и выразительные,
ясные и простые изображения за счет использования разнообразных средств: цвета, контраста, границ, пропорций, масштаба и т.д.
Основные тенденции в области визуализации связаны с переходом
средств визуализации на более качественный уровень, который характеризуется появлением абсолютно новых средств визуализации и
взглядов на ее функции, а также развитием ряда тенденций в этой области.
Среди основных тенденций в области визуализации выделяются: разработка сложных видов диаграмм, повышение уровня взаимодействия с визуализацией пользователя, увеличение размеров и сложности структур
данных, представляемых визуализацией.
Как показывают многие исследования, визуализация является одним из
наиболее перспективных направлений анализа данных.
39
Практикум 4.1. Создание приборной панели
Цель: ознакомление с веб-интерфейсом Hue для осуществления
визуализации данных, а также формирования собственных приборных
панелей.
Задачи
1. Создать приборную панель с помощью Hue.
2. Отобразить визуально результаты, полученные в Практикуме 3.4
(временные зависимости посещаемости страниц и других полей
индекса live_logs).
Ход выполнения
Задача 1. Работа по построению приборной панели с помощью Hue начинается с нажатия на значок карандаша (рис. 4.1).
Рисунок 4.1 – Включение редактирования
Это откроет режим редактирования, содержащий различные виджеты и макеты. Вы можете выбрать ряд вариантов и конфигураций. Перетащите шкалу в верхней серой строке (рис. 4.2).
Рисунок 4.2 – Создание столбчатой диаграммы. Шаг 1
40