This is an automated email from the ASF dual-hosted git repository.

lindong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink-ml.git

commit f9327830b4da25940716714fc88eafbb56eed4b2
Author: Boris Tsirkin <[email protected]>
AuthorDate: Wed May 18 21:48:46 2022 +0200

    [FLINK-27798] Migrated to Flink 1.15.0.
    
    This closes #95.
---
 docs/README.md                                     |   5 +-
 docs/content/docs/try-flink-ml/quick-start.md      |  14 +-
 flink-ml-benchmark/README.md                       |   2 +-
 flink-ml-benchmark/pom.xml                         |  25 ++-
 .../flink/ml/benchmark/DataGeneratorTest.java      |   3 +
 flink-ml-core/pom.xml                              |  97 ++++------
 .../operator/AbstractBroadcastWrapperOperator.java |   6 +-
 flink-ml-dist/pom.xml                              |   8 +-
 flink-ml-dist/src/main/assemblies/bin.xml          |   2 +-
 flink-ml-iteration/pom.xml                         |  73 ++------
 .../datacache/nonkeyed/DataCacheSnapshot.java      |   4 +-
 .../flink/iteration/operator/OperatorUtils.java    |   5 +-
 .../flink/iteration/operator/HeadOperatorTest.java |   5 +-
 .../iteration/operator/ReplayOperatorTest.java     |   2 +-
 .../MultipleInputAllRoundWrapperOperatorTest.java  |   7 +-
 .../OneInputAllRoundWrapperOperatorTest.java       |   3 +-
 .../TwoInputAllRoundWrapperOperatorTest.java       |   5 +-
 .../MultipleInputPerRoundWrapperOperatorTest.java  |   7 +-
 .../OneInputPerRoundWrapperOperatorTest.java       |   3 +-
 .../TwoInputPerRoundWrapperOperatorTest.java       |   5 +-
 flink-ml-lib/pom.xml                               |  18 +-
 .../BinaryClassificationEvaluator.java             |   4 +-
 .../flink/ml/clustering/OnlineKMeansTest.java      |  61 +++---
 flink-ml-python/dev/dev-requirements.txt           |   2 +-
 .../ml/lib/tests/test_ml_lib_completeness.py       |   2 +-
 flink-ml-python/pyflink/ml/tests/test_utils.py     |   2 +-
 flink-ml-python/setup.py                           |   2 +-
 flink-ml-tests/pom.xml                             |   8 +-
 flink-ml-uber/pom.xml                              |  18 +-
 pom.xml                                            | 204 ++++++++++++++++++++-
 30 files changed, 381 insertions(+), 221 deletions(-)

diff --git a/docs/README.md b/docs/README.md
index a18fb18..6e7faac 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -88,7 +88,7 @@ the page:
 Flink uses [shortcodes](https://gohugo.io/content-management/shortcodes/) to 
add
 custom functionality to its documentation markdown. For example:
 
-    {{< artifact flink-ml-core withScalaVersion >}}
+    {{< artifact flink-ml-core withTestScope >}}
 
 This will be replaced by the maven artifact for flink-ml-core that users
 should copy into their pom.xml file. It will render out to:
@@ -96,8 +96,9 @@ should copy into their pom.xml file. It will render out to:
 ```xml
 <dependency>
     <groupdId>org.apache.flink</groupId>
-    <artifactId>flink-ml-core_2.12</artifactId>
+    <artifactId>flink-ml-core</artifactId>
     <version><!-- current flink version --></version>
+    <scope>test</scope>
 </dependency>
 ```
 
diff --git a/docs/content/docs/try-flink-ml/quick-start.md 
b/docs/content/docs/try-flink-ml/quick-start.md
index beaab27..0ef5a19 100644
--- a/docs/content/docs/try-flink-ml/quick-start.md
+++ b/docs/content/docs/try-flink-ml/quick-start.md
@@ -35,11 +35,11 @@ Learning Model and use it to provide prediction service.
 In order to use Flink ML in a Maven project, add the following dependencies to
 `pom.xml`.
 
-{{< artifact flink-ml-core withScalaVersion >}}
+{{< artifact flink-ml-core >}}
 
-{{< artifact flink-ml-iteration withScalaVersion >}}
+{{< artifact flink-ml-iteration >}}
 
-{{< artifact flink-ml-lib withScalaVersion >}}
+{{< artifact flink-ml-lib >}}
 
 The example code provided in this document requires additional dependencies on
 the Flink Table API. In order to execute the example code successfully, please
@@ -48,16 +48,16 @@ make sure the following dependencies also exist in 
`pom.xml`.
 ```xml
 <dependency>
   <groupId>org.apache.flink</groupId>
-  <artifactId>flink-clients_2.12</artifactId>
-  <version>1.14.0</version>
+  <artifactId>flink-clients</artifactId>
+  <version>1.15.0</version>
 </dependency>
 ```
 
 ```xml
 <dependency>
   <groupId>org.apache.flink</groupId>
-  <artifactId>flink-table-planner_2.12</artifactId>
-  <version>1.14.0</version>
+  <artifactId>flink-table-planner-loader</artifactId>
+  <version>1.15.0</version>
 </dependency>
 ```
 
diff --git a/flink-ml-benchmark/README.md b/flink-ml-benchmark/README.md
index 5edb3c7..69e4939 100644
--- a/flink-ml-benchmark/README.md
+++ b/flink-ml-benchmark/README.md
@@ -7,7 +7,7 @@ stages in a Linux/MacOS environment.
 
 ### Install Flink
 
-Please make sure Flink 1.14 or higher version has been installed in your local
+Please make sure Flink 1.15 or higher version has been installed in your local
 environment. You can refer to the [local
 
installation](https://nightlies.apache.org/flink/flink-docs-master/docs/try-flink/local_installation/)
 instruction on Flink's document website for how to achieve this.
diff --git a/flink-ml-benchmark/pom.xml b/flink-ml-benchmark/pom.xml
index 5b704e8..ce30dbd 100644
--- a/flink-ml-benchmark/pom.xml
+++ b/flink-ml-benchmark/pom.xml
@@ -26,27 +26,27 @@ under the License.
         <version>2.1-SNAPSHOT</version>
     </parent>
 
-    <artifactId>flink-ml-benchmark_${scala.binary.version}</artifactId>
+    <artifactId>flink-ml-benchmark</artifactId>
     <name>Flink ML : Benchmark</name>
 
     <dependencies>
         <dependency>
             <groupId>org.apache.flink</groupId>
-            <artifactId>flink-ml-iteration_${scala.binary.version}</artifactId>
+            <artifactId>flink-ml-iteration</artifactId>
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            <artifactId>flink-ml-core_${scala.binary.version}</artifactId>
+            <artifactId>flink-ml-core</artifactId>
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            <artifactId>flink-ml-lib_${scala.binary.version}</artifactId>
+            <artifactId>flink-ml-lib</artifactId>
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>
@@ -60,21 +60,21 @@ under the License.
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            
<artifactId>flink-table-api-java-bridge_${scala.binary.version}</artifactId>
+            <artifactId>flink-table-api-java-bridge</artifactId>
             <version>${flink.version}</version>
             <scope>provided</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            <artifactId>flink-clients_${scala.binary.version}</artifactId>
+            <artifactId>flink-clients</artifactId>
             <version>${flink.version}</version>
             <scope>provided</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            
<artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
+            <artifactId>flink-streaming-java</artifactId>
             <version>${flink.version}</version>
             <scope>test</scope>
             <type>test-jar</type>
@@ -89,14 +89,19 @@ under the License.
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            
<artifactId>flink-table-planner_${scala.binary.version}</artifactId>
-            <version>${flink.version}</version>
+            <artifactId>flink-table-runtime</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.flink</groupId>
+            <artifactId>flink-table-planner-loader</artifactId>
             <scope>test</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            <artifactId>flink-test-utils_${scala.binary.version}</artifactId>
+            <artifactId>flink-test-utils</artifactId>
             <version>${flink.version}</version>
             <scope>test</scope>
         </dependency>
diff --git 
a/flink-ml-benchmark/src/test/java/org/apache/flink/ml/benchmark/DataGeneratorTest.java
 
b/flink-ml-benchmark/src/test/java/org/apache/flink/ml/benchmark/DataGeneratorTest.java
index 66ecc86..937d25b 100644
--- 
a/flink-ml-benchmark/src/test/java/org/apache/flink/ml/benchmark/DataGeneratorTest.java
+++ 
b/flink-ml-benchmark/src/test/java/org/apache/flink/ml/benchmark/DataGeneratorTest.java
@@ -31,6 +31,7 @@ import org.apache.flink.util.CloseableIterator;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 /** Tests data generators. */
@@ -52,6 +53,7 @@ public class DataGeneratorTest {
             Row row = it.next();
             assertEquals(row.getArity(), 1);
             DenseVector vector = (DenseVector) 
row.getField(generator.getColNames()[0][0]);
+            assertNotNull(vector);
             assertEquals(vector.size(), generator.getVectorDim());
             count++;
         }
@@ -107,6 +109,7 @@ public class DataGeneratorTest {
             Row row = it.next();
             count++;
             DenseVector features = (DenseVector) row.getField(featuresCol);
+            assertNotNull(features);
             for (double value : features.values) {
                 assertTrue(value >= 0);
                 assertTrue(value <= generator.getFeatureArity() - 1);
diff --git a/flink-ml-core/pom.xml b/flink-ml-core/pom.xml
index 56dbe4a..9bad8a0 100644
--- a/flink-ml-core/pom.xml
+++ b/flink-ml-core/pom.xml
@@ -28,13 +28,13 @@ under the License.
     <version>2.1-SNAPSHOT</version>
   </parent>
 
-  <artifactId>flink-ml-core_${scala.binary.version}</artifactId>
+  <artifactId>flink-ml-core</artifactId>
   <name>Flink ML : Core</name>
 
   <dependencies>
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-ml-iteration_${scala.binary.version}</artifactId>
+      <artifactId>flink-ml-iteration</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
@@ -48,63 +48,66 @@ under the License.
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
+      <artifactId>flink-streaming-java</artifactId>
       <version>${flink.version}</version>
       <scope>provided</scope>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-table-planner_${scala.binary.version}</artifactId>
-      <version>${flink.version}</version>
-      <scope>test</scope>
+      <artifactId>flink-table-runtime</artifactId>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>dev.ludovic.netlib</groupId>
+      <artifactId>blas</artifactId>
+      <version>2.2.1</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-table-runtime_${scala.binary.version}</artifactId>
+      <artifactId>flink-table-api-java-bridge</artifactId>
       <version>${flink.version}</version>
       <scope>provided</scope>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
-      <version>${flink.version}</version>
-      <scope>test</scope>
-      <type>test-jar</type>
+      <artifactId>flink-connector-files</artifactId>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-test-utils_${scala.binary.version}</artifactId>
-      <version>${flink.version}</version>
+      <artifactId>flink-table-planner-loader</artifactId>
       <scope>test</scope>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-shaded-jackson</artifactId>
-      <scope>provided</scope>
+      <artifactId>flink-streaming-java</artifactId>
+      <version>${flink.version}</version>
+      <scope>test</scope>
+      <type>test-jar</type>
     </dependency>
 
     <dependency>
-      <groupId>dev.ludovic.netlib</groupId>
-      <artifactId>blas</artifactId>
-      <version>2.2.0</version>
+      <groupId>org.apache.flink</groupId>
+      <artifactId>flink-test-utils</artifactId>
+      <version>${flink.version}</version>
+      <scope>test</scope>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      
<artifactId>flink-table-api-java-bridge_${scala.binary.version}</artifactId>
-      <version>${flink.version}</version>
+      <artifactId>flink-shaded-jackson</artifactId>
       <scope>provided</scope>
     </dependency>
 
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
-      <version>2.21.0</version>
+      <version>2.28.2</version>
       <type>jar</type>
       <scope>test</scope>
     </dependency>
@@ -114,57 +117,31 @@ under the License.
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-hdfs</artifactId>
       <scope>test</scope>
-      <version>${hadoop.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>log4j</groupId>
-          <artifactId>log4j</artifactId>
-        </exclusion>
-      </exclusions>
     </dependency>
 
     <dependency>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-common</artifactId>
       <scope>test</scope>
-      <version>${hadoop.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>log4j</groupId>
-          <artifactId>log4j</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.slf4j</groupId>
-          <artifactId>slf4j-log4j12</artifactId>
-        </exclusion>
-        <exclusion>
-          <!-- This dependency is no longer shipped with the JDK since Java 
9.-->
-          <groupId>jdk.tools</groupId>
-          <artifactId>jdk.tools</artifactId>
-        </exclusion>
-      </exclusions>
     </dependency>
 
     <dependency>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-minicluster</artifactId>
       <scope>test</scope>
-      <version>${hadoop.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>log4j</groupId>
-          <artifactId>log4j</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.slf4j</groupId>
-          <artifactId>slf4j-log4j12</artifactId>
-        </exclusion>
-        <exclusion>
-          <!-- This dependency is no longer shipped with the JDK since Java 
9.-->
-          <groupId>jdk.tools</groupId>
-          <artifactId>jdk.tools</artifactId>
-        </exclusion>
-      </exclusions>
+    </dependency>
+    <!-- enforcing jackson versions -->
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-annotations</artifactId>
     </dependency>
   </dependencies>
 </project>
diff --git 
a/flink-ml-core/src/main/java/org/apache/flink/ml/common/broadcast/operator/AbstractBroadcastWrapperOperator.java
 
b/flink-ml-core/src/main/java/org/apache/flink/ml/common/broadcast/operator/AbstractBroadcastWrapperOperator.java
index 0dc4cfc..67c2a2d 100644
--- 
a/flink-ml-core/src/main/java/org/apache/flink/ml/common/broadcast/operator/AbstractBroadcastWrapperOperator.java
+++ 
b/flink-ml-core/src/main/java/org/apache/flink/ml/common/broadcast/operator/AbstractBroadcastWrapperOperator.java
@@ -46,7 +46,7 @@ import 
org.apache.flink.runtime.state.StateInitializationContext;
 import org.apache.flink.runtime.state.StatePartitionStreamProvider;
 import org.apache.flink.runtime.state.StateSnapshotContext;
 import org.apache.flink.runtime.util.NonClosingInputStreamDecorator;
-import org.apache.flink.runtime.util.NonClosingOutpusStreamDecorator;
+import org.apache.flink.runtime.util.NonClosingOutputStreamDecorator;
 import org.apache.flink.streaming.api.graph.StreamConfig;
 import org.apache.flink.streaming.api.operators.AbstractUdfStreamOperator;
 import org.apache.flink.streaming.api.operators.InternalTimeServiceManager;
@@ -137,7 +137,7 @@ public abstract class AbstractBroadcastWrapperOperator<T, S 
extends StreamOperat
      * path of the file used to stored the cached records. It could be local 
file system or remote
      * file system.
      */
-    private Path basePath;
+    private final Path basePath;
 
     /** DataCacheWriter for each input. */
     @SuppressWarnings("rawtypes")
@@ -561,7 +561,7 @@ public abstract class AbstractBroadcastWrapperOperator<T, S 
extends StreamOperat
                 stateSnapshotContext.getRawOperatorStateOutput();
         checkpointOutputStream.startNewPartition();
         try (DataOutputStream dos =
-                new DataOutputStream(new 
NonClosingOutpusStreamDecorator(checkpointOutputStream))) {
+                new DataOutputStream(new 
NonClosingOutputStreamDecorator(checkpointOutputStream))) {
             dos.writeInt(numInputs);
         }
         for (int i = 0; i < numInputs; i++) {
diff --git a/flink-ml-dist/pom.xml b/flink-ml-dist/pom.xml
index 8cabfa1..2cc828b 100644
--- a/flink-ml-dist/pom.xml
+++ b/flink-ml-dist/pom.xml
@@ -26,7 +26,7 @@ under the License.
         <version>2.1-SNAPSHOT</version>
     </parent>
 
-    <artifactId>flink-ml-dist_${scala.binary.version}</artifactId>
+    <artifactId>flink-ml-dist</artifactId>
     <name>Flink ML : Dist</name>
     <packaging>jar</packaging>
 
@@ -36,7 +36,7 @@ under the License.
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            <artifactId>flink-ml-uber_${scala.binary.version}</artifactId>
+            <artifactId>flink-ml-uber</artifactId>
             <version>${project.version}</version>
         </dependency>
 
@@ -45,11 +45,11 @@ under the License.
         <dependency>
             <groupId>org.apache.flink</groupId>
             <artifactId>statefun-flink-core</artifactId>
-            <version>3.1.0</version>
+            <version>${statefun.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>org.apache.flink</groupId>
-                    <artifactId>flink-streaming-java_2.12</artifactId>
+                    <artifactId>flink-streaming-java</artifactId>
                 </exclusion>
             </exclusions>
             <scope>compile</scope>
diff --git a/flink-ml-dist/src/main/assemblies/bin.xml 
b/flink-ml-dist/src/main/assemblies/bin.xml
index de9bc46..3ca8d41 100644
--- a/flink-ml-dist/src/main/assemblies/bin.xml
+++ b/flink-ml-dist/src/main/assemblies/bin.xml
@@ -35,7 +35,7 @@ under the License.
 
             <includes>
                 <include>org.apache.flink:statefun-flink-core</include>
-                
<include>org.apache.flink:flink-ml-uber_${scala.binary.version}</include>
+                <include>org.apache.flink:flink-ml-uber</include>
             </includes>
         </dependencySet>
     </dependencySets>
diff --git a/flink-ml-iteration/pom.xml b/flink-ml-iteration/pom.xml
index 8ab408f..4e01461 100644
--- a/flink-ml-iteration/pom.xml
+++ b/flink-ml-iteration/pom.xml
@@ -21,6 +21,9 @@ under the License.
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
     <modelVersion>4.0.0</modelVersion>
+    <properties>
+        <statefun-flink-core.version>3.2.0</statefun-flink-core.version>
+    </properties>
 
     <parent>
         <groupId>org.apache.flink</groupId>
@@ -28,7 +31,7 @@ under the License.
         <version>2.1-SNAPSHOT</version>
     </parent>
 
-    <artifactId>flink-ml-iteration_${scala.binary.version}</artifactId>
+    <artifactId>flink-ml-iteration</artifactId>
     <name>Flink ML : Iteration</name>
 
     <dependencies>
@@ -56,7 +59,7 @@ under the License.
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            
<artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
+            <artifactId>flink-streaming-java</artifactId>
             <version>${flink.version}</version>
             <scope>provided</scope>
         </dependency>
@@ -64,7 +67,7 @@ under the License.
         <!-- We have special treatment with the rocksdb state. -->
         <dependency>
             <groupId>org.apache.flink</groupId>
-            
<artifactId>flink-statebackend-rocksdb_${scala.binary.version}</artifactId>
+            <artifactId>flink-statebackend-rocksdb</artifactId>
             <version>${flink.version}</version>
             <scope>provided</scope>
         </dependency>
@@ -73,25 +76,29 @@ under the License.
         <dependency>
             <groupId>org.apache.flink</groupId>
             <artifactId>statefun-flink-core</artifactId>
-            <version>3.1.0</version>
+            <version>${statefun.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>org.apache.flink</groupId>
                     <artifactId>flink-streaming-java_2.12</artifactId>
                 </exclusion>
+                <exclusion>
+                    <groupId>org.apache.flink</groupId>
+                    <artifactId>flink-metrics-dropwizard</artifactId>
+                </exclusion>
             </exclusions>
         </dependency>
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            <artifactId>flink-clients_${scala.binary.version}</artifactId>
+            <artifactId>flink-clients</artifactId>
             <version>${flink.version}</version>
             <scope>test</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            
<artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
+            <artifactId>flink-streaming-java</artifactId>
             <version>${flink.version}</version>
             <scope>test</scope>
             <type>test-jar</type>
@@ -110,13 +117,19 @@ under the License.
             <artifactId>flink-test-utils-junit</artifactId>
             <version>${flink.version}</version>
             <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                    <artifactId>jackson-annotations</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <!-- We depends on StreamTaskMailboxTestHarnessBuilder and it requires 
this dependency -->
         <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
-            <version>2.21.0</version>
+            <version>2.28.2</version>
             <type>jar</type>
             <scope>test</scope>
         </dependency>
@@ -132,35 +145,12 @@ under the License.
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-hdfs</artifactId>
             <scope>test</scope>
-            <version>${hadoop.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
 
         <dependency>
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-common</artifactId>
             <scope>test</scope>
-            <version>${hadoop.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                </exclusion>
-                <exclusion>
-                    <!-- This dependency is no longer shipped with the JDK 
since Java 9.-->
-                    <groupId>jdk.tools</groupId>
-                    <artifactId>jdk.tools</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
 
         <dependency>
@@ -168,13 +158,6 @@ under the License.
             <artifactId>hadoop-hdfs</artifactId>
             <scope>test</scope>
             <type>test-jar</type>
-            <version>${hadoop.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
 
         <dependency>
@@ -182,22 +165,6 @@ under the License.
             <artifactId>hadoop-common</artifactId>
             <scope>test</scope>
             <type>test-jar</type>
-            <version>${hadoop.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                </exclusion>
-                <exclusion>
-                    <!-- This dependency is no longer shipped with the JDK 
since Java 9.-->
-                    <groupId>jdk.tools</groupId>
-                    <artifactId>jdk.tools</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
     </dependencies>
 </project>
diff --git 
a/flink-ml-iteration/src/main/java/org/apache/flink/iteration/datacache/nonkeyed/DataCacheSnapshot.java
 
b/flink-ml-iteration/src/main/java/org/apache/flink/iteration/datacache/nonkeyed/DataCacheSnapshot.java
index baaa36c..a00a440 100644
--- 
a/flink-ml-iteration/src/main/java/org/apache/flink/iteration/datacache/nonkeyed/DataCacheSnapshot.java
+++ 
b/flink-ml-iteration/src/main/java/org/apache/flink/iteration/datacache/nonkeyed/DataCacheSnapshot.java
@@ -26,7 +26,7 @@ import org.apache.flink.core.fs.FileSystem;
 import org.apache.flink.core.fs.Path;
 import org.apache.flink.core.memory.DataInputViewStreamWrapper;
 import org.apache.flink.runtime.util.NonClosingInputStreamDecorator;
-import org.apache.flink.runtime.util.NonClosingOutpusStreamDecorator;
+import org.apache.flink.runtime.util.NonClosingOutputStreamDecorator;
 import org.apache.flink.statefun.flink.core.feedback.FeedbackConsumer;
 import org.apache.flink.util.IOUtils;
 import org.apache.flink.util.function.SupplierWithException;
@@ -81,7 +81,7 @@ public class DataCacheSnapshot {
 
     public void writeTo(OutputStream checkpointOutputStream) throws 
IOException {
         try (DataOutputStream dos =
-                new DataOutputStream(new 
NonClosingOutpusStreamDecorator(checkpointOutputStream))) {
+                new DataOutputStream(new 
NonClosingOutputStreamDecorator(checkpointOutputStream))) {
             dos.writeInt(CURRENT_VERSION);
             dos.writeBoolean(readerPosition != null);
             if (readerPosition != null) {
diff --git 
a/flink-ml-iteration/src/main/java/org/apache/flink/iteration/operator/OperatorUtils.java
 
b/flink-ml-iteration/src/main/java/org/apache/flink/iteration/operator/OperatorUtils.java
index 25d200b..8e36a7b 100644
--- 
a/flink-ml-iteration/src/main/java/org/apache/flink/iteration/operator/OperatorUtils.java
+++ 
b/flink-ml-iteration/src/main/java/org/apache/flink/iteration/operator/OperatorUtils.java
@@ -37,6 +37,7 @@ import org.apache.flink.util.function.SupplierWithException;
 import org.apache.flink.util.function.ThrowingConsumer;
 
 import java.io.IOException;
+import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.Random;
 import java.util.UUID;
@@ -110,9 +111,9 @@ public class OperatorUtils {
         String pathStr = configuration.get(IterationOptions.DATA_CACHE_PATH);
         if (pathStr == null) {
             Random random = new Random();
-            pathStr = "file://" + 
localSpillPaths[random.nextInt(localSpillPaths.length)];
+            final String localSpillPath = 
localSpillPaths[random.nextInt(localSpillPaths.length)];
+            pathStr = Paths.get(localSpillPath).toUri().toString();
         }
-
         return new Path(pathStr);
     }
 
diff --git 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/HeadOperatorTest.java
 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/HeadOperatorTest.java
index c1fe602..1777893 100644
--- 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/HeadOperatorTest.java
+++ 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/HeadOperatorTest.java
@@ -33,6 +33,7 @@ import org.apache.flink.runtime.checkpoint.CheckpointType;
 import org.apache.flink.runtime.checkpoint.TaskStateSnapshot;
 import org.apache.flink.runtime.io.network.api.CheckpointBarrier;
 import org.apache.flink.runtime.io.network.api.EndOfData;
+import org.apache.flink.runtime.io.network.api.StopMode;
 import org.apache.flink.runtime.jobgraph.OperatorID;
 import org.apache.flink.runtime.operators.coordination.OperatorEvent;
 import org.apache.flink.runtime.operators.coordination.OperatorEventGateway;
@@ -187,7 +188,7 @@ public class HeadOperatorTest extends TestLogger {
                                     });
 
                     // Mark the input as finished.
-                    harness.processEvent(EndOfData.INSTANCE);
+                    harness.processEvent(new EndOfData(StopMode.DRAIN));
 
                     // There should be no exception
                     taskExecuteResult.get();
@@ -703,7 +704,7 @@ public class HeadOperatorTest extends TestLogger {
                             iterationId,
                             
IterationRecord.newEpochWatermark(Integer.MAX_VALUE + 1, "tail"),
                             null);
-                    harness.processEvent(EndOfData.INSTANCE);
+                    harness.processEvent(new EndOfData(StopMode.DRAIN));
                     harness.finishProcessing();
 
                     return null;
diff --git 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/ReplayOperatorTest.java
 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/ReplayOperatorTest.java
index 636633f..49bd045 100644
--- 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/ReplayOperatorTest.java
+++ 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/ReplayOperatorTest.java
@@ -278,7 +278,7 @@ public class ReplayOperatorTest extends TestLogger {
                     .getConfiguration()
                     .set(
                             IterationOptions.DATA_CACHE_PATH,
-                            "file://" + 
tempFolder.newFolder().getAbsolutePath());
+                            
tempFolder.newFolder().toPath().toAbsolutePath().toUri().toString());
             harness.getStreamTask().restore();
             return runnable.apply(harness);
         }
diff --git 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/allround/MultipleInputAllRoundWrapperOperatorTest.java
 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/allround/MultipleInputAllRoundWrapperOperatorTest.java
index 1eb5734..e07b5ae 100644
--- 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/allround/MultipleInputAllRoundWrapperOperatorTest.java
+++ 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/allround/MultipleInputAllRoundWrapperOperatorTest.java
@@ -29,6 +29,7 @@ import 
org.apache.flink.runtime.checkpoint.CheckpointMetricsBuilder;
 import org.apache.flink.runtime.checkpoint.CheckpointOptions;
 import org.apache.flink.runtime.checkpoint.CheckpointType;
 import org.apache.flink.runtime.io.network.api.EndOfData;
+import org.apache.flink.runtime.io.network.api.StopMode;
 import org.apache.flink.runtime.jobgraph.OperatorID;
 import org.apache.flink.runtime.state.CheckpointStorageLocationReference;
 import org.apache.flink.runtime.state.StateInitializationContext;
@@ -134,9 +135,9 @@ public class MultipleInputAllRoundWrapperOperatorTest 
extends TestLogger {
             harness.getStreamTask().notifyCheckpointAbortAsync(6, 5);
             harness.processAll();
 
-            harness.processEvent(EndOfData.INSTANCE, 0);
-            harness.processEvent(EndOfData.INSTANCE, 1);
-            harness.processEvent(EndOfData.INSTANCE, 2);
+            harness.processEvent(new EndOfData(StopMode.DRAIN), 0);
+            harness.processEvent(new EndOfData(StopMode.DRAIN), 1);
+            harness.processEvent(new EndOfData(StopMode.DRAIN), 2);
             harness.endInput();
             harness.finishProcessing();
 
diff --git 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/allround/OneInputAllRoundWrapperOperatorTest.java
 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/allround/OneInputAllRoundWrapperOperatorTest.java
index fd75d65..7b9d402 100644
--- 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/allround/OneInputAllRoundWrapperOperatorTest.java
+++ 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/allround/OneInputAllRoundWrapperOperatorTest.java
@@ -31,6 +31,7 @@ import org.apache.flink.runtime.checkpoint.CheckpointOptions;
 import org.apache.flink.runtime.checkpoint.CheckpointType;
 import org.apache.flink.runtime.checkpoint.TaskStateSnapshot;
 import org.apache.flink.runtime.io.network.api.EndOfData;
+import org.apache.flink.runtime.io.network.api.StopMode;
 import org.apache.flink.runtime.jobgraph.OperatorID;
 import org.apache.flink.runtime.state.CheckpointStorageLocationReference;
 import org.apache.flink.runtime.state.StateInitializationContext;
@@ -121,7 +122,7 @@ public class OneInputAllRoundWrapperOperatorTest extends 
TestLogger {
             harness.getStreamTask().notifyCheckpointAbortAsync(6, 5);
             harness.processAll();
 
-            harness.processEvent(EndOfData.INSTANCE, 0);
+            harness.processEvent(new EndOfData(StopMode.DRAIN), 0);
             harness.endInput();
             harness.finishProcessing();
 
diff --git 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/allround/TwoInputAllRoundWrapperOperatorTest.java
 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/allround/TwoInputAllRoundWrapperOperatorTest.java
index 5930e8b..b8aed71 100644
--- 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/allround/TwoInputAllRoundWrapperOperatorTest.java
+++ 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/allround/TwoInputAllRoundWrapperOperatorTest.java
@@ -29,6 +29,7 @@ import 
org.apache.flink.runtime.checkpoint.CheckpointMetricsBuilder;
 import org.apache.flink.runtime.checkpoint.CheckpointOptions;
 import org.apache.flink.runtime.checkpoint.CheckpointType;
 import org.apache.flink.runtime.io.network.api.EndOfData;
+import org.apache.flink.runtime.io.network.api.StopMode;
 import org.apache.flink.runtime.jobgraph.OperatorID;
 import org.apache.flink.runtime.state.CheckpointStorageLocationReference;
 import org.apache.flink.runtime.state.StateInitializationContext;
@@ -124,8 +125,8 @@ public class TwoInputAllRoundWrapperOperatorTest extends 
TestLogger {
             harness.getStreamTask().notifyCheckpointAbortAsync(6, 5);
             harness.processAll();
 
-            harness.processEvent(EndOfData.INSTANCE, 0);
-            harness.processEvent(EndOfData.INSTANCE, 1);
+            harness.processEvent(new EndOfData(StopMode.DRAIN), 0);
+            harness.processEvent(new EndOfData(StopMode.DRAIN), 1);
             harness.endInput();
             harness.finishProcessing();
 
diff --git 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/perround/MultipleInputPerRoundWrapperOperatorTest.java
 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/perround/MultipleInputPerRoundWrapperOperatorTest.java
index 59685a9..c58ded8 100644
--- 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/perround/MultipleInputPerRoundWrapperOperatorTest.java
+++ 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/perround/MultipleInputPerRoundWrapperOperatorTest.java
@@ -31,6 +31,7 @@ import 
org.apache.flink.runtime.checkpoint.CheckpointMetricsBuilder;
 import org.apache.flink.runtime.checkpoint.CheckpointOptions;
 import org.apache.flink.runtime.checkpoint.CheckpointType;
 import org.apache.flink.runtime.io.network.api.EndOfData;
+import org.apache.flink.runtime.io.network.api.StopMode;
 import org.apache.flink.runtime.jobgraph.OperatorID;
 import org.apache.flink.runtime.state.CheckpointStorageLocationReference;
 import org.apache.flink.runtime.state.StateInitializationContext;
@@ -141,9 +142,9 @@ public class MultipleInputPerRoundWrapperOperatorTest 
extends TestLogger {
                                             
OperatorUtils.getUniqueSenderId(operatorId, 0)))),
                     new ArrayList<>(harness.getOutput()));
 
-            harness.processEvent(EndOfData.INSTANCE, 0);
-            harness.processEvent(EndOfData.INSTANCE, 1);
-            harness.processEvent(EndOfData.INSTANCE, 2);
+            harness.processEvent(new EndOfData(StopMode.DRAIN), 0);
+            harness.processEvent(new EndOfData(StopMode.DRAIN), 1);
+            harness.processEvent(new EndOfData(StopMode.DRAIN), 2);
             harness.endInput();
             harness.finishProcessing();
 
diff --git 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/perround/OneInputPerRoundWrapperOperatorTest.java
 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/perround/OneInputPerRoundWrapperOperatorTest.java
index 43460a7..384ef91 100644
--- 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/perround/OneInputPerRoundWrapperOperatorTest.java
+++ 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/perround/OneInputPerRoundWrapperOperatorTest.java
@@ -35,6 +35,7 @@ import org.apache.flink.runtime.checkpoint.CheckpointOptions;
 import org.apache.flink.runtime.checkpoint.CheckpointType;
 import org.apache.flink.runtime.checkpoint.TaskStateSnapshot;
 import org.apache.flink.runtime.io.network.api.EndOfData;
+import org.apache.flink.runtime.io.network.api.StopMode;
 import org.apache.flink.runtime.jobgraph.OperatorID;
 import org.apache.flink.runtime.state.CheckpointStorageLocationReference;
 import org.apache.flink.runtime.state.OperatorStateCheckpointOutputStream;
@@ -142,7 +143,7 @@ public class OneInputPerRoundWrapperOperatorTest extends 
TestLogger {
                                             
OperatorUtils.getUniqueSenderId(operatorId, 0)))),
                     new ArrayList<>(harness.getOutput()));
 
-            harness.processEvent(EndOfData.INSTANCE, 0);
+            harness.processEvent(new EndOfData(StopMode.DRAIN), 0);
             harness.endInput();
             harness.finishProcessing();
 
diff --git 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/perround/TwoInputPerRoundWrapperOperatorTest.java
 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/perround/TwoInputPerRoundWrapperOperatorTest.java
index 6e08e57..26a2797 100644
--- 
a/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/perround/TwoInputPerRoundWrapperOperatorTest.java
+++ 
b/flink-ml-iteration/src/test/java/org/apache/flink/iteration/operator/perround/TwoInputPerRoundWrapperOperatorTest.java
@@ -30,6 +30,7 @@ import 
org.apache.flink.runtime.checkpoint.CheckpointMetricsBuilder;
 import org.apache.flink.runtime.checkpoint.CheckpointOptions;
 import org.apache.flink.runtime.checkpoint.CheckpointType;
 import org.apache.flink.runtime.io.network.api.EndOfData;
+import org.apache.flink.runtime.io.network.api.StopMode;
 import org.apache.flink.runtime.jobgraph.OperatorID;
 import org.apache.flink.runtime.state.CheckpointStorageLocationReference;
 import org.apache.flink.runtime.state.StateInitializationContext;
@@ -132,8 +133,8 @@ public class TwoInputPerRoundWrapperOperatorTest extends 
TestLogger {
                                             
OperatorUtils.getUniqueSenderId(operatorId, 0)))),
                     new ArrayList<>(harness.getOutput()));
 
-            harness.processEvent(EndOfData.INSTANCE, 0);
-            harness.processEvent(EndOfData.INSTANCE, 1);
+            harness.processEvent(new EndOfData(StopMode.DRAIN), 0);
+            harness.processEvent(new EndOfData(StopMode.DRAIN), 1);
             harness.endInput();
             harness.finishProcessing();
 
diff --git a/flink-ml-lib/pom.xml b/flink-ml-lib/pom.xml
index 5ab227d..6633e2f 100644
--- a/flink-ml-lib/pom.xml
+++ b/flink-ml-lib/pom.xml
@@ -26,20 +26,20 @@ under the License.
     <version>2.1-SNAPSHOT</version>
   </parent>
 
-  <artifactId>flink-ml-lib_${scala.binary.version}</artifactId>
+  <artifactId>flink-ml-lib</artifactId>
   <name>Flink ML : Lib</name>
 
   <dependencies>
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-ml-core_${scala.binary.version}</artifactId>
+      <artifactId>flink-ml-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-ml-iteration_${scala.binary.version}</artifactId>
+      <artifactId>flink-ml-iteration</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
@@ -53,35 +53,33 @@ under the License.
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      
<artifactId>flink-table-api-java-bridge_${scala.binary.version}</artifactId>
+      <artifactId>flink-table-api-java-bridge</artifactId>
       <version>${flink.version}</version>
       <scope>provided</scope>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-table-planner_${scala.binary.version}</artifactId>
-      <version>${flink.version}</version>
+      <artifactId>flink-table-planner-loader</artifactId>
       <scope>test</scope>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-table-runtime_${scala.binary.version}</artifactId>
-      <version>${flink.version}</version>
+      <artifactId>flink-table-runtime</artifactId>
       <scope>provided</scope>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-test-utils_${scala.binary.version}</artifactId>
+      <artifactId>flink-test-utils</artifactId>
       <version>${flink.version}</version>
       <scope>test</scope>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
+      <artifactId>flink-streaming-java</artifactId>
       <version>${flink.version}</version>
       <scope>test</scope>
       <type>test-jar</type>
diff --git 
a/flink-ml-lib/src/main/java/org/apache/flink/ml/evaluation/binaryclassification/BinaryClassificationEvaluator.java
 
b/flink-ml-lib/src/main/java/org/apache/flink/ml/evaluation/binaryclassification/BinaryClassificationEvaluator.java
index 86cf75a..49cf4ae 100644
--- 
a/flink-ml-lib/src/main/java/org/apache/flink/ml/evaluation/binaryclassification/BinaryClassificationEvaluator.java
+++ 
b/flink-ml-lib/src/main/java/org/apache/flink/ml/evaluation/binaryclassification/BinaryClassificationEvaluator.java
@@ -27,10 +27,10 @@ import 
org.apache.flink.api.common.functions.RichMapPartitionFunction;
 import org.apache.flink.api.common.state.ListState;
 import org.apache.flink.api.common.state.ListStateDescriptor;
 import org.apache.flink.api.common.typeinfo.TypeInformation;
+import org.apache.flink.api.common.typeinfo.Types;
 import org.apache.flink.api.java.tuple.Tuple3;
 import org.apache.flink.api.java.tuple.Tuple4;
 import org.apache.flink.api.java.typeutils.RowTypeInfo;
-import org.apache.flink.api.scala.typeutils.Types;
 import org.apache.flink.iteration.operator.OperatorStateUtils;
 import org.apache.flink.ml.api.AlgoOperator;
 import org.apache.flink.ml.common.broadcast.BroadcastUtils;
@@ -200,7 +200,7 @@ public class BinaryClassificationEvaluator
 
         final String[] metricsNames = getMetricsNames();
         TypeInformation<?>[] metricTypes = new 
TypeInformation[metricsNames.length];
-        Arrays.fill(metricTypes, Types.DOUBLE());
+        Arrays.fill(metricTypes, Types.DOUBLE);
         RowTypeInfo outputTypeInfo = new RowTypeInfo(metricTypes, 
metricsNames);
 
         DataStream<Row> evalResult =
diff --git 
a/flink-ml-lib/src/test/java/org/apache/flink/ml/clustering/OnlineKMeansTest.java
 
b/flink-ml-lib/src/test/java/org/apache/flink/ml/clustering/OnlineKMeansTest.java
index 047e8ea..cd4af68 100644
--- 
a/flink-ml-lib/src/test/java/org/apache/flink/ml/clustering/OnlineKMeansTest.java
+++ 
b/flink-ml-lib/src/test/java/org/apache/flink/ml/clustering/OnlineKMeansTest.java
@@ -18,6 +18,8 @@
 
 package org.apache.flink.ml.clustering;
 
+import org.apache.flink.api.common.JobID;
+import org.apache.flink.api.common.JobSubmissionResult;
 import org.apache.flink.api.common.restartstrategy.RestartStrategies;
 import org.apache.flink.api.common.typeinfo.TypeInformation;
 import org.apache.flink.configuration.Configuration;
@@ -34,6 +36,7 @@ import org.apache.flink.ml.linalg.Vectors;
 import org.apache.flink.ml.linalg.typeinfo.DenseVectorTypeInfo;
 import org.apache.flink.ml.util.InMemorySinkFunction;
 import org.apache.flink.ml.util.InMemorySourceFunction;
+import org.apache.flink.runtime.jobgraph.JobGraph;
 import org.apache.flink.runtime.minicluster.MiniCluster;
 import org.apache.flink.runtime.minicluster.MiniClusterConfiguration;
 import org.apache.flink.runtime.testutils.InMemoryReporter;
@@ -58,6 +61,9 @@ import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
 import static 
org.apache.flink.ml.clustering.KMeansTest.groupFeaturesByPrediction;
 import static org.junit.Assert.assertEquals;
@@ -195,24 +201,24 @@ public class OnlineKMeansTest extends TestLogger {
     }
 
     /** Blocks the thread until Model has set up init model data. */
-    private void waitInitModelDataSetup() throws InterruptedException {
-        while 
(reporter.findMetrics(OnlineKMeansModel.MODEL_DATA_VERSION_GAUGE_KEY).size()
+    private void waitInitModelDataSetup(JobID jobID) throws 
InterruptedException {
+        while (reporter.findMetrics(jobID, 
OnlineKMeansModel.MODEL_DATA_VERSION_GAUGE_KEY).size()
                 < defaultParallelism) {
             Thread.sleep(100);
         }
-        waitModelDataUpdate();
+        waitModelDataUpdate(jobID);
     }
 
     /** Blocks the thread until the Model has received the next 
model-data-update event. */
     @SuppressWarnings("unchecked")
-    private void waitModelDataUpdate() throws InterruptedException {
+    private void waitModelDataUpdate(JobID jobID) throws InterruptedException {
         do {
             int tmpModelDataVersion =
-                    
reporter.findMetrics(OnlineKMeansModel.MODEL_DATA_VERSION_GAUGE_KEY).values()
-                            .stream()
+                    reporter.findMetrics(jobID, 
OnlineKMeansModel.MODEL_DATA_VERSION_GAUGE_KEY)
+                            .values().stream()
                             .map(x -> Integer.parseInt(((Gauge<String>) 
x).getValue()))
                             .min(Integer::compareTo)
-                            .get();
+                            .orElse(0);
             if (tmpModelDataVersion == currentModelDataVersion) {
                 Thread.sleep(100);
             } else {
@@ -240,6 +246,14 @@ public class OnlineKMeansTest extends TestLogger {
         Assert.assertTrue(CollectionUtils.isEqualCollection(expectedGroups, 
actualGroups));
     }
 
+    private JobID submitJob(JobGraph jobGraph)
+            throws ExecutionException, InterruptedException, TimeoutException {
+        return miniCluster
+                .submitJob(jobGraph)
+                .thenApply(JobSubmissionResult::getJobID)
+                .get(1, TimeUnit.SECONDS);
+    }
+
     @Test
     public void testParam() {
         OnlineKMeans onlineKMeans = new OnlineKMeans();
@@ -279,16 +293,16 @@ public class OnlineKMeansTest extends TestLogger {
         OnlineKMeansModel onlineModel = onlineKMeans.fit(onlineTrainTable);
         transformAndOutputData(onlineModel);
 
-        miniCluster.submitJob(env.getStreamGraph().getJobGraph());
-        waitInitModelDataSetup();
+        final JobID jobID = submitJob(env.getStreamGraph().getJobGraph());
+        waitInitModelDataSetup(jobID);
 
         trainSource.addAll(trainData1);
-        waitModelDataUpdate();
+        waitModelDataUpdate(jobID);
         predictAndAssert(
                 expectedGroups1, onlineKMeans.getFeaturesCol(), 
onlineKMeans.getPredictionCol());
 
         trainSource.addAll(trainData2);
-        waitModelDataUpdate();
+        waitModelDataUpdate(jobID);
         predictAndAssert(
                 expectedGroups2, onlineKMeans.getFeaturesCol(), 
onlineKMeans.getPredictionCol());
     }
@@ -308,13 +322,13 @@ public class OnlineKMeansTest extends TestLogger {
         OnlineKMeansModel onlineModel = onlineKMeans.fit(onlineTrainTable);
         transformAndOutputData(onlineModel);
 
-        miniCluster.submitJob(env.getStreamGraph().getJobGraph());
-        waitInitModelDataSetup();
+        final JobID jobID = submitJob(env.getStreamGraph().getJobGraph());
+        waitInitModelDataSetup(jobID);
         predictAndAssert(
                 expectedGroups1, onlineKMeans.getFeaturesCol(), 
onlineKMeans.getPredictionCol());
 
         trainSource.addAll(trainData2);
-        waitModelDataUpdate();
+        waitModelDataUpdate(jobID);
         predictAndAssert(
                 expectedGroups2, onlineKMeans.getFeaturesCol(), 
onlineKMeans.getPredictionCol());
     }
@@ -334,7 +348,7 @@ public class OnlineKMeansTest extends TestLogger {
         OnlineKMeansModel onlineModel = onlineKMeans.fit(onlineTrainTable);
         transformAndOutputData(onlineModel);
 
-        miniCluster.submitJob(env.getStreamGraph().getJobGraph());
+        submitJob(env.getStreamGraph().getJobGraph());
         modelDataSink.poll();
 
         trainSource.addAll(trainData2);
@@ -395,7 +409,8 @@ public class OnlineKMeansTest extends TestLogger {
 
         String savePath = tempFolder.newFolder().getAbsolutePath();
         onlineKMeans.save(savePath);
-        miniCluster.executeJobBlocking(env.getStreamGraph().getJobGraph());
+        final JobGraph jobGraph = env.getStreamGraph().getJobGraph();
+        miniCluster.executeJobBlocking(jobGraph);
         OnlineKMeans loadedOnlineKMeans = OnlineKMeans.load(tEnv, savePath);
 
         OnlineKMeansModel onlineModel = 
loadedOnlineKMeans.fit(onlineTrainTable);
@@ -407,13 +422,13 @@ public class OnlineKMeansTest extends TestLogger {
 
         transformAndOutputData(loadedOnlineModel);
 
-        miniCluster.submitJob(env.getStreamGraph().getJobGraph());
-        waitInitModelDataSetup();
+        final JobID jobID = submitJob(env.getStreamGraph().getJobGraph());
+        waitInitModelDataSetup(jobID);
         predictAndAssert(
                 expectedGroups1, onlineKMeans.getFeaturesCol(), 
onlineKMeans.getPredictionCol());
 
         trainSource.addAll(trainData2);
-        waitModelDataUpdate();
+        waitModelDataUpdate(jobID);
         predictAndAssert(
                 expectedGroups2, onlineKMeans.getFeaturesCol(), 
onlineKMeans.getPredictionCol());
     }
@@ -430,7 +445,7 @@ public class OnlineKMeansTest extends TestLogger {
         OnlineKMeansModel onlineModel = onlineKMeans.fit(onlineTrainTable);
         transformAndOutputData(onlineModel);
 
-        miniCluster.submitJob(env.getStreamGraph().getJobGraph());
+        submitJob(env.getStreamGraph().getJobGraph());
         modelDataSink.poll();
 
         trainSource.addAll(trainData1);
@@ -479,15 +494,15 @@ public class OnlineKMeansTest extends TestLogger {
                         .setPredictionCol("prediction");
         transformAndOutputData(onlineModel);
 
-        miniCluster.submitJob(env.getStreamGraph().getJobGraph());
+        final JobID jobID = submitJob(env.getStreamGraph().getJobGraph());
 
         modelDataSource.addAll(modelData1);
-        waitInitModelDataSetup();
+        waitInitModelDataSetup(jobID);
         predictAndAssert(
                 expectedGroups1, onlineModel.getFeaturesCol(), 
onlineModel.getPredictionCol());
 
         modelDataSource.addAll(modelData2);
-        waitModelDataUpdate();
+        waitModelDataUpdate(jobID);
         predictAndAssert(
                 expectedGroups2, onlineModel.getFeaturesCol(), 
onlineModel.getPredictionCol());
     }
diff --git a/flink-ml-python/dev/dev-requirements.txt 
b/flink-ml-python/dev/dev-requirements.txt
index 30024d9..1f30ffb 100755
--- a/flink-ml-python/dev/dev-requirements.txt
+++ b/flink-ml-python/dev/dev-requirements.txt
@@ -14,7 +14,7 @@
 # limitations under the License.
 setuptools>=18.0
 wheel
-apache-flink==1.14.4
+apache-flink==1.15.0
 pandas>=1.0,<1.2.0
 jsonpickle==2.0.0
 cloudpickle==1.2.2
diff --git a/flink-ml-python/pyflink/ml/lib/tests/test_ml_lib_completeness.py 
b/flink-ml-python/pyflink/ml/lib/tests/test_ml_lib_completeness.py
index 045a274..ff17298 100644
--- a/flink-ml-python/pyflink/ml/lib/tests/test_ml_lib_completeness.py
+++ b/flink-ml-python/pyflink/ml/lib/tests/test_ml_lib_completeness.py
@@ -49,7 +49,7 @@ class MLLibTest(PyFlinkMLTestCase):
             this_directory, "../../../../../flink-ml-lib"))
 
         ml_lib_jar = glob.glob(os.path.join(
-            FLINK_ML_LIB_SOURCE_PATH, "target", 
"flink-ml-lib_*-SNAPSHOT.jar"))[0]
+            FLINK_ML_LIB_SOURCE_PATH, "target", 
"flink-ml-lib-*SNAPSHOT.jar"))[0]
 
         StageAnalyzer = 
get_gateway().jvm.org.apache.flink.ml.util.StageAnalyzer
         return sorted([stage for stage in 
StageAnalyzer.analyzeLibJars(ml_lib_jar)
diff --git a/flink-ml-python/pyflink/ml/tests/test_utils.py 
b/flink-ml-python/pyflink/ml/tests/test_utils.py
index 2841b03..7cea8e7 100644
--- a/flink-ml-python/pyflink/ml/tests/test_utils.py
+++ b/flink-ml-python/pyflink/ml/tests/test_utils.py
@@ -67,6 +67,6 @@ class PyFlinkMLTestCase(unittest.TestCase):
             this_directory, "../../../../flink-ml-lib"))
 
         ml_test_jar = glob.glob(os.path.join(
-            FLINK_ML_LIB_SOURCE_PATH, "target", "flink-ml-lib_*-tests.jar"))[0]
+            FLINK_ML_LIB_SOURCE_PATH, "target", "flink-ml-lib-*-tests.jar"))[0]
 
         self.env.add_classpaths("file://{0}".format(ml_test_jar))
diff --git a/flink-ml-python/setup.py b/flink-ml-python/setup.py
index 14f7314..55b617e 100644
--- a/flink-ml-python/setup.py
+++ b/flink-ml-python/setup.py
@@ -103,7 +103,7 @@ try:
         author='Apache Software Foundation',
         author_email='[email protected]',
         python_requires='>=3.6',
-        install_requires=['apache-flink==1.14.4', 'pandas>=1.0,<1.2.0', 
'jsonpickle==2.0.0',
+        install_requires=['apache-flink==1.15.0', 'pandas>=1.0,<1.2.0', 
'jsonpickle==2.0.0',
                           'cloudpickle==1.2.2', 'numpy>=1.14.3,<1.20'],
         tests_require=['pytest==4.4.1'],
         description='Apache Flink ML Python API',
diff --git a/flink-ml-tests/pom.xml b/flink-ml-tests/pom.xml
index 692c705..2401e60 100644
--- a/flink-ml-tests/pom.xml
+++ b/flink-ml-tests/pom.xml
@@ -28,28 +28,28 @@ under the License.
         <version>2.1-SNAPSHOT</version>
     </parent>
 
-    <artifactId>flink-ml-tests_${scala.binary.version}</artifactId>
+    <artifactId>flink-ml-tests</artifactId>
     <name>Flink ML : Tests</name>
 
     <dependencies>
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            <artifactId>flink-ml-iteration_${scala.binary.version}</artifactId>
+            <artifactId>flink-ml-iteration</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            <artifactId>flink-ml-core_${scala.binary.version}</artifactId>
+            <artifactId>flink-ml-core</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.flink</groupId>
-            
<artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
+            <artifactId>flink-streaming-java</artifactId>
             <version>${flink.version}</version>
             <scope>test</scope>
         </dependency>
diff --git a/flink-ml-uber/pom.xml b/flink-ml-uber/pom.xml
index 95277b2..3680135 100644
--- a/flink-ml-uber/pom.xml
+++ b/flink-ml-uber/pom.xml
@@ -26,7 +26,7 @@ under the License.
     <version>2.1-SNAPSHOT</version>
   </parent>
 
-  <artifactId>flink-ml-uber_${scala.binary.version}</artifactId>
+  <artifactId>flink-ml-uber</artifactId>
   <name>Flink ML : Uber</name>
   <description>
     This module contains the basic modules for writing Flink ML programs.
@@ -37,25 +37,25 @@ under the License.
   <dependencies>
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-ml-core_${scala.binary.version}</artifactId>
+      <artifactId>flink-ml-core</artifactId>
       <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-ml-iteration_${scala.binary.version}</artifactId>
+      <artifactId>flink-ml-iteration</artifactId>
       <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-ml-lib_${scala.binary.version}</artifactId>
+      <artifactId>flink-ml-lib</artifactId>
       <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.flink</groupId>
-      <artifactId>flink-ml-benchmark_${scala.binary.version}</artifactId>
+      <artifactId>flink-ml-benchmark</artifactId>
       <version>${project.version}</version>
     </dependency>
   </dependencies>
@@ -75,10 +75,10 @@ under the License.
             <configuration>
               <artifactSet>
                 <includes combine.children="append">
-                  
<include>org.apache.flink:flink-ml-core_${scala.binary.version}</include>
-                  
<include>org.apache.flink:flink-ml-iteration_${scala.binary.version}</include>
-                  
<include>org.apache.flink:flink-ml-lib_${scala.binary.version}</include>
-                  
<include>org.apache.flink:flink-ml-benchmark_${scala.binary.version}</include>
+                  <include>org.apache.flink:flink-ml-core</include>
+                  <include>org.apache.flink:flink-ml-iteration</include>
+                  <include>org.apache.flink:flink-ml-lib</include>
+                  <include>org.apache.flink:flink-ml-benchmark</include>
                   <include>dev.ludovic.netlib:blas</include>
                 </includes>
               </artifactSet>
diff --git a/pom.xml b/pom.xml
index a6b7128..116b205 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,19 +62,20 @@ under the License.
   </modules>
 
   <properties>
-    <flink.shaded.version>12.0</flink.shaded.version>
-    <scala.binary.version>2.12</scala.binary.version>
-    <jackson.version>2.10.1</jackson.version>
+    <flink.shaded.version>15.0</flink.shaded.version>
+    <jackson.version>2.12.4</jackson.version>
+    <jackson-databind.version>2.12.4</jackson-databind.version>
     <target.java.version>1.8</target.java.version>
     <spotless.version>2.4.2</spotless.version>
-    <slf4j.version>1.7.15</slf4j.version>
-    <log4j.version>2.17.1</log4j.version>
-    <junit.version>4.13.1</junit.version>
+    <slf4j.version>1.7.36</slf4j.version>
+    <statefun.version>3.2.0</statefun.version>
+    <log4j.version>2.17.2</log4j.version>
+    <junit.version>4.13.2</junit.version>
     <flink.forkCount>1C</flink.forkCount>
     <flink.reuseForks>true</flink.reuseForks>
-    <flink.version>1.14.4</flink.version>
-    <zookeeper.version>3.4.14</zookeeper.version>
-    <hadoop.version>2.8.5</hadoop.version>
+    <flink.version>1.15.0</flink.version>
+    <zookeeper.version>3.6.3</zookeeper.version>
+    <hadoop.version>2.10.1</hadoop.version>
 
     <!-- Can be set to any value to reproduce a specific build. -->
     <test.randomization.seed/>
@@ -140,6 +141,11 @@ under the License.
         <artifactId>flink-shaded-zookeeper-3</artifactId>
         <version>${zookeeper.version}-${flink.shaded.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.apache.flink</groupId>
+        <artifactId>flink-connector-files</artifactId>
+        <version>${flink.version}</version>
+      </dependency>
 
       <dependency>
         <groupId>org.apache.zookeeper</groupId>
@@ -210,6 +216,186 @@ under the License.
         <version>${flink.version}</version>
         <scope>test</scope>
       </dependency>
+      <dependency>
+        <groupId>org.apache.flink</groupId>
+        <artifactId>flink-table-runtime</artifactId>
+        <version>${flink.version}</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.flink</groupId>
+        <artifactId>flink-table-planner-loader</artifactId>
+        <version>${flink.version}</version>
+        <scope>test</scope>
+      </dependency>
+      <!-- hdfs is required for the data cache test -->
+      <dependency>
+        <groupId>org.apache.hadoop</groupId>
+        <artifactId>hadoop-hdfs</artifactId>
+        <scope>test</scope>
+        <version>${hadoop.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.hadoop</groupId>
+        <artifactId>hadoop-common</artifactId>
+        <scope>test</scope>
+        <version>${hadoop.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+          </exclusion>
+          <exclusion>
+            <!-- This dependency is no longer shipped with the JDK since Java 
9.-->
+            <groupId>jdk.tools</groupId>
+            <artifactId>jdk.tools</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.hadoop</groupId>
+        <artifactId>hadoop-hdfs</artifactId>
+        <scope>test</scope>
+        <type>test-jar</type>
+        <version>${hadoop.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+
+      <dependency>
+        <groupId>org.apache.hadoop</groupId>
+        <artifactId>hadoop-common</artifactId>
+        <scope>test</scope>
+        <type>test-jar</type>
+        <version>${hadoop.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+          </exclusion>
+          <exclusion>
+            <!-- This dependency is no longer shipped with the JDK since Java 
9.-->
+            <groupId>jdk.tools</groupId>
+            <artifactId>jdk.tools</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.hadoop</groupId>
+        <artifactId>hadoop-minicluster</artifactId>
+        <scope>test</scope>
+        <version>${hadoop.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+          </exclusion>
+          <exclusion>
+            <!-- This dependency is no longer shipped with the JDK since Java 
9.-->
+            <groupId>jdk.tools</groupId>
+            <artifactId>jdk.tools</artifactId>
+          </exclusion>
+
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+
+      <dependency>
+        <groupId>com.fasterxml.jackson.core</groupId>
+        <artifactId>jackson-databind</artifactId>
+        <version>${jackson-databind.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>com.fasterxml.jackson.core</groupId>
+        <artifactId>jackson-core</artifactId>
+        <version>${jackson.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>com.fasterxml.jackson.core</groupId>
+        <artifactId>jackson-annotations</artifactId>
+        <version>${jackson.version}</version>
+      </dependency>
     </dependencies>
   </dependencyManagement>
 

Reply via email to