FlinkSink写到hdfs的文件,不是part开头,而是以 . 开头的文件。请问这个是怎么回事?
在 Flink 中,将数据写入 HDFS 时,生成的文件名不是以 "part-" 开头的文件,而是以 "." 开头的文件,这是因为 Flink 在将数据写入 HDFS 时,会使用 Hadoop 的 OutputFormat 接口来实现数据的写入,而 OutputFormat 接口默认使用 Hadoop 的 FileOutputCommitter 类来管理输出文件的生成和提交。
FileOutputCommitter 类在生成文件名时,会根据当前任务的 ID、尝试次数和输出路径等信息来生成一个唯一的文件名,然后将数据写入该文件中。由于该文件名是由 Hadoop 内部生成的,因此不是以 "part-" 开头的文件。
如果您想要修改生成的文件名格式,可以通过自定义 OutputFormat 来实现。具体来说,您可以继承 Hadoop 的 FileOutputFormat 类,并重写其中的 getDefaultWorkFile 和 getUniqueFile 方法来实现自定义的文件名生成方式。例如,可以将文件名设置为 "part-" 开头的文件,或者按照其他规则来生成文件名。
你加了前缀 和 后缀,文件是会按照你设置的去现实。.这个开头的应该是你任务没有正常关闭导致的。此回答整理自钉群“【③群】Apache Flink China社区”
你好,如果启用了数据块压缩(Compression),默认情况下会使用 Hadoop 的 SequenceFileOutputFormat 将数据写入到 HDFS 中,生成的文件以 . 开头。
如果不启用数据块压缩,则会使用 Hadoop 的 TextOutputFormat 将数据写入到 HDFS 中,生成的文件以“part-”开头。如果需要修改生成文件名的规则,可以通过设置 Flink 的 FileSystem.WriteMode 来实现。例如,可以将 FileSystem.WriteMode 设置为 OVERWRITE,并且在指定输出路径时添加文件名前缀“part-”,则生成的文件名将以“part-”开头,而不是以“.”开头。
可能是由于你的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来查看这些参数的值。建议再排查一下
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。