Spark Standalone Mode:如何压缩写入HDFS的spark输出

pti*_*obj 22 compression scala hdfs apache-spark

与我的其他问题有关,但有所不同:

someMap.saveAsTextFile("hdfs://HOST:PORT/out")
Run Code Online (Sandbox Code Playgroud)

如果我将RDD保存到HDFS,如何通过gzip告诉spark压缩输出?在Hadoop中,可以设置

mapred.output.compress = true
Run Code Online (Sandbox Code Playgroud)

并选择压缩算法

mapred.output.compression.codec = <<classname of compression codec>>
Run Code Online (Sandbox Code Playgroud)

我如何在火花中做到这一点?这会有效吗?

编辑:使用spark-0.7.2

Noa*_*oah 21

该方法saveAsTextFile需要使用编解码器类的附加可选参数.所以对于你的例子,使用gzip应该是这样的:

someMap.saveAsTextFile("hdfs://HOST:PORT/out", classOf[GzipCodec])
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

这样的事情:

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")
Run Code Online (Sandbox Code Playgroud)

如果你让它工作,发布你的配置也可能对其他人有帮助.