【问题标题】:How to "force" CRC files to appear when writing csv/parquet on HDFS in Spark在 Spark 中的 HDFS 上写入 csv/parquet 时如何“强制”显示 CRC 文件
【发布时间】:2021-07-03 11:40:54
【问题描述】:

我似乎遇到了与 Internet 其他人相反的问题 - 任何关于该主题的搜索都会引发数以千计的问题,关于在写出时如何抑制 CRC 文件使用 Spark。

在集群上使用 Spark 并将内容写入 HDFS 时,我看不到我通常在本地系统上看到的任何 .crc 文件。任何想法如何“强制”它们出现?

【问题讨论】:

  • 我认为它们不会(默认)出现在 HDFS 上,因为文件系统内置了该功能。

标签: scala apache-spark hadoop crc


【解决方案1】:

您可以尝试以下方法,查看 hdfs 文件夹中是否出现 .crc 文件。

val customConf = spark.sparkContext.hadoopConfiguration
val fileSystemObject = org.apache.hadoop.fs.FileSystem.get(customConf)
fileSystemObject.setVerifyChecksum(true)

【讨论】:

  • 遗憾的是没有变化...是不是我在输入hdfs dfs -ls <path> 时没有看到它们,应该包含-ls 的选项?
  • fs.setWriteChecksum(true) fs.setVerifyChecksum(true) 你能尝试将这两个配置都设置为true看看吗?
  • 另外,试试 hdfs dfs -ls -la ?
  • 运气不好...-la 不是有效的hdfs dfs -ls 选项
【解决方案2】:

如果您在 HDFS 上写入文本文件 - 您需要使用“false”调用 setWriteChecksum。你的文件只有一个:

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FileSystem, Path}

val conf = new Configuration()
conf.set("fs.defaultFS", uri)
val hdfs = FileSystem.get(conf)

// this is it!
hdfs.setWriteChecksum(false)

val outputStream = hdfs.create(new Path("full/file/path"))
outputStream.write("string to be written".getBytes)
outputStream.close()
hdfs.close()

【讨论】:

    猜你喜欢
    • 2017-03-17
    • 2020-01-11
    • 2017-01-07
    • 1970-01-01
    • 2018-10-27
    • 2018-11-18
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多