我创建了一个使用配置单元元存储的spark应用程序,但是在创建外部配置单元表的过程中,我在执行应用程序时遇到了这样一个错误(spark驱动程序日志):
Exception in thread "main" org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwxrwxr-x;
at org.apache.spark.sql.hive.HiveExternalCatalog.withClient(HiveExternalCatalog.scala:106)
at org.apache.spark.sql.hive.HiveExternalCatalog.databaseExists(HiveExternalCatalog.scala:214)
at org.apache.spark.sql.internal.SharedState.externalCatalog$lzycompute(SharedState.scala:114)
at org.apache.spark.sql.internal.SharedState.externalCatalog(SharedState.scala:102)
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwxrwxr-x
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522)
at org.apache.spark.sql.hive.client.HiveClientImpl.newState(HiveClientImpl.scala:183)
at org.apache.spark.sql.hive.client.HiveClientImpl.<init>(HiveClientImpl.scala:117)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
我使用k8s的spark操作符运行应用程序。所以我检查了spark应用程序的驱动程序pod的权限:
ls -l /tmp
...
drwxrwxr-x 1 1001 1001 4096 Feb 22 16:47 hive
如果我尝试更改权限,它不会产生任何效果。我也在k8s中运行hivemetastore和hdfs。
如何解决这个问题?
2条答案
按热度按时间piah890a1#
我在窗口10中面临同样的问题,下面的解决方案帮助我解决了这个问题。
以下步骤解决了我的问题
在管理模式下打开命令提示符
winutils.exe chmod 777/tmp/hive
打开Spark壳——主局部[2]
0md85ypi2#
这是一个常见的错误,可以通过在另一个地方创建一个目录并指向spark以使用新的目录来修复。
步骤1:创建一个名为tmpops的新目录
/tmp/tmpops
第二步:给dir权限chmod -777 /tmp/tmpops
注:777用于本地测试。如果您正在处理敏感数据,请确保将此路径添加到安全组,以避免意外数据泄漏和安全漏洞。步骤3:在spark应用程序引用的hive-site.xml中添加以下属性:
一旦您这样做,错误将不再出现,除非有人删除该目录。