使用如下所示的简单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语句需要一个输出位置?
答案 0 :(得分:2)
Hive是MapReduce的SQL前端,因此需要编译和分阶段执行Java代码。它不是试图将输出放在那里,而是它将执行的程序。根据您的Hadoop版本,这由变量控制:
mapreduce.jobtracker.staging.root.dir
在YARN / Hadoop 2上:
yarn.app.mapreduce.am.staging-dir
这些是在mapred-site.xml中设置的。
您的跑步者需要通过群集进行身份验证,并拥有可以使用的可写目录。