我开发了一个消耗Kafka流的简单Flink作业。一切都在当地环境中发挥作用。但是当我尝试使用YARN在我的集群上运行我的Flink作业时,什么都没有发生。 (并且,我没有任何错误消息)。
./bin/flink run -m yarn-cluster -yn 4 /Flink/Flink_Stream_Kafka/jar-with-dependencies.jar --server X.X.X.X:9092 --topic logs
我当然检查了我的群集是否可以访问流,但它有。我甚至可以在我的集群的每台机器上运行我的工作作为一个简单的java程序,它可以工作。
有什么见解可以解释这个吗?
谢谢
编辑:
object KafkaConsuming {
def main(args: Array[String]) {
// Flink parameter tool
// Allow to pass arguments to this script
val params: ParameterTool = ParameterTool.fromArgs(args)
// set up streaming execution environment
val env = StreamExecutionEnvironment.getExecutionEnvironment
// make parameters available globally
env.getConfig.setGlobalJobParameters(params)
val properties = new Properties();
properties.setProperty("bootstrap.servers", params.get("server"));
// only requied for Kafka 0.8
//properties.rsetProperty("zookeeper.connect", "X.X.X.X:2181");
val stream: DataStream[String] = env.addSource(new FlinkKafkaConsumer010[String](params.get("topic"), new SimpleStringSchema(), properties))
//stream.print()
val logs: DataStream[MinifiedLog] = stream.map(x => LogParser2.parse(x))
val sessions = logs.map { x => (x.timestamp, x.sent, 1l)}
val sessionCnt: DataStream[(Long, Long, Long)] = sessions
// key stream by sensorId
.keyBy(2)
// tumbling time window of 1 minute length
.window(TumblingProcessingTimeWindows.of(Time.seconds(10)))
.reduce( (x: (Long, Long, Long), y: (Long, Long, Long)) => (x._1, x._2 + y._2, x._3 + y._3))
.map { z => (z._1, z._2 / 10, z._3 / 10)}
sessionCnt.print()
env.execute("Kafka consuming")
}
}
答案 0 :(得分:1)
sessionCnt.print()
的输出将写入TaskManagers的标准输出。
在YARN上,访问该输出的最简单方法是使用聚合的YARN日志(yarn logs -applicationId <appid>
)检索所有日志。
我不确定Flink UI中对标准输出文件的访问是否正常工作。
检查数据是否到达的另一种方法是使用Flink Web UI。