我正在用flink做一个简单的程序,但是它不会在std输出中显示任何字符串。我已经尝试在流上使用print()方法,并在结果上使用reduce函数和print()方法。这是一个代码:
公共类StreamingJob {
public static void main(String[] args) throws Exception {
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(10000);
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
env.getConfig().setAutoWatermarkInterval(200L);
List<Oggetto> objects = produciValori();
DataStream<Oggetto> stream = env.fromCollection(objects);
stream./*
timeWindowAll(Time.seconds(5)).reduce(new Reduce()).*/
print();
env.execute("Flink Streaming Java Quickstart Mio");
}
private static List<Oggetto> produciValori() {
List<Oggetto> objects = new ArrayList<>();
int prop1 = 0;
int prop2 = 1000;
String stringa1 = "stringa1: " + prop1;
String stringa2 = "stringa2: " + prop2;
for (int i = 0; i < 1000; i++) {
prop1 = prop1 + 1;
prop2 = prop2 + 1;
stringa1 = "stringa1: " + prop1;
stringa2 = "stringa2: " + prop2;
Oggetto o = new Oggetto(prop1, prop2, stringa1, stringa2);
objects.add(o);
}
return objects;
}
private static class Reduce implements org.apache.flink.api.common.functions.ReduceFunction<Oggetto> {
@Override
public Oggetto reduce(Oggetto oggetto, Oggetto t1) throws Exception {
if (oggetto.getPropInt1() <= t1.getPropInt1()){
return oggetto;
}else {
return t1;
}
}
}
}
答案 0 :(得分:0)
如果要将作业提交到集群,则应该在flink日志目录中的文件名为 -taskexecutor- .out的文件中找到输出。如果您在IDE中运行,则输出应显示在IDE的控制台中。
没有可用的Oggetto类,我只是用简单的东西替换了它,并且能够很好地运行您的应用程序。
答案 1 :(得分:0)
因此,每当您使用println()
或print()
打印流数据/对象时,它实际上都会在控制台上打印。
IDE
中执行代码时,它将在IDE console
中打印流数据/对象,但是Flink Job
时,可以在Flink目录的.out
文件中看到打印的输出。在下图中,您可以看到flink-keshavlodhi-taskexecutor-0-Keshavs-MacBook-Pro.local.out
文件。 您可以在提取Flink tar文件的系统中找到Flink日志目录。 例如
/Users/keshavlodhi/softwares/flink-1.10.0/log/
注意:每当您使用任何logger
API进行打印时,您都可以在.log
文件中找到流数据/对象。