diff --git a/client/src/main/java/org/apache/nemo/client/StateTranslator.java b/client/src/main/java/org/apache/nemo/client/StateTranslator.java
index 1275336..16b8df1 100644
--- a/client/src/main/java/org/apache/nemo/client/StateTranslator.java
+++ b/client/src/main/java/org/apache/nemo/client/StateTranslator.java
@@ -31,5 +31,5 @@
    * @param planState to translate.
    * @return the translated state.
    */
-  Enum translateState(final PlanState.State planState);
+  Enum translateState(PlanState.State planState);
 }
diff --git a/client/src/main/java/org/apache/reef/runtime/yarn/ClassPathBuilder.java b/client/src/main/java/org/apache/reef/runtime/yarn/ClassPathBuilder.java
index 86682f7..ae1f20f 100644
--- a/client/src/main/java/org/apache/reef/runtime/yarn/ClassPathBuilder.java
+++ b/client/src/main/java/org/apache/reef/runtime/yarn/ClassPathBuilder.java
@@ -44,9 +44,9 @@
    * @return
    */
   private static boolean couldBeYarnConfigurationPath(final String path) {
-    return path.contains("conf") ||
-      path.contains("etc") ||
-      path.contains(HadoopEnvironment.HADOOP_CONF_DIR);
+    return path.contains("conf")
+      || path.contains("etc")
+      || path.contains(HadoopEnvironment.HADOOP_CONF_DIR);
   }
 
   /**
diff --git a/common/src/main/java/org/apache/nemo/common/KeyExtractor.java b/common/src/main/java/org/apache/nemo/common/KeyExtractor.java
index 50eb327..ced0aac 100644
--- a/common/src/main/java/org/apache/nemo/common/KeyExtractor.java
+++ b/common/src/main/java/org/apache/nemo/common/KeyExtractor.java
@@ -31,5 +31,5 @@
    * @param element Element to get the key from.
    * @return The extracted key of the element.
    */
-  Object extractKey(final Object element);
+  Object extractKey(Object element);
 }
diff --git a/common/src/main/java/org/apache/nemo/common/KeyRange.java b/common/src/main/java/org/apache/nemo/common/KeyRange.java
index 1a6b764..f09aa4c 100644
--- a/common/src/main/java/org/apache/nemo/common/KeyRange.java
+++ b/common/src/main/java/org/apache/nemo/common/KeyRange.java
@@ -46,7 +46,7 @@
    * @param key the value to check
    * @return {@code true} if this key range includes the specified value, {@code false} otherwise
    */
-  boolean includes(final K key);
+  boolean includes(K key);
 
   /**
    * {@inheritDoc}
@@ -61,7 +61,7 @@
    * This method should be overridden for KeyRange comparisons.
    */
   @Override
-  boolean equals(final Object o);
+  boolean equals(Object o);
 
   /**
    * {@inheritDoc}
diff --git a/common/src/main/java/org/apache/nemo/common/Util.java b/common/src/main/java/org/apache/nemo/common/Util.java
index 1156704..0778238 100644
--- a/common/src/main/java/org/apache/nemo/common/Util.java
+++ b/common/src/main/java/org/apache/nemo/common/Util.java
@@ -69,7 +69,7 @@
    * @return the path containing the LICENSE file.
    */
   static String recursivelyFindLicense(final Path path) {
-    try (final Stream stream = Files.find(path, 1, (p, attributes) -> p.endsWith("LICENSE"))) {
+    try (Stream stream = Files.find(path, 1, (p, attributes) -> p.endsWith("LICENSE"))) {
       if (stream.count() > 0) {
         return path.toAbsolutePath().toString();
       } else {
diff --git a/common/src/main/java/org/apache/nemo/common/dag/DAG.java b/common/src/main/java/org/apache/nemo/common/dag/DAG.java
index bbe6042..537d681 100644
--- a/common/src/main/java/org/apache/nemo/common/dag/DAG.java
+++ b/common/src/main/java/org/apache/nemo/common/dag/DAG.java
@@ -307,7 +307,7 @@
 
     final File file = new File(directory, name + ".json");
     file.getParentFile().mkdirs();
-    try (final PrintWriter printWriter = new PrintWriter(file)) {
+    try (PrintWriter printWriter = new PrintWriter(file)) {
       printWriter.println(toString());
       printWriter.close();
       LOG.debug(String.format("DAG JSON for %s is saved at %s"
diff --git a/common/src/main/java/org/apache/nemo/common/dag/DAGInterface.java b/common/src/main/java/org/apache/nemo/common/dag/DAGInterface.java
index 7040a9c..fe07192 100644
--- a/common/src/main/java/org/apache/nemo/common/dag/DAGInterface.java
+++ b/common/src/main/java/org/apache/nemo/common/dag/DAGInterface.java
@@ -42,7 +42,7 @@
    * @param id of the vertex to retrieve
    * @return the vertex
    */
-  V getVertexById(final String id);
+  V getVertexById(String id);
 
   /**
    * Retrieves the vertices of this DAG.
@@ -73,7 +73,7 @@
    * @return the list of incoming edges to the vertex.
    * Note that the result is never null, ensured by {@link DAGBuilder}.
    */
-  List<E> getIncomingEdgesOf(final V v);
+  List<E> getIncomingEdgesOf(V v);
 
   /**
    * Retrieves the incoming edges of the given vertex.
@@ -82,7 +82,7 @@
    * @return the list of incoming edges to the vertex.
    * Note that the result is never null, ensured by {@link DAGBuilder}.
    */
-  List<E> getIncomingEdgesOf(final String vertexId);
+  List<E> getIncomingEdgesOf(String vertexId);
 
   /**
    * Retrieves the outgoing edges of the given vertex.
@@ -91,7 +91,7 @@
    * @return the list of outgoing edges to the vertex.
    * Note that the result is never null, ensured by {@link DAGBuilder}.
    */
-  List<E> getOutgoingEdgesOf(final V v);
+  List<E> getOutgoingEdgesOf(V v);
 
   /**
    * Retrieves the outgoing edges of the given vertex.
@@ -100,7 +100,7 @@
    * @return the list of outgoing edges to the vertex.
    * Note that the result is never null, ensured by {@link DAGBuilder}.
    */
-  List<E> getOutgoingEdgesOf(final String vertexId);
+  List<E> getOutgoingEdgesOf(String vertexId);
 
   /**
    * Retrieves the parent vertices of the given vertex.
@@ -108,7 +108,7 @@
    * @param vertexId the ID of the subject vertex.
    * @return the list of parent vertices.
    */
-  List<V> getParents(final String vertexId);
+  List<V> getParents(String vertexId);
 
   /**
    * Retrieves the children vertices of the given vertex.
@@ -116,7 +116,7 @@
    * @param vertexId the ID of the subject vertex.
    * @return the list of children vertices.
    */
-  List<V> getChildren(final String vertexId);
+  List<V> getChildren(String vertexId);
 
   /**
    * Retrieves the edge between two vertices.
@@ -126,7 +126,7 @@
    * @return the edge if exists.
    * @throws IllegalEdgeOperationException otherwise.
    */
-  E getEdgeBetween(final String srcVertexId, final String dstVertexId) throws IllegalEdgeOperationException;
+  E getEdgeBetween(String srcVertexId, String dstVertexId) throws IllegalEdgeOperationException;
 
   /**
    * Gets the DAG's vertices in topologically sorted order.
@@ -142,7 +142,7 @@
    * @param vertexId to find the ancestors for.
    * @return the list of ancestors.
    */
-  List<V> getAncestors(final String vertexId);
+  List<V> getAncestors(String vertexId);
 
   /**
    * Retrieves the descendants of a vertex.
@@ -150,7 +150,7 @@
    * @param vertexId to find the descendants for.
    * @return the list of descendants.
    */
-  List<V> getDescendants(final String vertexId);
+  List<V> getDescendants(String vertexId);
 
   /**
    * Filters the vertices according to the given condition.
@@ -158,7 +158,7 @@
    * @param condition that must be satisfied to be included in the filtered list.
    * @return the list of vertices that meet the condition.
    */
-  List<V> filterVertices(final Predicate<V> condition);
+  List<V> filterVertices(Predicate<V> condition);
 
   /**
    * Applies the function to each node in the DAG in a topological order.
@@ -166,7 +166,7 @@
    *
    * @param function to apply.
    */
-  void topologicalDo(final Consumer<V> function);
+  void topologicalDo(Consumer<V> function);
 
   /**
    * Indicates the traversal order of this DAG.
@@ -182,7 +182,7 @@
    * @param function       to apply.
    * @param traversalOrder which the DFS should be conducted.
    */
-  void dfsTraverse(final Consumer<V> function, final TraversalOrder traversalOrder);
+  void dfsTraverse(Consumer<V> function, TraversalOrder traversalOrder);
 
   /**
    * A recursive helper function for {@link #dfsTraverse(Consumer, TraversalOrder)}.
@@ -192,10 +192,10 @@
    * @param traversalOrder which the DFS should be conducted.
    * @param visited        the set of nodes visited.
    */
-  void dfsDo(final V vertex,
-             final Consumer<V> vertexConsumer,
-             final TraversalOrder traversalOrder,
-             final Set<V> visited);
+  void dfsDo(V vertex,
+             Consumer<V> vertexConsumer,
+             TraversalOrder traversalOrder,
+             Set<V> visited);
 
   /**
    * Function checks whether there is a path between two vertices.
@@ -204,7 +204,7 @@
    * @param v2 Second vertex to check.
    * @return Whether or not there is a path between two vertices.
    */
-  Boolean pathExistsBetween(final V v1, final V v2);
+  Boolean pathExistsBetween(V v1, V v2);
 
   /**
    * Checks whether the given vertex is assigned with a wrapping LoopVertex.
@@ -212,7 +212,7 @@
    * @param v Vertex to check.
    * @return whether or not it is wrapped by a LoopVertex
    */
-  Boolean isCompositeVertex(final V v);
+  Boolean isCompositeVertex(V v);
 
   /**
    * Retrieves the stack depth of the given vertex.
@@ -220,7 +220,7 @@
    * @param v Vertex to check.
    * @return The depth of the stack of LoopVertices for the vertex.
    */
-  Integer getLoopStackDepthOf(final V v);
+  Integer getLoopStackDepthOf(V v);
 
   /**
    * Retrieves the wrapping LoopVertex of the vertex.
@@ -228,7 +228,7 @@
    * @param v Vertex to check.
    * @return The wrapping LoopVertex.
    */
-  LoopVertex getAssignedLoopVertexOf(final V v);
+  LoopVertex getAssignedLoopVertexOf(V v);
 
   /**
    * @return {@link com.fasterxml.jackson.databind.JsonNode} for this DAG.
@@ -242,5 +242,5 @@
    * @param name        name of this DAG
    * @param description description of this DAG
    */
-  void storeJSON(final String directory, final String name, final String description);
+  void storeJSON(String directory, String name, String description);
 }
diff --git a/common/src/main/java/org/apache/nemo/common/ir/IRDAGChecker.java b/common/src/main/java/org/apache/nemo/common/ir/IRDAGChecker.java
index 21b04f2..dafb9cd 100644
--- a/common/src/main/java/org/apache/nemo/common/ir/IRDAGChecker.java
+++ b/common/src/main/java/org/apache/nemo/common/ir/IRDAGChecker.java
@@ -131,30 +131,30 @@
    * Checks each single vertex.
    */
   private interface SingleVertexChecker {
-    CheckerResult check(final IRVertex irVertex);
+    CheckerResult check(IRVertex irVertex);
   }
 
   /**
    * Checks each single edge.
    */
   private interface SingleEdgeChecker {
-    CheckerResult check(final IREdge irEdge);
+    CheckerResult check(IREdge irEdge);
   }
 
   /**
    * Checks each vertex and its neighbor edges.
    */
   private interface NeighborChecker {
-    CheckerResult check(final IRVertex irVertex,
-                        final List<IREdge> inEdges,
-                        final List<IREdge> outEdges);
+    CheckerResult check(IRVertex irVertex,
+                        List<IREdge> inEdges,
+                        List<IREdge> outEdges);
   }
 
   /**
    * Checks the entire DAG.
    */
   public interface GlobalDAGChecker {
-    CheckerResult check(final DAG<IRVertex, IREdge> irdag);
+    CheckerResult check(DAG<IRVertex, IREdge> irdag);
   }
 
   ///////////////////////////// Checker implementations
diff --git a/common/src/main/java/org/apache/nemo/common/test/ExampleTestUtil.java b/common/src/main/java/org/apache/nemo/common/test/ExampleTestUtil.java
index 628a12f..08691af 100644
--- a/common/src/main/java/org/apache/nemo/common/test/ExampleTestUtil.java
+++ b/common/src/main/java/org/apache/nemo/common/test/ExampleTestUtil.java
@@ -53,7 +53,7 @@
                                           final String testResourceFileName) throws IOException {
 
     final String testOutput;
-    try (final Stream<Path> fileStream = Files.list(Paths.get(resourcePath))) {
+    try (Stream<Path> fileStream = Files.list(Paths.get(resourcePath))) {
       testOutput = fileStream
         .filter(Files::isRegularFile)
         // TODO 346: Do not use test file prefixes
@@ -72,7 +72,7 @@
 
     final String resourceOutput;
 
-    try (final Stream<String> lineStream = Files.lines(Paths.get(resourcePath + testResourceFileName))) {
+    try (Stream<String> lineStream = Files.lines(Paths.get(resourcePath + testResourceFileName))) {
       resourceOutput = lineStream
         .sorted()
         .reduce("", (p, q) -> (p + "\n" + q));
@@ -107,7 +107,7 @@
                                              final String testResourceFileName) throws IOException {
 
     final List<List<Double>> testOutput;
-    try (final Stream<Path> fileStream = Files.list(Paths.get(resourcePath))) {
+    try (Stream<Path> fileStream = Files.list(Paths.get(resourcePath))) {
       testOutput = fileStream
         .filter(Files::isRegularFile)
         .filter(path -> path.getFileName().toString().startsWith(outputFileName))
@@ -126,7 +126,7 @@
     }
 
     final List<List<Double>> resourceOutput;
-    try (final Stream<String> lineStream = Files.lines(Paths.get(resourcePath + testResourceFileName))) {
+    try (Stream<String> lineStream = Files.lines(Paths.get(resourcePath + testResourceFileName))) {
       resourceOutput = lineStream
         .sorted()
         .filter(line -> !line.trim().equals(""))
@@ -159,7 +159,7 @@
    */
   public static void deleteOutputFile(final String directory,
                                       final String outputFileName) throws IOException {
-    try (final Stream<Path> fileStream = Files.list(Paths.get(directory))) {
+    try (Stream<Path> fileStream = Files.list(Paths.get(directory))) {
       final Set<Path> outputFilePaths = fileStream
         .filter(Files::isRegularFile)
         .filter(path -> path.getFileName().toString().startsWith(outputFileName))
diff --git a/compiler/frontend/beam/src/main/java/org/apache/nemo/compiler/frontend/beam/transform/AbstractDoFnTransform.java b/compiler/frontend/beam/src/main/java/org/apache/nemo/compiler/frontend/beam/transform/AbstractDoFnTransform.java
index 1139282..b3abace 100644
--- a/compiler/frontend/beam/src/main/java/org/apache/nemo/compiler/frontend/beam/transform/AbstractDoFnTransform.java
+++ b/compiler/frontend/beam/src/main/java/org/apache/nemo/compiler/frontend/beam/transform/AbstractDoFnTransform.java
@@ -319,7 +319,7 @@
    * @param originalDoFn the original doFn.
    * @return wrapped doFn.
    */
-  abstract DoFn wrapDoFn(final DoFn originalDoFn);
+  abstract DoFn wrapDoFn(DoFn originalDoFn);
 
   /**
    * An abstract function that wraps the original output collector.
@@ -327,7 +327,7 @@
    * @param oc the original outputCollector.
    * @return wrapped output collector.
    */
-  abstract OutputCollector wrapOutputCollector(final OutputCollector oc);
+  abstract OutputCollector wrapOutputCollector(OutputCollector oc);
 
   /**
    * An abstract function that is called before close.
diff --git a/compiler/frontend/spark/src/main/java/org/apache/nemo/compiler/frontend/spark/transform/HDFSTextFileTransform.java b/compiler/frontend/spark/src/main/java/org/apache/nemo/compiler/frontend/spark/transform/HDFSTextFileTransform.java
index 6822498..849860d 100644
--- a/compiler/frontend/spark/src/main/java/org/apache/nemo/compiler/frontend/spark/transform/HDFSTextFileTransform.java
+++ b/compiler/frontend/spark/src/main/java/org/apache/nemo/compiler/frontend/spark/transform/HDFSTextFileTransform.java
@@ -64,8 +64,8 @@
   @Override
   public void close() {
     try (
-      final FileSystem fileSystem = fileName.getFileSystem(new JobConf());
-      final FSDataOutputStream outputStream = fileSystem.create(fileName, false);
+      FileSystem fileSystem = fileName.getFileSystem(new JobConf());
+      FSDataOutputStream outputStream = fileSystem.create(fileName, false);
     ) {
       for (final I element : elements) {
         outputStream.writeBytes(element + "\n");
diff --git a/compiler/frontend/spark/src/main/java/org/apache/nemo/compiler/frontend/spark/transform/LocalTextFileTransform.java b/compiler/frontend/spark/src/main/java/org/apache/nemo/compiler/frontend/spark/transform/LocalTextFileTransform.java
index 1de8151..8965ae2 100644
--- a/compiler/frontend/spark/src/main/java/org/apache/nemo/compiler/frontend/spark/transform/LocalTextFileTransform.java
+++ b/compiler/frontend/spark/src/main/java/org/apache/nemo/compiler/frontend/spark/transform/LocalTextFileTransform.java
@@ -59,7 +59,7 @@
   @Override
   public void close() {
     try (
-      final Writer writer =
+      Writer writer =
         new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName, false), "utf-8"))
     ) {
       for (final I element : elements) {
diff --git a/compiler/optimizer/src/main/java/org/apache/nemo/compiler/optimizer/Optimizer.java b/compiler/optimizer/src/main/java/org/apache/nemo/compiler/optimizer/Optimizer.java
index be5f149..b9dd521 100644
--- a/compiler/optimizer/src/main/java/org/apache/nemo/compiler/optimizer/Optimizer.java
+++ b/compiler/optimizer/src/main/java/org/apache/nemo/compiler/optimizer/Optimizer.java
@@ -44,5 +44,5 @@
    * @param message for optimization.
    * @return optimized DAG.
    */
-  IRDAG optimizeAtRunTime(final IRDAG dag, final Message message);
+  IRDAG optimizeAtRunTime(IRDAG dag, Message message);
 }
diff --git a/compiler/optimizer/src/main/java/org/apache/nemo/compiler/optimizer/policy/Policy.java b/compiler/optimizer/src/main/java/org/apache/nemo/compiler/optimizer/policy/Policy.java
index 9d4110d..9653fc2 100644
--- a/compiler/optimizer/src/main/java/org/apache/nemo/compiler/optimizer/policy/Policy.java
+++ b/compiler/optimizer/src/main/java/org/apache/nemo/compiler/optimizer/policy/Policy.java
@@ -44,5 +44,5 @@
    * @param dag     input DAG.
    * @param message from the DAG execution.
    */
-  IRDAG runRunTimeOptimizations(final IRDAG dag, final Message<?> message);
+  IRDAG runRunTimeOptimizations(IRDAG dag, Message<?> message);
 }
diff --git a/examples/spark/src/main/java/org/apache/nemo/examples/spark/sql/JavaSparkSQLExample.java b/examples/spark/src/main/java/org/apache/nemo/examples/spark/sql/JavaSparkSQLExample.java
index 5e9099b..8a4004a 100644
--- a/examples/spark/src/main/java/org/apache/nemo/examples/spark/sql/JavaSparkSQLExample.java
+++ b/examples/spark/src/main/java/org/apache/nemo/examples/spark/sql/JavaSparkSQLExample.java
@@ -208,7 +208,7 @@
     // +----+-------+
 
     // Global temporary view is cross-session
-    try (final org.apache.spark.sql.SparkSession newSession = spark.newSession()) {
+    try (org.apache.spark.sql.SparkSession newSession = spark.newSession()) {
       newSession.sql("SELECT * FROM global_temp.people").show();
     }
     // +----+-------+
diff --git a/pom.xml b/pom.xml
index 539db2c..7c1615a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -70,6 +70,7 @@
     <powermock.version>2.0.0-beta.5</powermock.version>
     <surefire.version>3.0.0-M1</surefire.version>
     <junit.version>4.12</junit.version>
+    <checkstyle.version>8.16</checkstyle.version>
   </properties>
 
   <modules>
@@ -187,7 +188,14 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-checkstyle-plugin</artifactId>
-        <version>2.17</version>
+        <version>3.0.0</version>
+        <dependencies>
+          <dependency>
+            <groupId>com.puppycrawl.tools</groupId>
+            <artifactId>checkstyle</artifactId>
+            <version>${checkstyle.version}</version>
+          </dependency>
+        </dependencies>
         <executions>
           <execution>
             <id>validate</id>
diff --git a/runtime/common/src/main/java/org/apache/nemo/runtime/common/NettyChannelImplementationSelector.java b/runtime/common/src/main/java/org/apache/nemo/runtime/common/NettyChannelImplementationSelector.java
index 2904448..6886f08 100644
--- a/runtime/common/src/main/java/org/apache/nemo/runtime/common/NettyChannelImplementationSelector.java
+++ b/runtime/common/src/main/java/org/apache/nemo/runtime/common/NettyChannelImplementationSelector.java
@@ -38,7 +38,7 @@
    * @param threadFactory the {@link ThreadFactory}
    * @return a new {@link EventLoopGroup}
    */
-  EventLoopGroup newEventLoopGroup(int numThreads, final ThreadFactory threadFactory);
+  EventLoopGroup newEventLoopGroup(int numThreads, ThreadFactory threadFactory);
 
   /**
    * @return class for server channel
diff --git a/runtime/common/src/main/java/org/apache/nemo/runtime/common/metric/Metric.java b/runtime/common/src/main/java/org/apache/nemo/runtime/common/metric/Metric.java
index 5880838..76908b9 100644
--- a/runtime/common/src/main/java/org/apache/nemo/runtime/common/metric/Metric.java
+++ b/runtime/common/src/main/java/org/apache/nemo/runtime/common/metric/Metric.java
@@ -36,5 +36,5 @@
    * @param metricValue byte array of serialized data value.
    * @return true if the metric was changed or false if not.
    */
-  boolean processMetricMessage(final String metricField, final byte[] metricValue);
+  boolean processMetricMessage(String metricField, byte[] metricValue);
 }
diff --git a/runtime/common/src/main/java/org/apache/nemo/runtime/common/metric/MetricUtils.java b/runtime/common/src/main/java/org/apache/nemo/runtime/common/metric/MetricUtils.java
index 4f77297..0f22f26 100644
--- a/runtime/common/src/main/java/org/apache/nemo/runtime/common/metric/MetricUtils.java
+++ b/runtime/common/src/main/java/org/apache/nemo/runtime/common/metric/MetricUtils.java
@@ -80,9 +80,9 @@
    */
   private static Pair<HashBiMap<Integer, Class<? extends ExecutionProperty>>,
     HashBiMap<Pair<Integer, Integer>, ExecutionProperty<?>>> loadMetaData() {
-    try (final Connection c = DriverManager.getConnection(MetricUtils.POSTGRESQL_METADATA_DB_NAME,
+    try (Connection c = DriverManager.getConnection(MetricUtils.POSTGRESQL_METADATA_DB_NAME,
       "postgres", "fake_password")) {
-      try (final Statement statement = c.createStatement()) {
+      try (Statement statement = c.createStatement()) {
         statement.setQueryTimeout(30);  // set timeout to 30 sec.
 
         statement.executeUpdate(
@@ -144,13 +144,13 @@
     }
     LOG.info("Saving Metadata..");
 
-    try (final Connection c = DriverManager.getConnection(MetricUtils.POSTGRESQL_METADATA_DB_NAME,
+    try (Connection c = DriverManager.getConnection(MetricUtils.POSTGRESQL_METADATA_DB_NAME,
       "postgres", "fake_password")) {
-      try (final Statement statement = c.createStatement()) {
+      try (Statement statement = c.createStatement()) {
         statement.setQueryTimeout(30);  // set timeout to 30 sec.
 
         if (MUST_UPDATE_EP_KEY_METADATA.getCount() == 0) {
-          try (final PreparedStatement pstmt = c.prepareStatement(
+          try (PreparedStatement pstmt = c.prepareStatement(
             "INSERT INTO " + METADATA_TABLE_NAME + " (key, data) "
               + "VALUES ('EP_KEY_METADATA', ?) ON CONFLICT (key) DO UPDATE SET data = excluded.data;")) {
             pstmt.setBinaryStream(1,
@@ -161,7 +161,7 @@
         }
 
         if (MUST_UPDATE_EP_METADATA.getCount() == 0) {
-          try (final PreparedStatement pstmt =
+          try (PreparedStatement pstmt =
                  c.prepareStatement("INSERT INTO " + METADATA_TABLE_NAME + "(key, data) "
                    + "VALUES ('EP_METADATA', ?) ON CONFLICT (key) DO UPDATE SET data = excluded.data;")) {
             pstmt.setBinaryStream(1,
@@ -287,7 +287,7 @@
    * @return the path containing the LICENSE file.
    */
   private static String recursivelyFindLicense(final Path path) {
-    try (final Stream stream = Files.find(path, 1, (p, attributes) -> p.endsWith("LICENSE"))) {
+    try (Stream stream = Files.find(path, 1, (p, attributes) -> p.endsWith("LICENSE"))) {
       if (stream.count() > 0) {
         return path.toAbsolutePath().toString();
       } else {
diff --git a/runtime/common/src/main/java/org/apache/nemo/runtime/common/metric/StateMetric.java b/runtime/common/src/main/java/org/apache/nemo/runtime/common/metric/StateMetric.java
index 9ad4d6a..33c1865 100644
--- a/runtime/common/src/main/java/org/apache/nemo/runtime/common/metric/StateMetric.java
+++ b/runtime/common/src/main/java/org/apache/nemo/runtime/common/metric/StateMetric.java
@@ -40,5 +40,5 @@
    * @param prevState previous state.
    * @param newState  new state.
    */
-  void addEvent(final T prevState, final T newState);
+  void addEvent(T prevState, T newState);
 }
diff --git a/runtime/common/src/main/java/org/apache/nemo/runtime/common/plan/PlanRewriter.java b/runtime/common/src/main/java/org/apache/nemo/runtime/common/plan/PlanRewriter.java
index 7b7ab6d..e050b27 100644
--- a/runtime/common/src/main/java/org/apache/nemo/runtime/common/plan/PlanRewriter.java
+++ b/runtime/common/src/main/java/org/apache/nemo/runtime/common/plan/PlanRewriter.java
@@ -27,11 +27,11 @@
    * @param messageId           of the rewrite.
    * @return physical plan.
    */
-  PhysicalPlan rewrite(final PhysicalPlan currentPhysicalPlan, final int messageId);
+  PhysicalPlan rewrite(PhysicalPlan currentPhysicalPlan, int messageId);
 
   /**
    * @param messageId of the rewrite.
    * @param data      to accumulate.
    */
-  void accumulate(final int messageId, final Object data);
+  void accumulate(int messageId, Object data);
 }
diff --git a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/MetricMessageSender.java b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/MetricMessageSender.java
index 4c8de1a..e79f6e5 100644
--- a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/MetricMessageSender.java
+++ b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/MetricMessageSender.java
@@ -34,7 +34,7 @@
    * @param metricField field of the metric
    * @param metricValue value of the metric which is serialized
    */
-  void send(final String metricType, final String metricId, final String metricField, final byte[] metricValue);
+  void send(String metricType, String metricId, String metricField, byte[] metricValue);
 
   /**
    * Flush all metric inside of the queue.
diff --git a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/bytetransfer/ByteTransferContext.java b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/bytetransfer/ByteTransferContext.java
index e2c7adf..9d1f605 100644
--- a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/bytetransfer/ByteTransferContext.java
+++ b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/bytetransfer/ByteTransferContext.java
@@ -113,7 +113,7 @@
    *
    * @param cause the cause of exception handling
    */
-  public abstract void onChannelError(@Nullable final Throwable cause);
+  public abstract void onChannelError(@Nullable Throwable cause);
 
   /**
    * Sets exception.
diff --git a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/data/DataUtil.java b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/data/DataUtil.java
index f5440ee..794e8c8 100644
--- a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/data/DataUtil.java
+++ b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/data/DataUtil.java
@@ -87,7 +87,7 @@
     // compression stream. This depends on the nature of the compression algorithm used.
     // We recommend to wrap with LimitedInputStream once more when
     // reading input from chained compression InputStream.
-    try (final LimitedInputStream limitedInputStream = new LimitedInputStream(inputStream, partitionSize)) {
+    try (LimitedInputStream limitedInputStream = new LimitedInputStream(inputStream, partitionSize)) {
       final InputStreamIterator iterator =
         new InputStreamIterator(Collections.singletonList(limitedInputStream).iterator(), serializer);
       iterator.forEachRemaining(deserializedData::add);
@@ -112,8 +112,8 @@
     final List<SerializedPartition<K>> serializedPartitions = new ArrayList<>();
     for (final NonSerializedPartition<K> partitionToConvert : partitionsToConvert) {
       try (
-        final DirectByteArrayOutputStream bytesOutputStream = new DirectByteArrayOutputStream();
-        final OutputStream wrappedStream = buildOutputStream(bytesOutputStream, serializer.getEncodeStreamChainers());
+        DirectByteArrayOutputStream bytesOutputStream = new DirectByteArrayOutputStream();
+        OutputStream wrappedStream = buildOutputStream(bytesOutputStream, serializer.getEncodeStreamChainers());
       ) {
         serializePartition(serializer.getEncoderFactory(), partitionToConvert, wrappedStream);
         // We need to close wrappedStream on here, because DirectByteArrayOutputStream:getBufDirectly() returns
@@ -148,7 +148,7 @@
       final K key = partitionToConvert.getKey();
 
 
-      try (final ByteArrayInputStream byteArrayInputStream =
+      try (ByteArrayInputStream byteArrayInputStream =
              new ByteArrayInputStream(partitionToConvert.getData())) {
         final NonSerializedPartition<K> deserializePartition = deserializePartition(
           partitionToConvert.getLength(), serializer, key, byteArrayInputStream);
diff --git a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/data/block/FileBlock.java b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/data/block/FileBlock.java
index 5f39c52..cac065c 100644
--- a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/data/block/FileBlock.java
+++ b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/data/block/FileBlock.java
@@ -83,7 +83,7 @@
    */
   private void writeToFile(final Iterable<SerializedPartition<K>> serializedPartitions)
     throws IOException {
-    try (final FileOutputStream fileOutputStream = new FileOutputStream(filePath, true)) {
+    try (FileOutputStream fileOutputStream = new FileOutputStream(filePath, true)) {
       for (final SerializedPartition<K> serializedPartition : serializedPartitions) {
         // Reserve a partition write and get the metadata.
         metadata.writePartitionMetadata(serializedPartition.getKey(), serializedPartition.getLength());
@@ -180,7 +180,7 @@
       final List<NonSerializedPartition<K>> deserializedPartitions = new ArrayList<>();
       try {
         final List<Pair<K, byte[]>> partitionKeyBytesPairs = new ArrayList<>();
-        try (final FileInputStream fileStream = new FileInputStream(filePath)) {
+        try (FileInputStream fileStream = new FileInputStream(filePath)) {
           for (final PartitionMetadata<K> partitionMetadata : metadata.getPartitionMetadataList()) {
             final K key = partitionMetadata.getKey();
             if (keyRange.includes(key)) {
@@ -225,7 +225,7 @@
       // Deserialize the data
       final List<SerializedPartition<K>> partitionsInRange = new ArrayList<>();
       try {
-        try (final FileInputStream fileStream = new FileInputStream(filePath)) {
+        try (FileInputStream fileStream = new FileInputStream(filePath)) {
           for (final PartitionMetadata<K> partitionmetadata : metadata.getPartitionMetadataList()) {
             final K key = partitionmetadata.getKey();
             if (keyRange.includes(key)) {
diff --git a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/data/metadata/RemoteFileMetadata.java b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/data/metadata/RemoteFileMetadata.java
index cbce86b..c8c7496 100644
--- a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/data/metadata/RemoteFileMetadata.java
+++ b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/data/metadata/RemoteFileMetadata.java
@@ -78,8 +78,8 @@
   public synchronized void commitBlock() throws IOException {
     final Iterable<PartitionMetadata<K>> partitionMetadataItr = getPartitionMetadataList();
     try (
-      final FileOutputStream metafileOutputStream = new FileOutputStream(metaFilePath, false);
-      final DataOutputStream dataOutputStream = new DataOutputStream(metafileOutputStream)
+      FileOutputStream metafileOutputStream = new FileOutputStream(metaFilePath, false);
+      DataOutputStream dataOutputStream = new DataOutputStream(metafileOutputStream)
     ) {
       for (PartitionMetadata<K> partitionMetadata : partitionMetadataItr) {
         final byte[] key = SerializationUtils.serialize(partitionMetadata.getKey());
@@ -117,8 +117,8 @@
     }
     final List<PartitionMetadata<T>> partitionMetadataList = new ArrayList<>();
     try (
-      final FileInputStream metafileInputStream = new FileInputStream(metaFilePath);
-      final DataInputStream dataInputStream = new DataInputStream(metafileInputStream)
+      FileInputStream metafileInputStream = new FileInputStream(metaFilePath);
+      DataInputStream dataInputStream = new DataInputStream(metafileInputStream)
     ) {
       while (dataInputStream.available() > 0) {
         final int keyLength = dataInputStream.readInt();
diff --git a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/datatransfer/OutputWriter.java b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/datatransfer/OutputWriter.java
index 79efa69..bf6ff84 100644
--- a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/datatransfer/OutputWriter.java
+++ b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/datatransfer/OutputWriter.java
@@ -31,14 +31,14 @@
    *
    * @param element the element to write.
    */
-  void write(final Object element);
+  void write(Object element);
 
   /**
    * Writes watermarks to all edges.
    *
    * @param watermark watermark
    */
-  void writeWatermark(final Watermark watermark);
+  void writeWatermark(Watermark watermark);
 
   /**
    * @return the total written bytes.
diff --git a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/datatransfer/PipeOutputWriter.java b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/datatransfer/PipeOutputWriter.java
index 004deb4..8755aa8 100644
--- a/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/datatransfer/PipeOutputWriter.java
+++ b/runtime/executor/src/main/java/org/apache/nemo/runtime/executor/datatransfer/PipeOutputWriter.java
@@ -75,7 +75,7 @@
 
   private void writeData(final Object element, final List<ByteOutputContext> pipeList) {
     pipeList.forEach(pipe -> {
-      try (final ByteOutputContext.ByteOutputStream pipeToWriteTo = pipe.newOutputStream()) {
+      try (ByteOutputContext.ByteOutputStream pipeToWriteTo = pipe.newOutputStream()) {
         pipeToWriteTo.writeElement(element, serializer);
       } catch (IOException e) {
         throw new RuntimeException(e); // For now we crash the executor on IOException
diff --git a/runtime/master/src/main/java/org/apache/nemo/runtime/master/PlanStateManager.java b/runtime/master/src/main/java/org/apache/nemo/runtime/master/PlanStateManager.java
index 635df72..8fa553b 100644
--- a/runtime/master/src/main/java/org/apache/nemo/runtime/master/PlanStateManager.java
+++ b/runtime/master/src/main/java/org/apache/nemo/runtime/master/PlanStateManager.java
@@ -607,7 +607,7 @@
 
     final File file = new File(dagDirectory, planId + "-" + dagLogFileIndex + "-" + suffix + ".json");
     file.getParentFile().mkdirs();
-    try (final PrintWriter printWriter = new PrintWriter(file)) {
+    try (PrintWriter printWriter = new PrintWriter(file)) {
       printWriter.println(toStringWithPhysicalPlan());
       LOG.debug(String.format("JSON representation of plan state for %s(%s) was saved to %s",
         planId, dagLogFileIndex + "-" + suffix, file.getPath()));
diff --git a/runtime/master/src/main/java/org/apache/nemo/runtime/master/metric/MetricMessageHandler.java b/runtime/master/src/main/java/org/apache/nemo/runtime/master/metric/MetricMessageHandler.java
index c375e1c..b81d6e1 100644
--- a/runtime/master/src/main/java/org/apache/nemo/runtime/master/metric/MetricMessageHandler.java
+++ b/runtime/master/src/main/java/org/apache/nemo/runtime/master/metric/MetricMessageHandler.java
@@ -34,8 +34,8 @@
    * @param metricField field name of the metric.
    * @param metricValue serialized metric data value.
    */
-  void onMetricMessageReceived(final String metricType, final String metricId,
-                               final String metricField, final byte[] metricValue);
+  void onMetricMessageReceived(String metricType, String metricId,
+                               String metricField, byte[] metricValue);
 
   /**
    * Cleans up and terminates this handler.
diff --git a/runtime/master/src/main/java/org/apache/nemo/runtime/master/metric/MetricStore.java b/runtime/master/src/main/java/org/apache/nemo/runtime/master/metric/MetricStore.java
index c660b28..4bcd8ee 100644
--- a/runtime/master/src/main/java/org/apache/nemo/runtime/master/metric/MetricStore.java
+++ b/runtime/master/src/main/java/org/apache/nemo/runtime/master/metric/MetricStore.java
@@ -177,7 +177,7 @@
     final JsonFactory jsonFactory = new JsonFactory();
     final ByteArrayOutputStream stream = new ByteArrayOutputStream();
 
-    try (final JsonGenerator jsonGenerator = jsonFactory.createGenerator(stream, JsonEncoding.UTF8)) {
+    try (JsonGenerator jsonGenerator = jsonFactory.createGenerator(stream, JsonEncoding.UTF8)) {
       jsonGenerator.setCodec(objectMapper);
 
       jsonGenerator.writeStartObject();
@@ -203,7 +203,7 @@
     final JsonFactory jsonFactory = new JsonFactory();
     final ByteArrayOutputStream stream = new ByteArrayOutputStream();
 
-    try (final JsonGenerator jsonGenerator = jsonFactory.createGenerator(stream, JsonEncoding.UTF8)) {
+    try (JsonGenerator jsonGenerator = jsonFactory.createGenerator(stream, JsonEncoding.UTF8)) {
       jsonGenerator.setCodec(objectMapper);
 
       jsonGenerator.writeStartObject();
@@ -227,7 +227,7 @@
    * @param filePath path to dump JSON.
    */
   public void dumpAllMetricToFile(final String filePath) {
-    try (final BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
+    try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
       final String jsonDump = dumpAllMetricToJson();
       writer.write(jsonDump);
     } catch (final IOException e) {
@@ -242,7 +242,7 @@
   private void saveOptimizationMetricsToLocal() {
     final String[] syntax = {"INTEGER PRIMARY KEY AUTOINCREMENT"};
 
-    try (final Connection c = DriverManager.getConnection(MetricUtils.SQLITE_DB_NAME)) {
+    try (Connection c = DriverManager.getConnection(MetricUtils.SQLITE_DB_NAME)) {
       LOG.info("Opened database successfully at {}", MetricUtils.SQLITE_DB_NAME);
       saveOptimizationMetrics(c, syntax);
     } catch (SQLException e) {
@@ -262,7 +262,7 @@
       return;
     }
 
-    try (final Connection c = DriverManager.getConnection(address, id, passwd)) {
+    try (Connection c = DriverManager.getConnection(address, id, passwd)) {
       LOG.info("Opened database successfully at {}", MetricUtils.POSTGRESQL_METADATA_DB_NAME);
       saveOptimizationMetrics(c, syntax);
     } catch (SQLException e) {
@@ -279,7 +279,7 @@
    * @param syntax the db-specific syntax.
    */
   private void saveOptimizationMetrics(final Connection c, final String[] syntax) {
-    try (final Statement statement = c.createStatement()) {
+    try (Statement statement = c.createStatement()) {
       statement.setQueryTimeout(30);  // set timeout to 30 sec.
 
       getMetricMap(JobMetric.class).values().forEach(o -> {
@@ -341,7 +341,7 @@
     final T metric = getMetricWithId(metricClass, id);
     final JsonFactory jsonFactory = new JsonFactory();
     final ByteArrayOutputStream stream = new ByteArrayOutputStream();
-    try (final JsonGenerator jsonGenerator = jsonFactory.createGenerator(stream, JsonEncoding.UTF8)) {
+    try (JsonGenerator jsonGenerator = jsonFactory.createGenerator(stream, JsonEncoding.UTF8)) {
       jsonGenerator.setCodec(objectMapper);
 
       jsonGenerator.writeStartObject();
diff --git a/runtime/master/src/main/java/org/apache/nemo/runtime/master/scheduler/SchedulingConstraint.java b/runtime/master/src/main/java/org/apache/nemo/runtime/master/scheduler/SchedulingConstraint.java
index 0e15ddd..c05af7f 100644
--- a/runtime/master/src/main/java/org/apache/nemo/runtime/master/scheduler/SchedulingConstraint.java
+++ b/runtime/master/src/main/java/org/apache/nemo/runtime/master/scheduler/SchedulingConstraint.java
@@ -31,5 +31,5 @@
 @ThreadSafe
 @FunctionalInterface
 public interface SchedulingConstraint {
-  boolean testSchedulability(final ExecutorRepresenter executor, final Task task);
+  boolean testSchedulability(ExecutorRepresenter executor, Task task);
 }
diff --git a/runtime/master/src/main/java/org/apache/nemo/runtime/master/scheduler/SchedulingPolicy.java b/runtime/master/src/main/java/org/apache/nemo/runtime/master/scheduler/SchedulingPolicy.java
index 76afbee..913b674 100644
--- a/runtime/master/src/main/java/org/apache/nemo/runtime/master/scheduler/SchedulingPolicy.java
+++ b/runtime/master/src/main/java/org/apache/nemo/runtime/master/scheduler/SchedulingPolicy.java
@@ -42,5 +42,5 @@
    * @param task      The task to schedule
    * @return The selected executor. It must be a member of {@code executors}.
    */
-  ExecutorRepresenter selectExecutor(final Collection<ExecutorRepresenter> executors, final Task task);
+  ExecutorRepresenter selectExecutor(Collection<ExecutorRepresenter> executors, Task task);
 }
