ТАБЛИЦА ВОССТАНОВЛЕНИЯ MSCK Hive Apache новый раздел не добавлен

Я новичок в Apache Hive. Во время работы с разделом внешней таблицы, если я добавляю новый раздел непосредственно в HDFS, новый раздел не добавляется после запуска таблицы MSCK REPAIR. Ниже приведены коды, которые я пробовал,

- создание внешней таблицы

hive> create external table factory(name string, empid int, age int) partitioned by(region string)  
    > row format delimited fields terminated by ','; 

--Подробная информация о таблице

Location:  hdfs://localhost.localdomain:8020/user/hive/warehouse/factory     
Table Type:             EXTERNAL_TABLE           
Table Parameters:        
    EXTERNAL                TRUE                
    transient_lastDdlTime   1438579844  

- создание каталога в HDFS для загрузки данных для фабрики таблиц

[cloudera@localhost ~]$ hadoop fs -mkdir 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory1'
[cloudera@localhost ~]$ hadoop fs -mkdir 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory2'

- Табличные данные

cat factory1.txt
emp1,500,40
emp2,501,45
emp3,502,50

cat factory2.txt
EMP10,200,25
EMP11,201,27
EMP12,202,30

- копирование с локального в HDFS

[cloudera@localhost ~]$ hadoop fs -copyFromLocal '/home/cloudera/factory1.txt' 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory1'
[cloudera@localhost ~]$ hadoop fs -copyFromLocal '/home/cloudera/factory2.txt' 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory2'

- Изменение таблицы для обновления в хранилище метаданных

hive> alter table factory add partition(region='southregion') location '/user/hive/testing/testing1/factory2';
hive> alter table factory add partition(region='northregion') location '/user/hive/testing/testing1/factory1';            
hive> select * from factory;                                                                      
OK
emp1    500 40  northregion
emp2    501 45  northregion
emp3    502 50  northregion
EMP10   200 25  southregion
EMP11   201 27  southregion
EMP12   202 30  southregion

Теперь я создал новый файл factory3.txt, чтобы добавить его в качестве нового раздела для фабрики таблиц.

cat factory3.txt
user1,100,25
user2,101,27
user3,102,30

- создание пути и копирование данных таблицы

[cloudera@localhost ~]$ hadoop fs -mkdir 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory2'
[cloudera@localhost ~]$ hadoop fs -copyFromLocal '/home/cloudera/factory3.txt' 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory3'

теперь я выполнил приведенный ниже запрос, чтобы обновить хранилище метаданных для нового добавленного раздела

MSCK REPAIR TABLE factory;

Теперь таблица не отображает содержимое нового раздела файла factory3. Могу ли я узнать, где я делаю ошибку при добавлении раздела для фабрики таблиц?

тогда как, если я запускаю команду alter, она показывает новые данные раздела.

hive> alter table factory add partition(region='eastregion') location '/user/hive/testing/testing1/factory3';

Могу ли я узнать, почему команда MSCK REPAIR TABLE не работает?


person Green    schedule 03.08.2015    source источник


Ответы (2)


Чтобы MSCK работал, следует использовать соглашение об именах /partition_name=partition_value/.

person HakkiBuyukcengiz    schedule 24.11.2015

Вы должны поместить данные в каталог с именем 'region = eastregio' в каталоге расположения таблицы:

$ hadoop fs -mkdir 'hdfs://localhost.localdomain:8020/user/hive/warehouse/factory/region=eastregio'
$ hadoop fs -copyFromLocal '/home/cloudera/factory3.txt' 'hdfs://localhost.localdomain:8020/user/hive/warehouse/factory/region=eastregio'
person Ruslan Ostafiichuk    schedule 04.09.2015