HDFS上的root scratch dir:/ tmp / hive应该是可写的。当前权限是:-wx ------

时间:2016-11-03 19:35:23

标签: hadoop hive hdfs

我已使用hdfs命令更改了权限。仍然显示相同的错误。

  

HDFS上的root scratch dir:/ tmp / hive应该是可写的。当前权限为:-wx ------

我正在执行的Java程序。

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();
   }
}

它为连接配置单元提供了运行时错误。

线程中的异常" main" java.lang.RuntimeException:java.lang.RuntimeException:HDFS上的root scratch dir:/ tmp / hive应该是可写的。目前的权限是:rwx ------ enter image description here

4 个答案:

答案 0 :(得分:5)

试试这个

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

我在运行配置单元查询时遇到类似问题,使用-R已解决它。

答案 1 :(得分:3)

只是添加到之前的答案,如果您的用户名是' cloudera' (您可以使用cloudera manager / cloudera quickstart作为您的实施平台),您可以执行以下操作:

  

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

请记住,在hadoop,' hdfs'是超级用户,而不是&root;' root'或者' cloudera'。

答案 2 :(得分:1)

我们正在本地模式下执行spark工作。这意味着本地(linux)机器中的目录/ tmp / hive没有可写权限。

所以执行chmod -R 777 /tmp/hive。这解决了我的问题。

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

答案 3 :(得分:0)

不要做chmod(777)......正确的是(733):

Hive 0.14.0及更高版本:Hive作业的HDFS root scratch目录,使用write all(733)权限创建。对于每个连接用户,使用$ {hive.scratch.dir.permission}创建HDFS临时目录$ {hive.exec.scratchdir}。

尝试使用hdfs用户执行此操作:

    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

这样可行,您可以使用(来自配置单元)更改scratchdir路径:

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

更多信息:https://cwiki.apache.org/confluence/display/Hive/AdminManual+Configuration