Hadoop MapReduce - Как создать динамический раздел - PullRequest
0 голосов
/ 29 апреля 2018

Как создать динамический раздел с использованием Java Map Reduction, как и в случае с sql. Пример У меня есть набор данных на основе страны, и мне нужно разделить записи на основе страны (раздел). Мы не можем ограничить страну. каждый день будут получать новые данные о стране.

1 Ответ

0 голосов
/ 29 апреля 2018

Вы можете использовать функцию динамического разделения в Hive , чтобы автоматически заполнять разделы на основе входящих данных. Ниже приведен пример автоматического разделения необработанных данных на основе информации country.

Создание файла необработанных данных (country1.csv), который содержит данные для нескольких стран

1,USA
2,Canada
3,USA
4,Brazil
5,Brazil
6,USA
7,Canada

Загрузить этот файл в папку в HDFS

hadoop fs -mkdir /example_hive
hadoop fs -mkdir /example_hive/country
hadoop fs -put country1.csv /example_hive/country

Создание однораздельной таблицы Hive поверх данных

CREATE EXTERNAL TABLE country
(
id int, 
country string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
LOCATION 'hdfs:///example_hive/country';

Убедитесь, что таблица Hive создана правильно

hive (default)> select * from country;
1   USA
2   Canada
3   USA
4   Brazil
5   Brazil
6   USA
7   Canada

Создание многораздельной таблицы Hive с разделением страны на страны

hive (default)> CREATE TABLE country_par
(
id int
)
PARTITIONED BY (country string);

Включить динамическое разбиение

hive (default)> SET hive.exec.dynamic.partition = true;
hive (default)> SET hive.exec.dynamic.partition.mode = nonstrict;

Заполните секционированную таблицу, Hive автоматически поместит данные в правильный раздел страны

hive (default)> INSERT INTO TABLE country_par 
PARTITION(country)
SELECT id,country FROM country;

Убедитесь, что разделы были созданы и правильно заполнены

hive (default)> show partitions country_par;
country=Brazil
country=Canada
country=USA

hive (default)> select * from country_par where country='Brazil';
4   Brazil
5   Brazil

hive (default)> select * from country_par where country='USA';
1   USA
3   USA
6   USA

hive (default)> select * from country_par where country='Canada';
2   Canada
7   Canada

hive (default)> select country,count(*) from country_par group by country;
Brazil  2
Canada  2
USA 3
...