![](/img/trans.png)
[英]Running Java Jar with included config via maven on flink yarn cluster
[英]Different result on running Flink in local mode and Yarn cluster
我使用Flink Java API運行代碼,該代碼從Kafka獲取一些字節,然后使用另一種庫靜態方法將其插入Cassandra數據庫中進行解析(解析和插入結果均由該庫完成)。 我在IDE的本地運行代碼,得到了所需的答案,但是在YARN群集上運行時,解析方法未按預期工作!
public class Test {
static HashMap<Integer, Object> ConfigHashMap = new HashMap<>();
public static void main(String[] args) throws Exception {
CassandraConnection.connect();
Parser.setInsert(true);
stream.flatMap(new FlatMapFunction<byte[], Void>() {
@Override
public void flatMap(byte[] value, Collector<Void> out) throws Exception {
Parser.parse(ByteBuffer.wrap(value), ConfigHashMap);
// Parser.parse(ByteBuffer.wrap(value));
}
});
env.execute();
}
}
Parser
類中有一個靜態HashMap字段,解析數據的配置基於其信息,並且數據將在執行期間插入。 在YARN上運行的問題是該數據不適用於taskmanagers
而他們只是print config is not available!
因此,我將HashMap重新定義為parse
方法的參數,但結果沒有差異!
我該如何解決該問題?
我將靜態方法和字段更改為非靜態,並使用RichFlatMapFunction
解決了該問題。
stream.flatMap(new RichFlatMapFunction<byte[], Void>() {
CassandraConnection con = new CassandraConnection();
int i = 0 ;
@Override
public void open(Configuration parameters) throws Exception {
super.open(parameters);
con.connect();
}
@Override
public void flatMap(byte[] value, Collector<Void> out) throws Exception {
ByteBuffer tb = ByteBuffer.wrap(value);
np.parse(tb, ConfigHashMap, con);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.