Hadoop 谷歌云上的配置单元需要/tmp上的权限,但无法更改权限

Hadoop 谷歌云上的配置单元需要/tmp上的权限,但无法更改权限,hadoop,hive,google-compute-engine,chmod,google-cloud-platform,Hadoop,Hive,Google Compute Engine,Chmod,Google Cloud Platform,我正试图在谷歌云上运行Hive,Hadoop是在谷歌云上安装的。Hive似乎安装得很好,但当我运行Hive时,我得到以下错误输出: Logging initialized using configuration in jar:file:/home/michael_w_sherman_gmail_com/apache-hive-0.14.0-bin/l ib/hive-common-0.14.0.jar!/hive-log4j.properties SLF4J: Class path contai

我正试图在谷歌云上运行Hive,Hadoop是在谷歌云上安装的。Hive似乎安装得很好,但当我运行
Hive
时,我得到以下错误输出:

Logging initialized using configuration in jar:file:/home/michael_w_sherman_gmail_com/apache-hive-0.14.0-bin/l
ib/hive-common-0.14.0.jar!/hive-log4j.properties
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/hadoop-install/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!
/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/michael_w_sherman_gmail_com/apache-hive-0.14.0-bin/lib/hive-jdbc-0.14.
0-standalone.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
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------
        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:444)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:672)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
Caused by: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS should be writable. Current per
missions are: rwx------
        at org.apache.hadoop.hive.ql.session.SessionState.createRootHDFSDir(SessionState.java:529)
        at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:478)
        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:430)
        ... 7 more
我的第一个修复方法是检查
hdfs site.xml
并更改
dfs.permissions.enabled
设置,但它已设置为
false
。接下来,我尝试
chmod
权限。但是chmod的更改不需要

$hadoop fs-ls

15/01/28 23:03:13信息gcs.googlehadoop文件系统数据库:GHFS版本:1.2.9-hadoop2

找到8项

drwx------xxxx\u gmail\u com xxxx\u gmail\u com 0 2015-01-28 21:54 tmp

$hadoop fs-chmod-R 777/tmp

15/01/28 23:03:31 INFO gcs.googlehadoop文件系统数据库:GHFS版本:1.2.9-hadoop2

$hadoop fs-ls 15/01/28 23:09:35信息gcs.googlehadoop文件系统数据库:GHFS版本:1.2.9-hadoop2

找到8项

drwx------xxx_gmail_com xxx_gmail_com 0 2015-01-28 21:54 tmp

不同的
chmod
选项,如
a+w
,无法更改权限。并且文件的所有者/组始终等于ssh用户(上面的日志来自从Google Cloud控制台启动的ssh终端,它使用您的电子邮件作为用户名)。但我在ssh中也遇到了同样的问题

如何更改权限或使配置单元不给出错误


谢谢。

目前,用于Hadoop的GCS连接器不支持细粒度HDFS权限,因此报告的700是“假的”;事实上,权限是通过控制的,如果使用具有读/写访问权限的服务帐户,则经过身份验证的GCE VM中的任何linux用户实际上都能够读取/写入/执行GCS内的所有文件

Hive 0.14.0似乎要检查根目录上的最低权限733,即使它只是忽略了权限,可访问性也会很好。不幸的是,目前,“必需的权限”在Hive的SessionState中是不可配置的,在Hadoop的GCS连接器中也是不可配置的;在未来的版本中,我们可能会为GCS connector for Hadoop提供配置设置,以指定要报告的权限,和/或在所有目录上实现完整的细粒度posix权限

同时,Hive 0.13.0似乎没有相同的不幸检查,因此如果您对稍微旧一点的Hive版本满意,它应该可以正常工作

重要提示:尽管如此,“单击部署”解决方案目前还没有正式支持Pig或Hive,部分原因是它还没有设置更高级的“NFS一致性缓存”,并自动设置列表一致性缓存如果没有列表一致性缓存,配置单元和Pig可能会意外丢失数据,因为它们依赖“ls”提交临时文件

你最好的选择是下载并使用它;它支持猪和蜂巢,包括:

./bdutil -e querytools deploy
或相当于:

./bdutil -e extensions/querytools/querytools_env.sh deploy
querytools\u env.sh
文件中,您会发现:

# URIs of tarballs to install.
PIG_TARBALL_URI='gs://querytools-dist/pig-0.12.0.tar.gz'
HIVE_TARBALL_URI='gs://querytools-dist/hive-0.12.0-bin.tar.gz'

您可以选择将自己的配置单元版本上传到自己的bucket中,并修改
Hive\u TARBALL\u URI
以获取它。Hive0.14.0仍然无法工作,但您可能会幸运地使用Hive0.13.0。或者,如果你不太在意这个版本,默认的Hive0.12.0会从Google的工程团队那里得到持续的测试和验证,这样你会有更好的验证体验。如果愿意,您还可以在GitHub上查看bdutil的内容,您安装了哪个版本的Hive?此外,您是否有机会提供完整的堆栈跟踪,包括“由…引起的”部分?有必要追踪@DennisHuo的根本原因,请参见编辑以回答。谢谢你的帮助,如果你还需要什么,请告诉我。
bdutil
完成了任务,我可以直接跳入蜂巢并运行作业。非常感谢。