0

我正在我的本地机器上开发 Spark 作业,然后在集群上部署以全面运行。我创建了一个其他人在他们的代码中使用的公共库。在这段代码中,我必须使用 HiveContext 来执行 Spark SQL,许多人建议它提供更好的 sql 解析器。我没有对我的机器的管理员访问权限,因此我无法在本地模式下创建 HiveContext。公共代码使用 jar 共享,因此我们无法在 HiveContext 和 SQLContext 之间手动切换以进行测试。无论如何,我可以创建一个通用上下文,它将根据一些参数在本地模式下作为 SQLContext 运行,在集群模式下作为 HiveContext 运行。

这是我在本地模式下尝试创建 HiveContext 时遇到的错误。

17/03/16 13:11:53 INFO ObjectStore:使用 hive.metastore.cache.pinobjtypes="Table,StorageDescriptor,SerDeInfo,Partition,Database,Type,FieldSchema,Order" 17/03/16 设置 MetaStore 对象引脚类:11:54 INFO 数据存储:“org.apache.hadoop.hive.metastore.model.MFieldSchema”类被标记为“仅嵌入”,因此没有自己的数据存储表。17/03/16 13:11:54 INFO 数据存储:“org.apache.hadoop.hive.metastore.model.MOrder”类被标记为“仅嵌入”,因此没有自己的数据存储表。17/03/16 13:11:55 INFO 数据存储:类“org.apache.hadoop.hive.metastore.model.MFieldSchema”被标记为“仅嵌入”,因此没有自己的数据存储表。16 年 3 月 17 日 13:11:55 信息数据存储:类“org.apache.hadoop.hive. 56 信息审计:ugi= ip=unknown-ip-addr cmd=get_all_databases 17/03/16 13:11:56 信息 HiveMetaStore:0:get_functions:db=default pat=* 17/03/16 13:11:56 信息审计:ugi= ip=unknown-ip-addr cmd=get_functions:db=default pat=* 17/03/16 13:11:56 INFO 数据存储:类“org.apache.hadoop.hive.metastore.model.MResourceUri " 被标记为 "embedded-only",因此没有自己的数据存储表。线程“主”java.lang.RuntimeException 中的异常:java.lang.RuntimeException:HDFS 上的根暂存目录:/tmp/hive 应该是可写的。当前权限是:rw-rw-rw- at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522) at org.apache.spark.sql.hive.client.ClientWrapper.(ClientWrapper .scala:204) 在 org.apache.spark.sql.hive.client.IsolatedClientLoader。NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 com.intellij.rt.execution .application.AppMain.main(AppMain.java:144) 引起:java.lang.RuntimeException:根暂存目录:HDFS 上的 /tmp/hive 应该是可写的。当前权限是: rw-rw-rw- at org.apache.hadoop.hive.ql.session.SessionState.createRootHDFSDir(SessionState.java:612) at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs( SessionState.java:554) 在 org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:508) ... 还有 17 个 invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 原因:java .lang.RuntimeException:根暂存目录:HDFS 上的 /tmp/hive 应该是可写的。当前权限是: rw-rw-rw- at org.apache.hadoop.hive.ql.session.SessionState.createRootHDFSDir(SessionState.java:612) at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs( SessionState.java:554) 在 org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:508) ... 还有 17 个 invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 原因:java .lang.RuntimeException:根暂存目录:HDFS 上的 /tmp/hive 应该是可写的。当前权限是: rw-rw-rw- at org.apache.hadoop.hive.ql.session.SessionState.createRootHDFSDir(SessionState.java:612) at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs( SessionState.java:554) 在 org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:508) ... 还有 17 个 HDFS 上的 /tmp/hive 应该是可写的。当前权限是: rw-rw-rw- at org.apache.hadoop.hive.ql.session.SessionState.createRootHDFSDir(SessionState.java:612) at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs( SessionState.java:554) 在 org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:508) ... 还有 17 个 HDFS 上的 /tmp/hive 应该是可写的。当前权限是: rw-rw-rw- at org.apache.hadoop.hive.ql.session.SessionState.createRootHDFSDir(SessionState.java:612) at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs( SessionState.java:554) 在 org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:508) ... 还有 17 个

4

0 回答 0