【发布时间】:2015-01-28 23:16:56
【问题描述】:
我正在尝试在 Google Cloud 上运行 Hive,其中 Hadoop 由 click-to-deploy 安装。 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.GoogleHadoopFileSystemBase:GHFS 版本:1.2.9-hadoop2
找到 8 件商品 ....
drwx------ xxxx_gmail_com xxxx_gmail_com 0 2015-01-28 21:54 tmp
$ hadoop fs -chmod -R 777 /tmp
15/01/28 23:03:31 信息 gcs.GoogleHadoopFileSystemBase:GHFS 版本:1.2.9-hadoop2
$ hadoop fs -ls 15/01/28 23:09:35 INFO gcs.GoogleHadoopFileSystemBase: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 时遇到了同样的问题。
如何更改权限或让 Hive 不给出错误?
谢谢。
【问题讨论】:
-
您安装了哪个版本的 Hive?
-
另外,您是否有机会提供完整的堆栈跟踪,包括“由...引起”部分?有必要从grepcode.com/file/repo1.maven.org/maven2/org.apache.hive/…追根溯源
-
@DennisHuo 看到编辑回答。感谢您的帮助,如果您还有其他需要,请告诉我。
标签: hadoop hive google-compute-engine chmod google-cloud-platform