在纱线客户端错误上运行火花壳

时间:2016-09-18 13:59:47

标签: shell hadoop apache-spark yarn

我有Spark 1.6.1并且我已经设置了

export HADOOP_CONF_DIR=/folder/location

现在如果我运行spark shell:     $ ./spark-shell --master yarn --deploy-mode client 我得到这种类型的错误(相关部分)

    $ 16/09/18 15:49:18 INFO impl.TimelineClientImpl: Timeline service address: http://URL:PORT/ws/v1/timeline/
16/09/18 15:49:18 INFO client.RMProxy: Connecting to ResourceManager at URL/IP:PORT
16/09/18 15:49:18 INFO yarn.Client: Requesting a new application from cluster with 9 NodeManagers
16/09/18 15:49:19 INFO yarn.Client: Verifying our application has not requested more than the maximum memory capability of the cluster (14336 MB per container)
16/09/18 15:49:19 INFO yarn.Client: Will allocate AM container, with 896 MB memory including 384 MB overhead
16/09/18 15:49:19 INFO yarn.Client: Setting up container launch context for our AM
16/09/18 15:49:19 INFO yarn.Client: Setting up the launch environment for our AM container
16/09/18 15:49:19 INFO yarn.Client: Preparing resources for our AM container
16/09/18 15:49:19 WARN shortcircuit.DomainSocketFactory: The short-circuit local reads feature cannot be used because libhadoop cannot be loaded.
16/09/18 15:49:19 ERROR spark.SparkContext: Error initializing SparkContext.
org.apache.hadoop.security.AccessControlException: Permission denied: user=Menmosyne, access=WRITE, inode="/user/Mnemosyne/.sparkStaging/application_1464874056768_0040":hdfs:hdfs:drwxr-xr-x
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:319)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:292)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:213)

然而,当我跑步时

$ ./spark-shell 

(没有指定master)我在屏幕上获得了比平常更多的配置(即它应该在hadoop文件夹中加载配置)。因此,如果我没有指定主纱是纱线,那么我的火花作业是否仍然会被提交到纱线群中?

3 个答案:

答案 0 :(得分:1)

spark中的默认主数据是 本地 ,这意味着应用程序将在您的计算机上本地运行,而不是在群集中运行。

通常,纱线应用程序(hive,mapreduce,spark等)需要创建临时文件夹来存储部分数据和/或当前进程配置。通常这个临时数据写在HDFS用户家中(在你的情况下/用户/ Mnemosyne)

您的问题是您的主文件夹是由用户 hdfs 创建的,而您的用户 Mnemosyne 没有权限在其上书写。

然后,spark作业无法在启动应用程序所需的HDFS中创建时间结构。

我的建议是您更改主文件夹的所有者(每个用户应该是其主目录的所有者)并且声明所有者具有对其主目录的完全访问权限。

https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/FileSystemShell.html#chown

答案 1 :(得分:1)

Mnemosyne主目录的权限不正确。它由hdfs用户拥有,而不是Mnemosyne。

运行:hdfs dfs -chown -R Mnemosyne / user / Mnemosyne /

在此处查看hdfs chown文档:https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/FileSystemShell.html#chown

答案 2 :(得分:1)

我刚用spark 1.6.2和hadoop 2.6.0集群解决了这个问题 1.将spark-assembly-1.6.2-hadoop2.6.0.jar从local复制到hdfs  HDFS://站长:9000 /火花/火花组装1.6.2-hadoop2.6.0.jar

2.in spark-defaults.conf添加参数 spark.yarn.jars hdfs:// Master:9000 / spark / spark-assembly-1.6.2-hadoop2.6.0.jar

然后运行spark-shell --master yarn-client 好的一切

如果你想在纱线模式下运行spark,还有一件事,不要在本地模式下启动spark集群。