如何在 Windows 10 上运行 Spark Streaming 应用程序?

Posted

技术标签:

【中文标题】如何在 Windows 10 上运行 Spark Streaming 应用程序?【英文标题】:How to run Spark Streaming application on Windows 10? 【发布时间】:2016-12-26 18:06:11 【问题描述】:

我在 MS Windows 10 64 位上运行一个 Spark Streaming 应用程序,它使用 spark-mongo-connector 在 MongoDB 中存储数据。

每当我运行 Spark 应用程序时,即使是 pyspark 我也会收到以下异常:

原因:java.lang.RuntimeException:HDFS 上的根暂存目录:/tmp/hive 应该是可写的。当前权限为:rw-rw-rw-

完整的堆栈跟踪:

Caused by: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: 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)
  at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:508)
  ... 32 more

我使用 Hadoop 3.0.0 alpha1,我自己在本地安装,HADOOP_HOME 环境变量指向 Hadoop 目录的路径,%HADOOP_HOME%\binPATH 环境变量中。

所以我尝试执行以下操作:

> hdfs dfs -ls /tmp
Found 1 items
drw-rw-rw-   -          0 2016-12-26 16:08 /tmp/hive

我尝试更改权限如下:

hdfs dfs -chmod 777 /tmp/hive

但是这个命令输出:

警告 util.NativeCodeLoader:无法为您的平台加载 native-hadoop 库...在适用的情况下使用内置 java 类

我的操作系统似乎缺少 Hadoop 的本机库,在查找后似乎我需要重新编译 64 位平台的 libhadoop.so.1.0.0

在哪里可以找到适用于 Windows 10 64 位的本机库? 还是有另一种解决方法?来自图书馆?

【问题讨论】:

【参考方案1】:

首先,您不必安装 Hadoop 即可使用 Spark,包括带或不带 MongoDB 的 Spark Streaming 模块。

由于您使用的是 Windows,因此存在与 NTFS 的 POSIX 不兼容的已知问题,因此您必须在 PATH 中包含 winutils.exe,因为 Spark 确实在幕后使用 Hadoop jar(用于文件系统访问)。您可以从https://github.com/steveloughran/winutils 下载winutils.exe。如果您不知道应该使用哪个版本,请从 hadoop-2.7.1 下载一个(但它应该真正反映构建 Spark Streaming 的 Hadoop 版本,例如 Spark 2.0.2 的 Hadoop 2.7.x)。

创建c:/tmp/hive 目录并以管理员身份执行以下命令(又名以管理员身份运行):

winutils.exe chmod -R 777 \tmp\hive

PROTIP阅读Problems running Hadoop on Windows 获取 Apache Hadoop 项目的官方答案。

下面的消息是无害的,您可以放心地忽略它。

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform

【讨论】:

如果有,请确保在控制面板中定义了 HADOOP_HOMEPATH 环境变量,这样当您执行 Spark Streaming 应用程序时,Spark 将使用 winutils.exe 作为其自己的低-水平的东西。 实际上确实更改了权限,但 spark 仍然显示相同异常的输出 如何运行 Spark 应用程序?在您启动 Spark 应用程序后,您能否从一开始就将整个输出粘贴到异常中?使用 gist.github.com 粘贴整个输出(如果足够短,也可以将其粘贴到您的问题中)。 我打开一个管理员 cmd 然后:cd C:\spark-2.0.2-bin-hadoop2.7\bin 然后我运行这个pyspark --conf spark.mongodb.input.uri=mongodb://127.0.0.1/db_name.collection_name --packages org.mongodb.spark:mongo-spark-connector_2.11:2.0.0 这是gist link 的错误 你能把set %HADOOP_HOME%set %PATH%加到要点上吗?您也可以将%HADOOP_HOME%\bin\winutils.exe ls \tmp\hive 添加到要点中吗?从命令行中删除 --conf--packages,因为现在不需要它们。我认为我们离找到解决方案更近了!

以上是关于如何在 Windows 10 上运行 Spark Streaming 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Windows 上运行 Apache Spark 示例时出错

如何在特定节点上运行 Spark 作业

为啥运行不成功 spark

spark可以在windows下运行吗

未找到 Spark Cell 魔法

即使以管理员身份运行,在 Windows 错误 5(拒绝访问)上运行 Spark