diff --git a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
index 6a4dcb0..b4f972c 100644
--- a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
+++ b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
@@ -312,7 +312,7 @@
   }
 
   /**
-   * Examines a subset of the arrray presented, and determines if it
+   * Examines a subset of the array presented, and determines if it
    * contains any non-empty arguments. If so, logs the arguments
    * and returns true.
    *
diff --git a/src/java/org/apache/sqoop/tool/ExportTool.java b/src/java/org/apache/sqoop/tool/ExportTool.java
index cd6cdf3..4bd2fed 100644
--- a/src/java/org/apache/sqoop/tool/ExportTool.java
+++ b/src/java/org/apache/sqoop/tool/ExportTool.java
@@ -19,6 +19,8 @@
 package org.apache.sqoop.tool;
 
 import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.commons.cli.CommandLine;
@@ -41,6 +43,16 @@
 public class ExportTool extends com.cloudera.sqoop.tool.BaseSqoopTool {
 
   public static final Log LOG = LogFactory.getLog(ExportTool.class.getName());
+  public static final String NOT_SUPPORTED_FILE_FORMAT_ERROR_MSG = "Please note that the export tool " +
+          "detects the file format automatically and does not support it as an argument: %s";
+
+  private final List<String> unsupportedArguments =
+    Collections.unmodifiableList(
+      Arrays.asList(
+        BaseSqoopTool.FMT_PARQUETFILE_ARG,
+        BaseSqoopTool.FMT_AVRODATAFILE_ARG,
+        BaseSqoopTool.FMT_SEQUENCEFILE_ARG)
+  );
 
   private CodeGenTool codeGenerator;
 
@@ -383,6 +395,26 @@
     vaildateDirectExportOptions(options);
   }
 
+  @Override
+  /** {@inheritDoc} */
+  protected boolean hasUnrecognizedArgs(String [] argv, int offset, int len) {
+    boolean unrecognizedArgs = super.hasUnrecognizedArgs(argv, offset, len);
+    for (String arg : argv) {
+      if (unsupportedArguments.contains(stripLeadingHyphens(arg))) {
+        LOG.error(String.format(NOT_SUPPORTED_FILE_FORMAT_ERROR_MSG, arg));
+      }
+    }
+    return unrecognizedArgs;
+  }
+
+  private String stripLeadingHyphens(String arg) {
+    if (arg != null
+            && arg.startsWith("--")) {
+      return arg.substring(2);
+    }
+    return arg;
+  }
+
   void vaildateDirectExportOptions(SqoopOptions options) throws InvalidOptionsException {
     if (options.isDirect()) {
       validateHasDirectConnectorOption(options);
