Relacionados con mi otra pregunta, pero distintas:

someMap.saveAsTextFile("hdfs://HOST:PORT/out")

Si puedo ahorrar un RDD a HDFS, ¿cómo puedo saber chispa para comprimir la salida con gzip?
En Hadoop, es posible establecer

mapred.output.compress = true

y elegir el algoritmo de compresión con

mapred.output.compression.codec = <<classname of compression codec>>

¿Cómo puedo hacer esto en la chispa? En este trabajo así?

editar: el uso de chispa-0.7.2

InformationsquelleAutor ptikobj | 2013-06-21

3 Comentarios

  1. 21

    El método saveAsTextFile toma un parámetro adicional de la códec de clase. Así, por su ejemplo debería ser algo como esto para usar gzip:

    someMap.saveAsTextFile("hdfs://HOST:PORT/out", classOf[GzipCodec])

    ACTUALIZACIÓN

    Ya que usted está utilizando 0.7.2 usted podría ser capaz de puerto el código de compresión a través de las opciones de configuración que se establece en el inicio. No estoy seguro de si esto va a funcionar exactamente, pero usted necesita para pasar de esto:

    conf.setCompressMapOutput(true)
    conf.set("mapred.output.compress", "true")
    conf.setMapOutputCompressorClass(c)
    conf.set("mapred.output.compression.codec", c.getCanonicalName)
    conf.set("mapred.output.compression.type", CompressionType.BLOCK.toString)

    a algo como esto:

    System.setProperty("spark.hadoop.mapred.output.compress", "true")
    System.setProperty("spark.hadoop.mapred.output.compression.codec", "true")
    System.setProperty("spark.hadoop.mapred.output.compression.codec", "org.apache.hadoop.io.compress.GzipCodec")
    System.setProperty("spark.hadoop.mapred.output.compression.type", "BLOCK")

    Si consigues el trabajo, la publicación de su config probablemente sería útil a los demás.

    • con que versión de la chispa de este trabajo? Yo estoy usando la chispa 0.7.2 y me sale un error en tiempo de compilación: error: too many arguments for method saveAsTextFile. Vi que este era discutido aunque.
    • Veo que es en el nuevo spark-0.8.0. Tendrá que tirar de él como parece, ya que esta es una característica importante.
    • ah, eso tiene sentido. He estado trabajando con la rama master, no 0.7.2.
    • He probado el segundo fragmento (System.setProperty(...) [...]) y de inmediato trabajado con 0.7.2. Gracias 🙂
    • Usted está estableciendo spark.hadoop.mapred.output.compression.codec dos veces, que es redundante, a menos que me estoy perdiendo algo?
    • Preguntándose si es posible para evitar la hadoopish formato al almacenar los datos en un archivo. No puedo usar el directorio con _SUCCES y part-* archivo. Sólo necesito un específico con nombre de archivo único… estoy usando s3 de almacenamiento
    • Similar respuesta stackoverflow.com/questions/31933053/…
    • Es posible establecer estos parámetros en una manera similar en spark-defaults.xml lugar, por lo que cada trabajo puede utilizarla? He intentado replicar la configuración en spark-defaults.xml, pero la configuración no parecen ser recogido.

  2. 2

    Otra manera de guardar en formato gzip, archivos HDFS o Amazon S3 directorio de sistema es el uso de la saveAsHadoopFile método.

    someMap es RDD[(K,V)], si usted tiene someMap como RDD[V], usted puede llamar a someMap.(el mapa de la línea=>(línea, «») para el uso de saveAsHadoopFile método.

    import org.apache.hadoop.io.compress.GzipCodec
    
    someMap.saveAsHadoopFile(output_folder_path, classOf[String], classOf[String], classOf[MultipleTextOutputFormat[String, String]], classOf[GzipCodec])
    • Es posible establecer estos parámetros en una manera similar en spark-defaults.xml lugar, por lo que cada trabajo puede utilizarla? He intentado replicar la configuración en spark-defaults.xml, pero la configuración no parecen ser recogido.
  3. 1

    Para las nuevas Spark versión, por favor, haga lo siguiente en su spark-defaults.xml archivo. (mapred es derecated).

    <property>
        <name>mapreduce.output.fileoutputformat.compress</name>
        <value>true</value>
    </property>
    <property>
        <name>mapreduce.output.fileoutputformat.compress.codec</name>
        <value>GzipCodec</value>
    </property>
    <property>
        <name>mapreduce.output.fileoutputformat.compress.type</name>
        <value>BLOCK</value>
    </property>

Dejar respuesta

Please enter your comment!
Please enter your name here