В предыдущей статье мы обсудили Spark для больших данных и показали, как настроить их в Alibaba Cloud.
В этой серии блогов мы познакомим вас с основами Hive, включая создание таблиц и другие базовые концепции для приложений с большими данными.
«Наша способность делать большие вещи с помощью данных будет иметь реальное значение во всех аспектах нашей жизни», Дженнифер Палка
Существуют разные способы выполнения операций MapReduce. Первый — это традиционный подход, в котором мы используем программу Java MapReduce для всех типов данных. Второй подход — это использование сценариев для MapReduce для обработки структурированных и полуструктурированных данных. Такой подход достигается с помощью Pig. Затем идет Hive Query Language, HiveQL или HQL, для MapReduce для обработки структурированных данных. Это достигается Улей.
Вам также может понравиться:
Пример приложения ETL с использованием Apache Spark и Hive
Чехол для улья
Как уже говорилось в нашей предыдущей статье, Hadoop представляет собой обширный набор инструментов и технологий, и на данный момент удобнее развертывать Hive и Pig. У Hive есть свои преимущества перед Pig, тем более что он может упростить создание отчетов и анализ данных с помощью хранилищ.
Hive построен на основе Hadoop и используется для запросов и анализа данных, хранящихся в HDFS. Это инструмент, который помогает программистам анализировать большие наборы данных и легко получать к ним доступ с помощью языка запросов HiveQL. Этот язык внутренне преобразует SQL-подобные запросы в задания MapReduce для его развертывания в Hadoop.
У нас также есть Impala с этой точки зрения, что довольно часто встречается вместе с Hive, но если вы смотрите внимательно, у Hive есть свое место на рынке, и, следовательно, он также имеет лучшую поддержку. Impala — это также механизм запросов, построенный на основе Hadoop. Он использует существующий Hive, так как многие пользователи Hadoop уже используют его для выполнения пакетных задач.
Основная цель Impala — выполнять быстрые и эффективные операции через SQL. Интеграция Hive с Impala дает пользователям преимущество в использовании Hive или Impala для обработки или создания таблиц. Impala использует язык ImpalaQL, который является подмножеством HiveQL. В этой статье мы сосредоточимся на Hive.
Особенности Улья
- Hive предназначен для управления и запроса только структурированных данных.
- Работая с этими структурированными данными, Map Reduce не имеет функций оптимизации, таких как UDF, но Hive Framework может помочь вам лучше с точки зрения оптимизации.
- Сложность программирования Map Reduce можно уменьшить с помощью Hive, поскольку он использует HQL вместо Java. Следовательно, концепции похожи на SQL.
- Hive использует разбиение для повышения производительности по определенным запросам.
- Важным компонентом Hive является Metastore, который находится в реляционной базе данных.
Hive и реляционные базы данных
Реляционные базы данных представляют собой «Схема на чтение и Схема на запись», где могут выполняться такие функции, как вставки, обновления и модификации. Заимствовав концепцию «пиши один раз прочитал много (WORM)», Hive был разработан на основе «Схема только для чтения». Типичный запрос Hive выполняется на нескольких узлах данных, и поэтому было сложно обновлять и изменять данные на нескольких узлах. Но это было решено в последних версиях Hive.
Форматы файлов
Hive поддерживает различные форматы файлов, такие как плоские файлы или текстовые файлы, файлы SequenceFiles, RC и ORC, файлы Avro, паркет и пользовательские форматы ввода и вывода. Текстовый файл является форматом файла Hive по умолчанию.
Варианты хранения в Hive
- Metastore : Metastore — это основной компонент, который отслеживает все метаданные базы данных, таблиц, типов данных и т. Д.
- Таблицы : в Hive есть два разных типа таблиц. Это обычные таблицы и внешние таблицы. Обе они похожи на обычные таблицы в базе данных, но слово EXTERNAL позволяет вам создать таблицу и указать LOCATION, чтобы Hive не использовал местоположение по умолчанию. Другое отличие состоит в том, что при удалении внешней таблицы данные все еще хранятся в HDFS. С другой стороны, данные в обычной таблице удаляются при удалении таблицы.
- Разделы : Разделение — это разделение таблиц, которые хранятся в разных подкаталогах внутри каталога таблицы. Это помогает повысить производительность запросов, особенно в таких случаях, как операторы select с предложением «WHERE».
- Buckets : Buckets — это хэшированные разделы, которые помогают ускорить соединение и выборку данных. Чтобы реализовать эту концепцию группирования в Hive, используйте кластеризацию по команде при создании таблицы. Каждое ведро будет храниться в виде файла в каталоге таблицы. Во время создания таблицы исправьте количество сегментов. На основании значения хеш-функции данные будут распределены по различным сегментам.
Улей СерДе
Сериализатор / десериализатор в Hive или Hive SerDe используется для целей ввода-вывода, которые могут обрабатывать как сериализацию, так и десериализацию в Hive. Существуют различные типы SerDe, такие как нативный SerDe и пользовательский SerDe, с помощью которого вы можете создавать таблицы. Если ФОРМАТ ROW не указан, используйте родной SerDe. Помимо различных типов SerDe, мы также можем написать свой собственный SerDe для наших собственных форматов данных. На этом начальном этапе мы просто познакомимся с этой концепцией, поскольку важно сосредоточиться на Hive.
Чтобы вспомнить, какой бы файл вы ни записали в HDFS, он просто хранится там как файл. Здесь идет Hive, который может наложить структуру на различные форматы данных. Ниже приведены подробные сведения о запуске оболочки улья, ее использовании и некоторых базовых запросах, с которых нужно начать и понять работу Hive.
Инициирование Hive Shell
Войдите в инстанс службы Elastic Compue Service (ECS) Alibaba Cloud и просто введите «куст», после чего откроется экран, как показано ниже. Если вы настроили Hive для работы на другом рабочем узле, а не на главном, то войдите на этот конкретный хост и откройте оболочку куста.
Давайте рассмотрим некоторые основные запросы в HiveQL. Самое первое — это создание таблицы в Hive.
Синтаксис
SQL
1
CREATE TABLE [IF NOT EXISTS] table_name
2
[(col_name data_type [COMMENT col_comment], ...)]
3
[COMMENT table_comment]
4
[ROW FORMAT row_format]
5
[STORED AS file_format]
Вывод
Простой текст
xxxxxxxxxx
1
OK
2
Time taken: 5.905 seconds
В нашем случае давайте попробуем создать таблицу со столбцами, представленными на листе tripadvisor_merged.
Джава
xxxxxxxxxx
1
create table tripadvisor_museum_USonly (Sno string, Address string, Description string, Fee string, Longitude string, Latitude string, Lengthofvisit string, Museumname string, Phonenum string, Rank string, Rating float, Reviewcount string, TotalThingsToDo string, Country string, State string, Rankpercentage string, Art_Galleries string, Art_Museums string, Auto_Race_Tracks string, Families_Count string, Couple_Count string, Solo_Count string,
2
Friends_Count string)
3
row format serde 'com.bizo.hive.serde.csv.CSVSerde'
4
with serdeproperties (
5
"separatorChar" = ",",
6
"quoteChar" = "\"")
7
stored as textfile
8
tblproperties ("skip.header.line.count"="1");
Для этого же случая давайте попробуем создать таблицу Avro, так как мы говорили об этом формате файлов во всей серии блогов для обеспечения максимальной производительности.
Джава
xxxxxxxxxx
1
create table tripadvisor_museum_USonly_avro
2
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
3
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
4
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
5
TBLPROPERTIES (
6
'avro.schema.literal'='{
7
"namespace": "com.trip.avro",
8
"name": "tripadvisor",
9
"type": "record",
10
"fields": [
11
{"name":"Sno","type":"string"},{"name":"Address","type":"string"},{"name":"Description","type":"string"},{"name":"FeatureCount","type":"string"},{"name":"Fee","type":"string"},{"name":"Longitude","type":"string"},{"name":"Latitude","type":"string"},{"name":"Length_of_visit","type":"string"},{"name":"Museumname","type":"string},{"name":"descri_sub","type":"string"}]}');
Теперь давайте вставим данные в таблицу Avro с помощью оператора вставки. Ниже приведен пример запроса вставки для таблицы Avro.
Джава
xxxxxxxxxx
1
insert overwrite table tripavro select Sno, Address, Description, FeatureCount, Fee,
2
Longitude, Latitude, Lengthofvisit, Museumname, descri_sub from
3
tripadvisor_museum_USonly;
Аналогично, создайте все столбцы для столбцов в файле и создайте соответствующий оператор вставки для вставки данных в созданные таблицы.
После этого перечислите папку для просмотра
Загрузить данные
Обычно после создания таблицы в SQL мы использовали для вставки данных с помощью оператора Insert. Но в Hive мы можем вставить весь набор данных, используя оператор «LOAD DATA».
Синтаксис
Джава
xxxxxxxxxx
1
LOAD DATA [LOCAL] INPATH 'filepath'
2
[OVERWRITE] INTO TABLE tablename ;
Использование OSS в Hive
Чтобы использовать Alibaba Cloud Object Storage Service (OSS) в качестве хранилища в Hive, создайте внешнюю таблицу следующим образом
Джава
xxxxxxxxxx
1
CREATE EXTERNAL TABLE demo_table (
2
userid INT, name STRING)
3
LOCATION 'oss://demo1bucket/users';
Например, напишите скрипт для создания внешней таблицы и сохраните его как hiveDemo.sql. После этого загрузите его в OSS
Джава
xxxxxxxxxx
1
USE DEFAULT;
2
set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
3
set hive.stats.autogather=false;
4
CREATE EXTERNAL TABLE demo_table (
5
userid INT,
6
name STRING)
7
ROW FORMAT DELIMITED
8
FIELDS TERMINATED BY '\t'
9
STORED AS TEXTFILE
10
LOCATION 'oss://demo1bucket/users';
Создайте новую работу в E-MapReduce на основе следующей конфигурации
Джава
xxxxxxxxxx
1
-f ossref://${bucket}/yourpath/hiveDemo.sql
Укажите имя сегмента в «$ {bucket}» и укажите место, где вы сохранили скрипт улья, в «вашем пути».
Когда улей не подходит?
- Hive может не подходить для обработки транзакций OnLine (OLTP)
- Запросы в реальном времени
- Улей не предназначен для обновлений на уровне строк
Лучшие практики
- Используйте секционирование для улучшения производительности запросов
- Если ключи сегмента и ключи объединения являются общими, то группирование может помочь улучшить производительность объединения
- Выбор формата ввода играет решающую роль, о которой мы говорим во всех наших статьях. Улей не является исключением в этом аспекте. Выбор подходящего формата файла может улучшить производительность Hive
- Выборка позволяет пользователям брать подмножество набора данных и анализировать его без необходимости бороться со всем набором данных. Hive предлагает встроенное предложение TABLESAMPLE, которое позволяет выбирать таблицы