为什么hive试图在hdfs中写入/ user?

时间:2014-02-14 16:33:49

标签: python hadoop hive hdfs

使用如下所示的简单HiveQL查询:

SELECT event_type FROM {{table}} where dt=20140103 limit 10;

{{table}}部分仅通过使用via Jinja2的转轮代码进行插值。我正在使用来自python的-e在hive命令行上使用subprocess.Popen标志运行我的查询。

出于某种原因,此设置是否尝试写入HDFS中的常规/user目录?发出命令无效。产生的错误如下:

Job Submission failed with exception:
org.apache.hadoop.security.AccessControlException(Permission denied:user=username, access=WRITE, inode="/user":hdfs:hadoop:drwxrwxr-x\n\tat org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:234)

为什么hive会尝试写入/users?另外,为什么像这样的select语句需要一个输出位置?

1 个答案:

答案 0 :(得分:2)

Hive是MapReduce的SQL前端,因此需要编译和分阶段执行Java代码。它不是试图将输出放在那里,而是它将执行的程序。根据您的Hadoop版本,这由变量控制:

mapreduce.jobtracker.staging.root.dir

在YARN / Hadoop 2上:

yarn.app.mapreduce.am.staging-dir

这些是在mapred-site.xml中设置的。

您的跑步者需要通过群集进行身份验证,并拥有可以使用的可写目录。