복붙노트

[HADOOP] 스파크 스트리밍 빈 파티션에 대한 쓰기 파일을 피하십시오

HADOOP

스파크 스트리밍 빈 파티션에 대한 쓰기 파일을 피하십시오

나는 카프카 파티션의 데이터 (파티션 당 하나의 집행자)를 읽어 스파크 스트리밍 작업을해야합니다. 나는 HDFS로 변환 값을 저장하지만, 빈 파일 생성을 방지해야 할 필요가있다. 나는 IsEmpty 함수를 사용하려하지만, 모든 파티션이 비어있는 경우이 도움이되지 않습니다.

추신 파티션의 성능 저하로 인해 수용 가능한 해결책이 아니다.

해결법

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

    1.이 코드는 PairRDD 작동합니다.

    이 코드는 PairRDD 작동합니다.

    텍스트 코드 :

      val conf = ssc.sparkContext.hadoopConfiguration
      conf.setClass("mapreduce.output.lazyoutputformat.outputformat",
        classOf[TextOutputFormat[Text, NullWritable]]
        classOf[OutputFormat[Text, NullWritable]])
    
      kafkaRdd.map(_.value -> NullWritable.get)
        .saveAsNewAPIHadoopFile(basePath,
          classOf[Text],
          classOf[NullWritable],
          classOf[LazyOutputFormat[Text, NullWritable]],
          conf)
    

    아 브로에 대한 코드 :

      val avro: RDD[(AvroKey[MyEvent], NullWritable)]) = ....
      val conf = ssc.sparkContext.hadoopConfiguration
    
      conf.set("avro.schema.output.key", MyEvent.SCHEMA$.toString)
      conf.setClass("mapreduce.output.lazyoutputformat.outputformat",
        classOf[AvroKeyOutputFormat[MyEvent]],
        classOf[OutputFormat[AvroKey[MyEvent], NullWritable]])
    
      avro.saveAsNewAPIHadoopFile(basePath,
        classOf[AvroKey[MyEvent]],
        classOf[NullWritable],
        classOf[LazyOutputFormat[AvroKey[MyEvent], NullWritable]],
        conf)
    

  2. from https://stackoverflow.com/questions/53538677/avoid-write-files-for-empty-partitions-in-spark-streaming by cc-by-sa and MIT license