Оглавление:

1. Введение (Hive и MySQL).

2. Создание таблиц Hive.

3. Выполнение SQL-запросов в Hive.


Введение (Hive и MySQL).

В предыдущем разделе мы настроили hive, теперь настало время создать таблицу и загрузить в нее данные.

Как отмечается во многих статьях,одним из источников больших данных являются базы данных. Для того, чтобы быть ближе к практике, я создал на своем сайте скрипт сбора и хранения данных от RSS-каналов. Скрипт крутится уже несколько месяцев и размер базы приближается к 400К, а ее дамп в CSV-формате превышает 150М, что очень хорошо, так как размер блока HDFS равен 128М и мы уже будем иметь распределенное хранение.

Итак, структура таблицы для хранения новостей из RSS-каналов представлены в следующем формате, смотрим картинку



Описание полей:

agency - текстовое значение, здесь имя новостного агентства, опубликовавшего новость.

head - текстовое значение, заголовок новости, считывается из RSS.

link - текстовое значение, ссылка на полный текст новости, считывается из RSS.

text - текстовое значение, краткое описание новости, считывается из RSS.

pubdate - текстовое значение, время публикации новости, считывается из RSS в специальном формате.

garbage - зарезервированное поле.


Данные таблиц для Hive могут храниться в различных форматах, один из них - CSV. Так как MySQL позволяет импортировать таблицы в этом формате с доп настройками, я выбрал этот формат.

Дополнительные настройки импорта таблицы в MySQL: разделитель полей - \t (TAB), разделитель строк - \n (Enter или перевод строки), значения полей обрамлены и символ экранирования - пустое значение.

Следует отметить, символы \t и \n удаляются перед записью в таблицу.

Дамп таблицы в архивированном виде можно скачать в браузере или командой wget.

Далее нужно распаковать архив в удобную директорию, у меня это /tmp/mynews1.csv


Создание таблиц Hive.


Теперь нужно запустить Hadoop, и командную строку Hive, все это делали в предыдущих статьях, поэтому представлю только итог в консоли:



Теперь создадим таблицу Hive, аналогичную той, что представлена выше в MySQL. Команда на создание таблицы:


create table mynews (id int, agency String, head String, link String, text String, pubdate String, garbage int) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;


Результат на картинке ниже, снова перешел в Putty, так как лень набирать такую строку.



Мы создали таблицу, это можно проверить командой:


show tables;


Следует отметить, что в HDFS будет создан одноименный каталог: /user/hive/warehouse/mynews

Это можно проверить командой:

hadoop fs -ls /user/hive/warehouse/

Или воспользоваться веб-интерфейсом, для чего в адресной строке браузера набрать IP_адрес_мастера(или имя):50070. У меня так: master:50070

Далее в меню Utilities выбрать Browse file system, как на картинке



Выполнение SQL-запросов в Hive.

Выполним запись данных в созданную таблицу с помощью следующего запроса:

Если все прошло успешно, вы увидите выполнение MapReduce задачи, которая создаст на 3-х нодах (так как репликация у нас 3) файлы с заданным содержанием. Смотрим скриншот ниже.



Проверим, что в таблице с помощью запроса:


select * from mynews;


Увидим нашу единственную запись:



Посмотрим, что же у нас в HDFS в каталоге нашей таблицы. Там появился файл 000000_0, который весит 14 байт, что видно на скриншоте



Стоит отметить, что проще удалять такие записи в таблице через HDFS команду hadoop fs -rm -r /user/hive/warehouse/mynews/000000_0.

Теперь можно загрузить данные из дампа нашей таблицы MySQL в нашу таблицу Hive. Как помнится, мы его сохранили так: /tmp/mynes1.csv

Загрузить данные можно как простым копированием csv-файла в HDFS в каталог нашей таблицы, так и через запрос Hive. Воспользуемся последним вариантом:


load data local inpath '/tmp/mynes1.csv' into table mynews;


При успешном завершении операции получим ОК.

Данные загружены, наш файл просто был скопирован в каталог /user/hive/warehouse/mynews/

В интерфейсе обзора файловой системы можно посмотреть файл и его свойства. Можно увидеть, что он теперь состоит из 2-х блоков, так как исходный размер превышает 128 Мбайт. Скриншот ниже.



Теперь мы можем выполнять SQL-запросы к нашему csv-файлу:


select * from tables where id=10000;


Запрос с условием like


select * from mynews where text like '%Putin%';


Этот запрос читается так: выбрать все записи из таблицы mynews, где в столбце text встречается комбинация символов Putin.

Новостей таких много, начало вывода представлено на скриншоте

Вот мы и научились работать с живыми таблицами, но этого мало, далее будем пытаться обрабатывать данные таблиц с помощью Spark и Python.

Тематическая группа ВКонтакте

Комментарии

Комментировать могуть только зарегистрированные пользователи

Перевести страницу (translate page)
Реклама