diff --git a/bin/ycsb b/bin/ycsb
index b839e91adc2bd10db6f70048a9e0c02a8b134472..c38cfe97c011333c9a264398c7873f5528259f4a 100755
--- a/bin/ycsb
+++ b/bin/ycsb
@@ -16,13 +16,18 @@
 # LICENSE file.
 #
 
-import argparse
+import errno
 import fnmatch
 import io
 import os
 import shlex
 import sys
 import subprocess
+try:
+    import argparse
+except ImportError:
+    print >> sys.stderr, '[ERROR] argparse not found. Try installing it via "pip".'
+    raise
 
 BASE_URL = "https://github.com/brianfrankcooper/YCSB/tree/master/"
 COMMANDS = {
@@ -111,6 +116,13 @@ def usage():
 
     return output.getvalue()
 
+def check_output(cmd):
+    p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+    stdout, _ = p.communicate()
+    if p.returncode:
+        raise subprocess.CalledProcessError(p.returncode, cmd)
+    return stdout
+
 def debug(message):
     print >> sys.stderr, "[DEBUG] ", message
 
@@ -127,7 +139,6 @@ def find_jars(dir, glob='*.jar'):
             jars.append(os.path.join(dirpath, filename))
     return jars
 
-
 def get_ycsb_home():
     dir = os.path.abspath(os.path.dirname(sys.argv[0]))
     while "LICENSE.txt" not in os.listdir(dir):
@@ -147,11 +158,11 @@ def get_classpath_from_maven(module):
     try:
         debug("Running 'mvn -pl com.yahoo.ycsb:" + module + " -am package -DskipTests "
               "dependency:build-classpath -DincludeScope=compile -Dmdep.outputFilterFile=true'")
-        mvn_output = subprocess.check_output(["mvn", "-pl", "com.yahoo.ycsb:" + module,
-                                              "-am", "package", "-DskipTests",
-                                              "dependency:build-classpath",
-                                              "-DincludeScope=compile",
-                                              "-Dmdep.outputFilterFile=true"])
+        mvn_output = check_output(["mvn", "-pl", "com.yahoo.ycsb:" + module,
+                                   "-am", "package", "-DskipTests",
+                                   "dependency:build-classpath",
+                                   "-DincludeScope=compile",
+                                   "-Dmdep.outputFilterFile=true"])
         # the above outputs a "classpath=/path/tojar:/path/to/other/jar" for each module
         # the last module will be the datastore binding
         line = [x for x in mvn_output.splitlines() if x.startswith("classpath=")][-1:]
@@ -226,8 +237,14 @@ def main():
     if command:
         ycsb_command.append(command)
     print >> sys.stderr, " ".join(ycsb_command)
-    return subprocess.call(ycsb_command)
-
+    try:
+        return subprocess.call(ycsb_command)
+    except OSError as e:
+        if e.errno == errno.ENOENT:
+            error('Command failed. Is java installed and on your PATH?')
+            return 1
+        else:
+            raise
 
 if __name__ == '__main__':
     sys.exit(main())