복붙노트

[HADOOP] 아파치 하이브 MSCK REPAIR TABLE 새로운 파티션이 추가되지 않았습니다.

HADOOP

아파치 하이브 MSCK REPAIR TABLE 새로운 파티션이 추가되지 않았습니다.

나는 아파치 하이브 (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 명령이 작동하지 않는 이유를 알 수 있습니까?

해결법

  1. ==============================

    1.MSCK가 작동하려면 명명 규칙 / partition_name = partition_value /가 사용되어야합니다.

    MSCK가 작동하려면 명명 규칙 / partition_name = partition_value /가 사용되어야합니다.

  2. ==============================

    2.테이블 위치 디렉토리에 'region = eastregio'라는 디렉토리에 데이터를 넣어야합니다.

    테이블 위치 디렉토리에 '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'
    
  3. from https://stackoverflow.com/questions/31781979/apache-hive-msck-repair-table-new-partition-not-added by cc-by-sa and MIT license