HDFS上的根暂存目录:/ tmp / hive应该可写。当前权限为:rw-rw-rw-

时间:2018-06-22 00:09:08

标签: apache-spark hive spark-streaming

我正在尝试针对本地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_HOME%已正确设置为 D:\ dependencies \ hadoop ,并且 D:\ dependencies \ hadoop \ bin \ winutils.exe 存在。

我在这里想念什么?我在这里和那里已经浏览了十几篇文章,但是该解决方案对我来说不起作用,我也不知道如何调试它。

2 个答案:

答案 0 :(得分:0)

您需要在HDFS目录而不是本地FS的目录上设置预期的访问模式。

您将需要使用hadoop fs -chmod ...命令。另外,不要忘记检查启动您的spark应用程序的用户是否具有显式或通过被允许写入该目录的组中的权限来写入/tmp/hive的功能。

您可以参考official documentation上的HDFS文件权限。

更新:

因此,如果遇到相同的问题,则需要使用原始帖子或其他类似问题中提到的winutils,但是有问题的目录可能不在C盘上:并且您需要调整临时目录的路径带有正确的驱动器号。

答案 1 :(得分:0)

因此,拔掉头发两天之后,这当然很简单。如果要从另一个驱动器上的工作目录(例如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中的环境配置页面,这应该是当前配置单元目录。