복붙노트

[HADOOP] newAPIHadoopFile에 대한 파티션 수를 설정하는 방법은 무엇입니까?

HADOOP

newAPIHadoopFile에 대한 파티션 수를 설정하는 방법은 무엇입니까?

"old"SparkContext.hadoopFile은 파티션 수에 대한 힌트 인 minPartitions 인수를 사용합니다.

def hadoopFile[K, V](
  path: String,
  inputFormatClass: Class[_ <: InputFormat[K, V]],
  keyClass: Class[K],
  valueClass: Class[V],
  minPartitions: Int = defaultMinPartitions
  ): RDD[(K, V)]

그러나 SparkContext.newAPIHadoopFile에는 이러한 인수가 없습니다.

def newAPIHadoopFile[K, V, F <: NewInputFormat[K, V]](
  path: String,
  fClass: Class[F],
  kClass: Class[K],
  vClass: Class[V],
  conf: Configuration = hadoopConfiguration): RDD[(K, V)]

사실 mapred.InputFormat.getSplits는 힌트 인수를 취하지 만 mapreduce.InputFormat.getSplits는 JobContext를 사용합니다. 새 API를 통해 분할 수에 영향을 미치는 방법은 무엇입니까?

Configuration 객체에 mapreduce.input.fileinputformat.split.maxsize 및 fs.s3n.block.size를 설정하려고했지만 아무 효과가 없습니다. 내가 s3n에서 4.5 기가 바이트 파일을로드하려고하고, 그것은 하나의 작업에로드 가져옵니다.

https://issues.apache.org/jira/browse/HADOOP-5861은 관련이 있지만, 기본 블록 크기가 64MB이므로 두 개 이상의 분할을 이미보아야한다고 제안합니다.

해결법

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

    1.newApiHadoopFile 함수를 사용하면 mapred.max.split.size를 설정할 수 있도록 구성 객체를 전달할 수 있습니다.

    newApiHadoopFile 함수를 사용하면 mapred.max.split.size를 설정할 수 있도록 구성 객체를 전달할 수 있습니다.

    겉으로보기에는 새로운 옵션이 없기 때문에 매핑 된 네임 스페이스에 있지만 새 API가 변수를 존중할 것이라고 생각합니다.

  2. from https://stackoverflow.com/questions/25441524/how-to-set-the-number-of-partitions-for-newapihadoopfile by cc-by-sa and MIT license