如果我自己运行配置单元外壳,我可以查询表。
但是如果我使用sudo -u hdfs hive
运行hive-shell
然后我的所有查询都失败了,并显示错误消息
Application application_1447966350718_10654 failed 2 times due to AM Container for appattempt_1447966350718_10654_000002 exited with exitCode: -1000
For more detailed output, check application tracking page:http://vtdevana-cloudera11.dealer.ddc:8088/proxy/application_1447966350718_10654/Then, click on links to logs of each attempt.
Diagnostics: Application application_1447966350718_10654 initialization failed (exitCode=255) with output: main : command provided 0
main : user is nobody
main : requested yarn user is hdfs
Can't create directory /yarn/nm/usercache/hdfs/appcache/application_1447966350718_10654 - Permission denied
Did not create any app directories
Failing this attempt. Failing the application.
我应该怎么做才能使用hdfs用户查询hive?
"/yarn/nm/usercache/hdfs/appcache/application_1447966350718_10654
"是本地文件系统上的路径。
在您的yarn-site.xml
中,有一个配置参数:yarn.nodemanager.local-dirs
。
该参数的描述为:
要存储的目录列表中的本地化文件。应用程序的本地化文件目录将在中找到:
${yarn.nodemanager.local-dirs}/usercache/${user}/appcache/application_${appid}
。单个容器的工作目录,称为container_${contid},将是的子目录。
因此,在您的情况下,此参数已设置为:
yarn.nodemanager.local-dirs=/yarn/nm/
因此,当您尝试以用户hdfs
的身份执行配置单元查询时,它会尝试在本地文件系统中创建以下文件夹,但由于权限不足,操作失败:
${yarn.nodemanager.local-dirs}/usercache/${user}/appcache/application_${appid}
被翻译成
/yarn/nm/usercache/hdfs/appcache/application_1447966350718_10654
"
${yarn.nodemanager.local-dirs}
"替换为"/yarn/nm
"
"${user}"
替换为"hdfs
"
"${appid}
"替换为"1447966350718_10654
"
为了解决这个问题,您需要向所有用户授予对顶级文件夹的写入权限:/yarn/nm/