web-dev-qa-db-ja.com

Sparkスタンドアロンモード:圧縮方法spark HDFSに書き込まれる出力

私の他の質問に関連していますが、明確です:

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

RDDをHDFSに保存する場合、出力をgzipで圧縮するようにsparkに指示するにはどうすればよいですか?Hadoopでは、次のように設定できます。

mapred.output.compress = true

で圧縮アルゴリズムを選択します

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

これをSparkでどのように行うのですか?これも機能しますか?

編集:spark-0.7.2を使用

22
ptikobj

メソッドsaveAsTextFileは、使用するコーデッククラスの追加のオプションパラメータを取ります。したがって、あなたの例では、gzipを使用すると次のようになります。

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

[〜#〜] update [〜#〜]

0.7.2を使用しているため、起動時に設定した構成オプションを使用して圧縮コードを移植できる場合があります。これが正確に機能するかどうかはわかりませんが、次のようにする必要があります。

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)

このようなものに:

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")

それが機能するようになれば、設定を投稿することはおそらく他の人にも役立つでしょう。

21
Noah

Gzip圧縮されたファイルをHDFSまたはAmazonS3ディレクトリシステムに保存する別の方法は、saveAsHadoopFileメソッドを使用することです。

someMapはRDD [(K、V)]です。someMapをRDD [V]として使用している場合は、someMap.map(line =>(line、 "")を呼び出してsaveAsHadoopFileメソッドを使用できます。

import org.Apache.hadoop.io.compress.GzipCodec

someMap.saveAsHadoopFile(output_folder_path, classOf[String], classOf[String], classOf[MultipleTextOutputFormat[String, String]], classOf[GzipCodec])
2
Gongqin Shen

新しいSparkリリースの場合は、spark-defaults.xmlファイルで次の手順を実行してください(mapredは削除されます)。

<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>
1
nikk