开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

FlinkSink写到hdfs的文件,不是part开头,而是以 . 开头的文件。请问这个是怎么回事?

FlinkSink写到hdfs的文件,不是part开头,而是以 . 开头的文件。请问这个是怎么回事?

f6d93d8436585c536223addaeca5535.png

展开
收起
JWRRR 2023-04-03 15:15:32 449 0
4 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在 Flink 中,将数据写入 HDFS 时,生成的文件名不是以 "part-" 开头的文件,而是以 "." 开头的文件,这是因为 Flink 在将数据写入 HDFS 时,会使用 Hadoop 的 OutputFormat 接口来实现数据的写入,而 OutputFormat 接口默认使用 Hadoop 的 FileOutputCommitter 类来管理输出文件的生成和提交。

    FileOutputCommitter 类在生成文件名时,会根据当前任务的 ID、尝试次数和输出路径等信息来生成一个唯一的文件名,然后将数据写入该文件中。由于该文件名是由 Hadoop 内部生成的,因此不是以 "part-" 开头的文件。

    如果您想要修改生成的文件名格式,可以通过自定义 OutputFormat 来实现。具体来说,您可以继承 Hadoop 的 FileOutputFormat 类,并重写其中的 getDefaultWorkFile 和 getUniqueFile 方法来实现自定义的文件名生成方式。例如,可以将文件名设置为 "part-" 开头的文件,或者按照其他规则来生成文件名。

    2023-04-23 22:59:31
    赞同 展开评论 打赏
  • 你加了前缀 和 后缀,文件是会按照你设置的去现实。.这个开头的应该是你任务没有正常关闭导致的。此回答整理自钉群“【③群】Apache Flink China社区”

    2023-04-03 16:46:27
    赞同 展开评论 打赏
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    你好,如果启用了数据块压缩(Compression),默认情况下会使用 Hadoop 的 SequenceFileOutputFormat 将数据写入到 HDFS 中,生成的文件以 . 开头。

    如果不启用数据块压缩,则会使用 Hadoop 的 TextOutputFormat 将数据写入到 HDFS 中,生成的文件以“part-”开头。如果需要修改生成文件名的规则,可以通过设置 Flink 的 FileSystem.WriteMode 来实现。例如,可以将 FileSystem.WriteMode 设置为 OVERWRITE,并且在指定输出路径时添加文件名前缀“part-”,则生成的文件名将以“part-”开头,而不是以“.”开头。

    2023-04-03 15:28:38
    赞同 展开评论 打赏
  • 存在即是合理

    可能是由于你的Hadoop配置文件中设置了“文件名前缀”,导致Flink在写HDFS文件时使用了以.开头的文件名。可以在Hadoop配置文件中查看dfs.namenode.edits.dir和dfs.namenode.name.dir参数的设置,或者使用Hadoop命令hdfs getconf -confKey dfs.namenode.edits.dir和hdfs getconf -confKey dfs.namenode.name.dir来查看这些参数的值。建议再排查一下

    2023-04-03 15:22:01
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
海量数据分布式存储——Apache HDFS之最新进展 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载