[HADOOP] 마루 파일을로드하고 같은 수의 hdfs 파티션을 유지
HADOOP마루 파일을로드하고 같은 수의 hdfs 파티션을 유지
120 파티션으로 hdfs에 저장된 파켓 파일 / df가 있습니다. hdfs의 각 파티션 크기는 약 43.5M입니다.
총합 크기
hdfs dfs -du -s -h /df
5.1 G 15.3 G /df
hdfs dfs -du -h /df
43.6 M 130.7 M /df/pid=0
43.5 M 130.5 M /df/pid=1
...
43.6 M 130.9 M /df/pid=119
해당 파일을 Spark에로드하고 동일한 수의 파티션을 유지하고 싶습니다. 그러나 Spark는 파일을 60 개의 파티션으로 자동로드합니다.
df = spark.read.parquet('df')
df.rdd.getNumPartitions()
60
HDFS 설정 :
'parquet.block.size'가 설정되지 않았습니다.
sc._jsc.hadoopConfiguration().get('parquet.block.size')
아무것도 반환하지 않습니다.
'dfs.blocksize'는 128로 설정되어 있습니다.
float(sc._jsc.hadoopConfiguration().get("dfs.blocksize"))/2**20
보고
128
이 값 중 하나를 더 낮은 값으로 변경해도 hdfs에있는 동일한 수의 파티션으로 파켓 파일이로드되지 않습니다.
예를 들면 다음과 같습니다.
sc._jsc.hadoopConfiguration().setInt("parquet.block.size", 64*2**20)
sc._jsc.hadoopConfiguration().setInt("dfs.blocksize", 64*2**20)
43.5M이 128M보다 훨씬 낮다는 것을 알고 있습니다. 그러나이 응용 프로그램에서는 많은 변환을 즉시 완료하여 각 120 개의 파티션이 128M에 훨씬 가까워 질 것입니다.
로드 후 즉시 응용 프로그램에서 파티션을 다시 나누지 않아도됩니다.
Spark가 hdfs에 저장된 동일한 수의 파티션으로 쪽모이 세공 파일을로드하도록하는 방법이 있습니까?
해결법
-
==============================
1.먼저 Spark가 데이터를 파티션으로 분할하는 방법을 확인하기 시작했습니다. 기본적으로 데이터 및 클러스터의 특성과 크기에 따라 다릅니다. 이 기사에서는 데이터 프레임이 60 개의 파티션에로드 된 이유에 대한 답변을 제공해야합니다.
먼저 Spark가 데이터를 파티션으로 분할하는 방법을 확인하기 시작했습니다. 기본적으로 데이터 및 클러스터의 특성과 크기에 따라 다릅니다. 이 기사에서는 데이터 프레임이 60 개의 파티션에로드 된 이유에 대한 답변을 제공해야합니다.
https://umbertogriffo.gitbooks.io/apache-spark-best-practices-and-tuning/content/sparksqlshufflepartitions_draft.html
일반적으로 모든 최적화 (파티션 수 포함)를 처리하는 Catalyst이므로, 사용자 지정 설정에 대한 정당한 이유가 없으면 작업을 수행하도록합니다. 사용하는 변환이 넓 으면 Spark는 어쨌든 데이터를 섞습니다.
from https://stackoverflow.com/questions/56602051/load-parquet-file-and-keep-same-number-hdfs-partitions by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하이브에서 열 유형 변경 (0) | 2019.08.14 |
---|---|
[HADOOP] Spark의 Hive 쿼리에 대한 HIVE_STATS_JDBC_TIMEOUT (0) | 2019.08.14 |
[HADOOP] AWS EMR 성능 HDFS 및 S3 (0) | 2019.08.14 |
[HADOOP] hbase에서 테이블 만들기 (0) | 2019.08.14 |
[HADOOP] HBase-WAL과 MemStore의 차이점은 무엇입니까? (0) | 2019.08.14 |