hdfs上的root scratch dir:/tmp/hive应该是可写的当前权限为:rw rw rw-

2ic8powd  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(552)

我试着用spark里的结构化流媒体来对抗Kafka的一个地方主题。
首先我介绍zookeeper和kafka:

write-host -foregroundcolor green "starting zookeeper..."
start "$KAFKA_ROOT\bin\windows\zookeeper-server-start.bat" "$KAFKA_ROOT\config\zookeeper.properties"

write-host -foregroundcolor green "starting kafka..."
start "$KAFKA_ROOT\bin\windows\kafka-server-start.bat" "$KAFKA_ROOT\config\server.properties"

然后我开始这样做:

& "$SPARK_ROOT\bin\spark-shell.cmd" --packages "org.apache.spark:spark-sql-kafka-0-10_2.11:2.3.1"

然后我执行这个scala命令:

val ds = spark.readStream.format("kafka").option("kafka.bootstrap.servers", "localhost:9092").option("subscribe", "test").load()

但我发现这个错误:

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: rw-rw-rw-;

每个搜索结果都会显示一些关于使用winutils设置权限的信息,因此我尝试了这些答案,结果如下:

C:\>winutils chmod 777 \tmp\hive

C:\>winutils chmod 777 C:\tmp\hive

C:\>winutils ls C:\tmp\hive
drwxrwxrwx 1 DOMAIN\user DOMAIN\Domain Users 0 Jun 21 2018 C:\tmp\hive

看起来不错,但仍然发生相同的异常。
%hadoop\u home%正确设置为d:\dependencies\hadoop,并且存在d:\dependencies\hadoop\bin\winutils.exe。
我错过了什么?我已经在这里和那里通过了十几个职位,但解决方案是不适合我,我不知道如何调试它。

htzpubme

htzpubme1#

您需要在hdfs目录上设置预期的访问模式,而不是在本地fs上的目录上。
你需要使用 hadoop fs -chmod ... 这是我的命令。另外,不要忘记检查启动spark应用程序的用户是否有能力写入 /tmp/hive 可以显式地或通过在组中写入此目录。
您可以参考有关hdfs文件权限的官方文档。
更新:
因此,如果您遇到了相同的问题,您需要使用winutils,正如在原始帖子或其他类似问题中所提到的,但是有问题的目录可能不在磁盘c:上,并且您需要用正确的驱动器号调整临时目录的路径。

ilmyapht

ilmyapht2#

所以拔掉头发两天后,当然是简单的事情。如果您是从另一个驱动器(例如d:)上的工作目录调用c:\spark\bin\spark shell,那么您需要更新的权限实际上是:

C:\Users\user>winutils ls D:\tmp\hive
d--------- 1 DOMAIN\user DOMAIN\Domain Users 0 Jun 25 2018 D:\tmp\hive

C:\Users\user>winutils chmod -R 777 D:\tmp\hive

C:\Users\user>winutils ls D:\tmp\hive
drwxrwxrwx 1 DOMAIN\user DOMAIN\Domain Users 0 Jun 25 2018 D:\tmp\hive

我找不到任何命令,也看不到任何配置,或者web ui中的环境配置页都不应该显示当前配置单元目录是什么。

相关问题