hdfs上的root scratch dir:/tmp/hive应该是可写的spark app error

zqdjd7g9  于 2021-06-27  发布在  Hive
关注(0)|答案(2)|浏览(426)

我创建了一个使用配置单元元存储的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。
如何解决这个问题?

piah890a

piah890a1#

我在窗口10中面临同样的问题,下面的解决方案帮助我解决了这个问题。
以下步骤解决了我的问题
在管理模式下打开命令提示符
winutils.exe chmod 777/tmp/hive
打开Spark壳——主局部[2]

0md85ypi

0md85ypi2#

这是一个常见的错误,可以通过在另一个地方创建一个目录并指向spark以使用新的目录来修复。
步骤1:创建一个名为tmpops的新目录 /tmp/tmpops 第二步:给dir权限 chmod -777 /tmp/tmpops 注:777用于本地测试。如果您正在处理敏感数据,请确保将此路径添加到安全组,以避免意外数据泄漏和安全漏洞。
步骤3:在spark应用程序引用的hive-site.xml中添加以下属性:

<property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/tmpops</value>
  </property>

一旦您这样做,错误将不再出现,除非有人删除该目录。

相关问题