在flink1.3.2及一下版本中有一个bug,导致吧cpu打满,从而会影响node manager上其他task的正常运行。官方链接说明:
https://issues.apache.org/jira/browse/FLINK-7368
看了以后,是由于MetricStore中使用hashmap,在多线程下出现死循环,导致cpu被打满。升级到1.4.2及以上版本就可以解决。升级过程中的注意事项:
1、需要jdk1.8版本:
flink1.3.2支持jdk7,到了1.4.2后最低版本要求1.8。否则会报如下错误:
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/flink/api/common/serialization/DeserializationSchema : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2625)
at java.lang.Class.getMethod0(Class.java:2866)
at java.lang.Class.getMethod(Class.java:1676)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
2、scala最低要求2.11版本:
在maven依赖中,需要把对应的scala版本升级到2.11。
3、需要手动引入hadoop-hdfs依赖:
在flink1.3.2中,flink会把hadoop相关的jar包打到flink包中。在1.4.2没有这么做,所以如果使用自定义Bucketer这种功能的时候需要手动引入,否则会报:org.apache.hadoop.fs找不到
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.4.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.4.1</version>
<scope>provided</scope>
</dependency>
在1.3.2中我们可以看到这个包中包含了hadoop相关类