Java ApacheFlink:从HDFS读取文件

Java ApacheFlink:从HDFS读取文件,java,hdfs,apache-flink,Java,Hdfs,Apache Flink,因此,我必须检索存储在HDFS中的文件内容,并对其执行某些分析 问题是,我甚至无法读取文件并将其内容写入本地文件系统中的另一个文本文件。(我是Flink的新手,这只是一个测试,以确保我正确读取了文件) HDFS中的文件是纯文本文件。这是我的密码: public class readFromHdfs { public static void main(String[] args) throws Exception { final ExecutionEnvironment

因此,我必须检索存储在HDFS中的文件内容,并对其执行某些分析

问题是,我甚至无法读取文件并将其内容写入本地文件系统中的另一个文本文件。(我是Flink的新手,这只是一个测试,以确保我正确读取了文件)

HDFS中的文件是纯文本文件。这是我的密码:

public class readFromHdfs {

    public static void main(String[] args) throws Exception {

        final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

        DataSet<String> lines = env.readTextFile("hdfs://localhost:9000//test/testfile0.txt");

        lines.writeAsText("/tmp/hdfs_file.txt"); 

        env.execute("File read from HDFS");
    }
}
公共类readFromHdfs{
公共静态void main(字符串[]args)引发异常{
final ExecutionEnvironment env=ExecutionEnvironment.getExecutionEnvironment();
数据集行=env.readTextFile(“hdfs://localhost:9000//test/testfile0.txt");
writesText(“/tmp/hdfs_file.txt”);
env.execute(“从HDFS读取的文件”);
}
}
在我运行/tmp之后,它没有输出

这是一个非常简单的代码,我不确定它是否有问题,或者我只是做了一些别的错误。正如我所说,我对弗林克完全是新手

此外,作业在web仪表板中显示为失败。这是弗林克圆木的内容:

提前谢谢

编辑:我通过增加任务槽的数量解决了这个问题。web仪表板显示了一个可用的任务槽,它根本没有抱怨没有足够的槽,所以我认为不可能是这样

总之,WriteEastText它并没有像我预期的那样工作。我完全可以从testfile0.txt读取内容,但它不会将它们写入hdfs_file.txt。相反,它创建了一个同名目录,其中有8个文本文件,其中6个完全为空。另外两个包含testfile0.txt(大部分在1.txt中,最后一个在2.txt中)


虽然这并不重要,因为文件的内容正确地存储在数据集中,所以我可以继续分析数据。

它按预期工作-您已将完整作业的并行度(以及输出格式)设置为8,因此每个插槽创建自己的文件(如您所知,并发写入单个文件是不安全的)。如果您只需要一个输出文件,则应
writesText(…).setParallelis(1)
以覆盖全局并行属性

如果您想在本地文件系统而不是HDFS中获得输出,那么应该在path中显式设置“file://”协议,因为对于Hadoop,flink默认情况下会选择“HDFS://”