[HADOOP] Spark에서 여러 개의 작은 파일을 몇 개의 큰 파일에 병합
HADOOPSpark에서 여러 개의 작은 파일을 몇 개의 큰 파일에 병합
스파크를 통해 하이브를 사용합니다. 내 스파크 코드에 분할 된 테이블 쿼리를 삽입했습니다. 입력 데이터는 200 + gb입니다. Spark이 분할 된 테이블에 쓰고있을 때 매우 작은 파일 (kb 단위의 파일)이 나옵니다. 이제 출력 파티션 된 테이블 폴더에는 5000 개 이상의 작은 kb 파일이 있습니다. 나는이 파일들을 몇 개의 큰 MB 파일에 병합하고 싶지만, 약 200MB 파일 일 수도있다. 하이브 병합 설정을 사용하는 것이 지겹지 만 작동하지 않는 것 같습니다.
'val result7A = hiveContext.sql("set hive.exec.dynamic.partition=true")
val result7B = hiveContext.sql("set hive.exec.dynamic.partition.mode=nonstrict")
val result7C = hiveContext.sql("SET hive.merge.size.per.task=256000000")
val result7D = hiveContext.sql("SET hive.merge.mapfiles=true")
val result7E = hiveContext.sql("SET hive.merge.mapredfiles=true")
val result7F = hiveContext.sql("SET hive.merge.sparkfiles = true")
val result7G = hiveContext.sql("set hive.aux.jars.path=c:\\Applications\\json-serde-1.1.9.3-SNAPSHOT-jar-with-dependencies.jar")
val result8 = hiveContext.sql("INSERT INTO TABLE partition_table PARTITION (date) select a,b,c from partition_json_table")'
위의 하이브 설정은 mapreduce 하이브 실행에서 작동하며 지정된 크기의 파일을 출력합니다. 이 Spark 또는 Scala를 수행 할 수있는 옵션이 있습니까?
해결법
-
==============================
1.DataFrame.coalesce 메서드를 사용해보십시오. 지정된 개수의 파티션 (각 파티션은 삽입시 파일이됩니다)으로 DataFrame을 반환합니다. 따라서 삽입하는 레코드의 수와 각 레코드의 일반적인 크기를 사용하여 ~ 200MB의 파일을 원할 경우 합병 할 분할 영역 수를 추정 할 수 있습니다.
DataFrame.coalesce 메서드를 사용해보십시오. 지정된 개수의 파티션 (각 파티션은 삽입시 파일이됩니다)으로 DataFrame을 반환합니다. 따라서 삽입하는 레코드의 수와 각 레코드의 일반적인 크기를 사용하여 ~ 200MB의 파일을 원할 경우 합병 할 분할 영역 수를 추정 할 수 있습니다.
-
==============================
2.나는 같은 문제가 있었다. 해결책은 파티션 열과 함께 DISTRIBUTE BY 절을 추가하는 것이 었습니다. 이렇게하면 한 파티션의 데이터가 단일 감속기로 이동합니다. 사례의 예 :
나는 같은 문제가 있었다. 해결책은 파티션 열과 함께 DISTRIBUTE BY 절을 추가하는 것이 었습니다. 이렇게하면 한 파티션의 데이터가 단일 감속기로 이동합니다. 사례의 예 :
INSERT INTO TABLE partition_table PARTITION (date) select a,b,c from partition_json_table DISTRIBUTE BY date
-
==============================
3.이 경우 dataframe repartition (1) 메소드가 작동합니다.
이 경우 dataframe repartition (1) 메소드가 작동합니다.
from https://stackoverflow.com/questions/31009834/merge-multiple-small-files-in-to-few-larger-files-in-spark by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] hadoop에로드 된 OpenCV 라이브러리가 작동하지 않습니다. (0) | 2019.06.09 |
---|---|
[HADOOP] Spark를 사용하여 디렉토리에서 Hadoop 파일을 재귀 적으로 읽는 방법? (0) | 2019.06.09 |
[HADOOP] 스파크 셸 - __spark_libs__.zip이 존재하지 않습니다. (0) | 2019.06.09 |
[HADOOP] 스칼라를 사용하여 HDFS에 쓰는 방법 (0) | 2019.06.09 |
[HADOOP] Apache Pig 사용 권한 문제 (0) | 2019.06.09 |