The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: -wx------

12,483

Solution 1

Try this

hadoop fs -chmod -R 777 /tmp/hive/;

I had a similar issue while running a hive query, using the -R resolved it.

Solution 2

Just to add to the previous answers, if your username is something like 'cloudera' (you could be using cloudera manager/cloudera quickstart as your implementation platform), you could do the following:

sudo -u hdfs hadoop fs -chmod -R 777 /tmp/hive/;

Remember that in hadoop, 'hdfs' is the superuser and not 'root' or 'cloudera'.

Solution 3

Don't do chmod (777)... The correct is (733):

Hive 0.14.0 and later: HDFS root scratch directory for Hive jobs, which gets created with write all (733) permission. For each connecting user, an HDFS scratch directory ${hive.exec.scratchdir}/ is created with ${hive.scratch.dir.permission}.

Try to do this with hdfs user:

    hdfs dfs -mkdir /tmp/hive
    hdfs dfs -chown hive /tmp/hive/$HADOOP_USER_NAME
    hdfs dfs -chmod 733 /tmp/hive/$HADOOP_USER_NAME
    hdfs dfs -mkdir /tmp/hive/$HADOOP_USER_NAME
    hdfs dfs -chown $HADOOP_USER_NAME /tmp/hive/$HADOOP_USER_NAME
    hdfs dfs -chmod 700 /tmp/hive/$HADOOP_USER_NAME

This works, instead you can change scratchdir path with (from hive):

set hive.exec.scratchdir=/somedir_with_permission/subdir...

more info: https://cwiki.apache.org/confluence/display/Hive/AdminManual+Configuration

Solution 4

We are executing spark job in local mode. That means there is no writable permission to the directory /tmp/hive in local (linux) machine.

So execute chmod -R 777 /tmp/hive. That solved my issue.

Referred from::: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwx--------- (on Linux)

Share:
12,483
Amar Banerjee
Author by

Amar Banerjee

Hi Guys, I am a technical guy and give my career to the open source technology. Currently I am working for an IT company named Ogma Conceptions and my role is Chief Technical Consultant.

Updated on June 18, 2022

Comments

  • Amar Banerjee
    Amar Banerjee almost 2 years

    I have changed permission using hdfs command. Still it showing same error.

    The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: -wx------

    Java Program that I am executing.

    import java.sql.SQLException;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.sql.DriverManager;
    import org.apache.hive.jdbc.HiveDriver;
    
    public class HiveCreateDb {
       private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
    
       public static void main(String[] args) throws Exception {
          // Register driver and create driver instance
    
             Class.forName(driverName);
    
    /*  try {
      Class.forName(driverName);
    } catch(ClassNotFoundException e) {
      print("Couldn't find Gum");
    
    } */     // get connection
    
          Connection con = DriverManager.getConnection("jdbc:hive://", "", "");
    
          Statement stmt = con.createStatement();
    
          stmt.executeQuery("CREATE DATABASE userdb");
          System.out.println("Database userdb created successfully.");
    
          con.close();
       }
    }
    

    It is giving a runtime error for connecting hive.

    Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwx------ enter image description here