복붙노트

[HADOOP] Spark에서 여러 개의 작은 파일을 몇 개의 큰 파일에 병합

HADOOP

Spark에서 여러 개의 작은 파일을 몇 개의 큰 파일에 병합

스파크를 통해 하이브를 사용합니다. 내 스파크 코드에 분할 된 테이블 쿼리를 삽입했습니다. 입력 데이터는 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. ==============================

    1.DataFrame.coalesce 메서드를 사용해보십시오. 지정된 개수의 파티션 (각 파티션은 삽입시 파일이됩니다)으로 DataFrame을 반환합니다. 따라서 삽입하는 레코드의 수와 각 레코드의 일반적인 크기를 사용하여 ~ 200MB의 파일을 원할 경우 합병 할 분할 영역 수를 추정 할 수 있습니다.

    DataFrame.coalesce 메서드를 사용해보십시오. 지정된 개수의 파티션 (각 파티션은 삽입시 파일이됩니다)으로 DataFrame을 반환합니다. 따라서 삽입하는 레코드의 수와 각 레코드의 일반적인 크기를 사용하여 ~ 200MB의 파일을 원할 경우 합병 할 분할 영역 수를 추정 할 수 있습니다.

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

    2.나는 같은 문제가 있었다. 해결책은 파티션 열과 함께 DISTRIBUTE BY 절을 추가하는 것이 었습니다. 이렇게하면 한 파티션의 데이터가 단일 감속기로 이동합니다. 사례의 예 :

    나는 같은 문제가 있었다. 해결책은 파티션 열과 함께 DISTRIBUTE BY 절을 추가하는 것이 었습니다. 이렇게하면 한 파티션의 데이터가 단일 감속기로 이동합니다. 사례의 예 :

    INSERT INTO TABLE partition_table PARTITION (date) select a,b,c from partition_json_table DISTRIBUTE BY date
    
  3. ==============================

    3.이 경우 dataframe repartition (1) 메소드가 작동합니다.

    이 경우 dataframe repartition (1) 메소드가 작동합니다.

  4. from https://stackoverflow.com/questions/31009834/merge-multiple-small-files-in-to-few-larger-files-in-spark by cc-by-sa and MIT license