복붙노트

[HADOOP] 스파크 dataframe 쓰기를 사용하는 동안 어떻게 자동으로이 numRepartition을 계산

HADOOP

스파크 dataframe 쓰기를 사용하는 동안 어떻게 자동으로이 numRepartition을 계산

나는 마루 분할 표를 하이브 dataframe를 작성했을 때

df.write.partitionBy("key").mode("append").format("hive").saveAsTable("db.table")

그것은 HDFS에서 블록을 많이 만들 것입니다, 블록의 각각의 데이터 만 작은 크기를 가지고있다.

나는 그것이 블록을 만들고 각 불꽃 하위 작업으로가는 방법을 이해, 다음에 데이터를 기록.

또한 블록의 수는 하둡의 성능을 증가뿐만 아니라 임계 값에 도달 한 후 성능이 저하됩니다, ​​이해합니다.

내가 자동 설정 numPartition하려는 경우, 사람이 좋은 생각을 가지고 있습니까?

numPartition = ??? // auto calc basing on df size or something
df.repartition("numPartition").write
  .partitionBy("key")
  .format("hive")
  .saveAsTable("db.table")

해결법

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

    1.기본 스파크에 의해 셔플 작업 (200 개) 파티션을 생성합니다. 그래서, 200 개 파일 / 블록 (파일 크기가 작은 경우) HDFS에 기록됩니다.

    기본 스파크에 의해 셔플 작업 (200 개) 파티션을 생성합니다. 그래서, 200 개 파일 / 블록 (파일 크기가 작은 경우) HDFS에 기록됩니다.

    구성 아래 사용하여 스파크에서 데이터를 기반으로 셔플 이후에 생성되는 파티션의 수를 구성합니다 :

    spark.conf.set("spark.sql.shuffle.partitions", <Number of paritions>)
    

    예 : spark.conf.set ( "spark.sql.shuffle.partitions", "5"), 그래서 5 개 파티션을 생성합니다 스파크와 5 개 개의 파일이 HDFS에 기록됩니다.

  2. from https://stackoverflow.com/questions/51814680/how-to-auto-calculate-numrepartition-while-using-spark-dataframe-write by cc-by-sa and MIT license