[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.MSCK가 작동하려면 명명 규칙 / partition_name = partition_value /가 사용되어야합니다.
MSCK가 작동하려면 명명 규칙 / partition_name = partition_value /가 사용되어야합니다.
-
==============================
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'
from https://stackoverflow.com/questions/31781979/apache-hive-msck-repair-table-new-partition-not-added by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 120 개 이상의 카운터가 있습니다. (0) | 2019.06.23 |
---|---|
[HADOOP] HIVE에서 날짜 문자열을 UTC에서 특정 시간대로 변환하는 방법은 무엇입니까? (0) | 2019.06.23 |
[HADOOP] Spark Dataframe의 중복 열 (0) | 2019.06.23 |
[HADOOP] Log4j 출력을 HDFS에 씁니다. (0) | 2019.06.23 |
[HADOOP] 어떻게 Spark Scala 쉘 내의 HDFS 위치에있는 모든 csv 파일을 나열 할 수 있습니까? (0) | 2019.06.23 |