spark 에서 hdfs 내에 있는 text file 을 read 한다고 하자.

 

 

방법은 두 가지가 있다.

 

1. spark.sparkContext.textFile 로 읽기 :

  rdd 으로 읽는다.

  hdfs 의 block 개수에 따라 읽은 데이터의 기본 rdd partition 이 나눠진다.

  shuffle partition 값을 직접 지정하고 싶다면 spark.default.parallelism 옵션을 사용해야 한다.

 

2. spark.read.text~ 로 읽기 :

  dataset 으로 읽는다.

  hdfs 의 block 개수와는 상관 없이 읽은 데이터의 기본 dataset partition 이 나눠진다.

  이 값을 직접 지정하고 싶다면 spark.default.parallelism 옵션을 사용해야 한다.

  shuffle partition 값을 직접 지정하고 싶다면 spark.sql.shuffle.partitions 옵션을 사용해야 한다.

 

 

 

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

 

1. spark.sparkContext.textFile 로 읽기 :

 

 

spark.sparkContext.textFile 로 읽으면 읽은 file을 rdd 안에 넣어준다.

 

hdfs 에서 읽어오기 때문에 file 이 hdfs 에 퍼져있는 block 개수에 따라 rdd 의 partition 이 결정된다.

1gb text file 을 256 mb 로 나눠 갖고 있던 hdfs 에서 읽어왔기 때문에 4개 블럭으로 분리되어있다.

 

shuffle 이 일어날 때 분할되어지는 개수인 shuffle partition value(default 200) 값을 직접 수정하고 싶다고 하자.

spark.sparkContext.textFile 로 읽은 데이터는 spark.default.parallelism 옵션을 사용하여 수정 가능하다.

예를 들면 40개로 수정하고 싶다면 아래처럼 하면 된다.

 

spark-shell --master local[2] --conf spark.default.parallelism=40

 

 

 

 

 

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

 

2. spark.read.text~ 로 읽기 :

 

 

반면 spark.read.textFile 등으로 데이터를 읽으면 읽은 file 을 dataset 안에 넣어준다.

 

hdfs 에서 읽어오더라도 hdfs block 개수에 영향을 받지 않는다.

위의 데이터와 똑같은 데이터지만, hdfs 의 블럭 개수인 4개에 영향을 받지 않고 9개로 나뉘어져 있다.

 

 

shuffle 이 일어날 때 분할되어지는 개수인 shuffle partition value(default 200) 값을 직접 수정하고 싶다고 하자.

spark.read.textFile 로 읽은 데이터는 spark.sql.shuffle.partitions 옵션을 사용하여 수정 가능하다.

예를 들면 40개로 수정하고 싶다면 아래처럼 하면 된다.

 

spark-shell --master local[2] --conf spark.sql.shuffle.partitions=40

 

 

 

 

그럼 spark.read.textFile 로 읽은 데이터의 기본 partition 개수는 어떻게 바꿀 수 있을까?

hdfs block 개수만큼 바뀌지도 않을텐데 말이다.

 

이때는 spark.default.parallelism configuration 을 넣어주면 바꿀 수 있다.

 

위의 방법처럼 spark-shell 을 실행시키거나 혹은 code 내에서 configuration 을 적용하는 방법을 이용하면

partition 개수를 조절할 수 있다. 조절된 개수에 따라 균등하게 partition size 도 나뉘어진다.

 

내 경우는 9 이상의 숫자로만 조절 가능하고 9 미만의 숫자를 넣으면 9로 partitioning 된다.

심지어 sc.defaultParallelism 는 내가 적용한 값으로 나오는데 rdd.getNumPartitions 는 9로 고정되어 나오더라.

왜인지 찾아보려고 spark 와 hadoop 의 환경 변수/옵션 값들을 찾아보았으나 

찾지 못하였다.

 

 

 

 

 

 

 

가장 아래 첨부한 link 를 보면 spark 에서 text file 을 읽는 다양한 방법들이 자세히 설명되어 있다.

 

 

 

 

Spark Session, Spark Context 만드는 방법

partition size 확인하는 방법

partition 개수 참고

 

 

 

 

읽는 방법 자세히 소개된 곳 

https://sparkbyexamples.com/spark/spark-read-text-file-rdd-dataframe/#dataframe-example

 

Spark Read Text File | RDD | DataFrame — Spark by {Examples}

In this Spark tutorial, you will learn how to read text file into RDD and DataFrame using Scala examples. Spark provides several ways to read .txt files,

sparkbyexamples.com

https://sparkbyexamples.com/spark/spark-read-write-files-from-hdfs-txt-csv-avro-parquet-json/

 

Spark Read Files from HDFS (TXT, CSV, AVRO, PARQUET, JSON) — Spark by {Examples}

Though Spark supports to read from/write to files on multiple file systems like Amazon S3, Hadoop HDFS, Azure, GCP e.t.c, the HDFS file system is mostly

sparkbyexamples.com

 

+ Recent posts